03--Deepseek服务器部署与cjson解析

一、ollama部署deepseek模型

1、Ollama 是一个开源的本地大语言模型运行框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。

Ollama 教程:从 0 到 1 全面指南 教程【全文两万字保姆级详细讲解】 -CSDN博客

1.下载ollama

Download Ollama on Linux

但是一般都下载不成功,因为服务器是国外的服务器。(需要翻墙)

2.安装ollama部署工具

gec@PC-20240429TQJF:003-deepseek服务器与cjson解析$ sudo  tar  -xvf  ollama-linux-amd64.tgz  -C  /   #解压部署工具到根目录 
gec@PC-20240429TQJF:003-deepseek服务器与cjson解析$ ollama   serve                      

3.下载deepseek 模型

deepseek-r1:1.5b   #使用最小的模型测试即可,若不满足,可再升级。

ollama run deepseek-r1:1.5b

⚠️注意:下载模型前必须运行ollama服务器

下载界面如下👇

4.开启远程通信功能

#开启监听所有网卡
echo 'export OLLAMA_HOST="0.0.0.0"' >> ~/.bashrc 
echo 'export OLLAMA_ORIGINS="*"'    >> ~/.bashrc#重启加载脚本
source   ~/.bashrc#重启服务器  
ollama  serve提示:修改端口使用下述语句
ollama serve --port 8080提示:启动gpu加速
ollama serve --gpu

测试远程远程服务器是否开启



二、ollama API接口使用

ollama/docs/api.md at main · ollama/ollama · GitHub ⭐官方手册

API 参考文档 -- Ollama 中文文档|Ollama官方文档 中文文档

普通流式请求
curl http://localhost:11434/api/generate -d '{"model": "llama3.2",  👈请求模型"prompt": "Why is the sky blue?"  
}'
包体参数说明
model: (required) the model name  请求的模型   
prompt: the prompt to generate a response for  问题修改为请求deepseek模型
curl http://localhost:11434/api/generate -d '{"model": "deepseek-r1:1.5b",   👈请求模型"prompt": "为什么天空是蓝色的?"  👈请求的问题 
}'-----------------------非流式请求-------------------------------
curl http://localhost:11434/api/generate -d '{"model": "deepseek-r1:1.5b","prompt": "如何提升篮球技术","stream": false   👈关闭流式输出 
}'----------以json数据返回-------------
curl http://localhost:11434/api/generate -d '{"model": "deepseek-r1:1.5b","prompt": "What color is the sky at different times of the day? Respond using JSON","format": "json", 👈json格式"stream": false
}'

在线API接口 首次调用 API | DeepSeek API Docs

三、HTTP_C请求模型

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define PORT 11434               // http服务器端口号
#define SERVER_IP "192.168.63.1" // http服务器IP地址
#define BUFFER_SIZE 4096 * 10int main(int argc, char const *argv[])
{if (argc != 2){printf("Usage: %s <prompt>\n", argv[0]);return 1;}int sock = 0;struct sockaddr_in serv_addr;char buffer[BUFFER_SIZE] = {0};// 1.创建 socketif ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0){printf("\n Socket creation error \n");return -1;}serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(PORT);                 // 设置端口号serv_addr.sin_addr.s_addr = inet_addr(SERVER_IP); // 设置IP地址// 2.连接到服务器if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0){printf("\nConnection Failed \n");return -1;}/*使用命令请求curl http://192.168.63.1:11434/api/generate -d '{"model": "deepseek-r1:1.5b","prompt": "如何提升篮球技术","stream": false   👈关闭流式输出}'*/// 构造 HTTP 请求体(关闭流式响应)char request_body[1024] = {0};snprintf(request_body, 1024, "{\"model\": \"deepseek-r1:1.5b\", \"prompt\": \"%s\", \"stream\": false}", argv[1]);// 请求头char request_headers[256] = {0};snprintf(request_headers, sizeof(request_headers),"POST /api/generate HTTP/1.1\r\n""Host: 192.168.128.196:11434\r\n""Content-Type: application/json\r\n""Content-Length: %zu\r\n""\r\n",strlen(request_body));// 请求协议char request[4096] = {0};snprintf(request, sizeof(request), "%s%s", request_headers, request_body);// 发送请求send(sock, request, strlen(request), 0);printf("Request sent:\n%s\n", request);while (1){// 接收响应int valread = read(sock, buffer, BUFFER_SIZE);if (valread > 0){printf("Response:\n%s\n", buffer);}else{printf("Failed to receive response.\n");}}// 关闭 socketclose(sock);return 0;
}

四、⭐json 数据解析

1、json基本概念

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
JSON 是轻量级的文本数据交换格式JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,
但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 
目前非常多的动态(PHP,JSP,.NET)编程语言都支持 JSON ,JSON 具有自我描述性,更易理解json的基本概念:
对象:由一对花括号,括起来的数据就是一个对象 { } ,一个对象中包含,key与value。  
键/值: json数据中每一个key(键)对应一个value(值)。 
数组:由中括号[],括起来的数据就是数组 ,例如:[1,2,3,4,5]; 👉 {"name":"小明"} ,这就是一个json数据,该对象中包含一个key和一个value 
👉 {"name":"小明", "age":18,"phone":"1314666"} ,这就是一个json数据,有3个key对应3个value    对象中可以继续包含对象 
{"name": "张三","age": 30,"address": {"street": "中山路","city": "北京","postalCode": "100000"}
}
先看最外层只有 3 个key和3个value 
{"name": "张三","age": 30,"address": Object{...}
}
再看内层,内层中也是3个key和3个value  
{"street": "中山路","city": "北京","postalCode": "100000"
}

JSON在线解析格式化验证 - JSON.cn

2、json 数据解析

1.下载json库

GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C

2.json源码的使用

3json 函数接口

/*返回json版本信息*/
const char* cJSON_Version(void);//把字符串数据转换为json对象 
cJSON * cJSON_Parse(const char *value);  //⭐
value:需要转换的字符串数据
返回值:成功 json对象  失败 NULL //通过key获取value 
cJSON *cJSON_GetObjectItem(const cJSON * const object, const char * const string); //⭐
object:json对象  
string:key(键)
返回值:成功 value(值)  失败 NULL /* Check item type and return its value */
char * cJSON_GetStringValue(const cJSON * const item); //把value转换为字符串   //⭐
double cJSON_GetNumberValue(const cJSON * const item); //把value转换为整形值   //⭐//获取当前数组元素的个数
int cJSON_GetArraySize(const cJSON *array);                                //⭐//获取数组下标对应元素
cJSON * cJSON_GetArrayItem(const cJSON *array, int index);               //⭐

例子;

#include <stdio.h>
// 添加json解析头文件
#include "cJSON.h"int main()
{// 调用json接口const char *ver = cJSON_Version();printf("ver=%s\n", ver);char str1[] = "{""\"person\": {""\"name\": \"小明\",""\"age\": 25,""\"city\": \"北京\",""\"contact\": {""\"email\": \"xiaoming@example.com\",""\"phone\": \"123-456-7890\"""},""\"education\": {""\"degree\": \"Bachelor\",""\"major\": \"Computer Science\",""\"university\": \"Tsinghua University\"""},""\"residence\": {""\"address\": \"北京市朝阳区\",""\"type\": \"公寓\",""\"owned\": false""}""}""}";//外层1个key,第二层有6个key// 通过key来获取value//将字符串转换为置json对象cJSON *str1_obj = cJSON_Parse(str1);//第一层,通过key提取出来的是一个对象cJSON *small_obj = cJSON_GetObjectItem(str1_obj, "person");//第二层,cJSON *value = cJSON_GetObjectItem(small_obj, "name");printf("name=%s\n", cJSON_GetStringValue(value));cJSON *value1 = cJSON_GetObjectItem(small_obj, "age");printf("age=%.2f\n", cJSON_GetNumberValue(value1));cJSON *value2 = cJSON_GetObjectItem(small_obj, "city");printf("city=%s\n", cJSON_GetStringValue(value2));// 第三层cJSON *small_obj1 = cJSON_GetObjectItem(small_obj, "contact");cJSON *value3 = cJSON_GetObjectItem(small_obj1, "email");printf("email=%s\n", cJSON_GetStringValue(value3));cJSON *value4 = cJSON_GetObjectItem(small_obj1, "phone");printf("phone=%s\n", cJSON_GetStringValue(value4));cJSON *small_obj2 = cJSON_GetObjectItem(small_obj, "education");cJSON *value5 = cJSON_GetObjectItem(small_obj2, "degree");printf("degree=%s\n", cJSON_GetStringValue(value5));cJSON *value6 = cJSON_GetObjectItem(small_obj2, "major");printf("major=%s\n", cJSON_GetStringValue(value6));cJSON *value7 = cJSON_GetObjectItem(small_obj2, "university");printf("university=%s\n", cJSON_GetStringValue(value7));cJSON *small_obj3 = cJSON_GetObjectItem(small_obj, "residence");cJSON *value8 = cJSON_GetObjectItem(small_obj3, "address");printf("address=%s\n", cJSON_GetStringValue(value8));cJSON *value9 = cJSON_GetObjectItem(small_obj3, "type");printf("type=%s\n", cJSON_GetStringValue(value9));cJSON *value10 = cJSON_GetObjectItem(small_obj3, "owned");printf("owned=%s\n", cJSON_GetStringValue(value10));}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

栈(算法)

在 C 里&#xff0c;栈是一种遵循后进先出&#xff08;LIFO&#xff09;原则的数据结构。下面从多个方面为你介绍 C 栈&#xff1a; 1. 使用标准库中的std::stack C 标准库提供了std::stack容器适配器&#xff0c;能方便地实现栈的功能。以下是简单示例&#xff1a; cpp #in…

UniApp 页面布局自定义头部导航

动态计算头部高度与内容偏移量&#xff1a;实现 UniApp 页面布局的精准适配 在移动端应用开发中&#xff0c;页面布局的精准适配是一个关键问题。尤其是在 UniApp 中&#xff0c;不同设备的屏幕尺寸、状态栏高度以及头部布局的差异&#xff0c;可能导致页面内容错位或显示不全…

verilog学习--1、语言要素

先看一个例子 /*This is first Verilog progaram*/ timescale 1ns/1ns module HalfAdder(A,B,Sum,Carry);input A,B;output Sum, Carry; /**/assign #2 SumA^B;assign #5 CarryA&B&#xff1b; endmodule; Verilog以module为单位编写&#xff0c;每个文件一个module&#…

AC 自动机 洛谷P3808 P3796 P5357

洛谷P3808 #include <bits/stdc.h> using namespace std; const int maxn 1e6 5; int ch[maxn][30], fa[maxn], End[maxn]; int cnt 0 , n; int get_num(char c){return c - a;} void build(string s){int cur 0, len s.length();for(int i 0; i < len; i){int…

C++蓝桥杯实训篇(二)

片头 嗨咯~小伙伴们&#xff01;今天我们来一起学习算法和贪心思维&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 第1题 数位排序 对于这道题&#xff0c;我们需要自己写一个排序算法&#xff0c;也就是自定义排序&#xff0c;按照数位从小到大进行排序。 举一…

redisson常用加锁方式

RLock lock redissonClient.getLock("lock:order:" order);和redissonDistributedLocker.tryLock("lock:order:" order&#xff0c; TimeUnit.SECONDS, RedisLockKey.DEFAULT_WAIT_TIME, RedisLockKey.DEFAULT_HOLD_TIME);这两种加锁方式的区别如下&…

Go 微服务框架 | 路由实现

文章目录 不用框架实现web接口实现简单的路由实现分组路由支持不同的请求方式支持同一个路径的不同请求方式前缀树应用前缀树完善路由代码 不用框架实现web接口 // blog main.go 文件 package mainimport ("fmt""log""net/http" )func main() {…

zabbix中通过模板实现自动发现对tcp端口批量监控

主要为了解决监控大量端口&#xff0c;避免繁琐的重复操作监控项和触发器 诸位~ 仅供参考哈 自动发现监控参考地址: https://blog.csdn.net/qq_37510195/article/details/130893655 模板 首先创建一个模板 自定义名称和群组 创建自动发现规则 模板——自动发现——创建发现规则…

Mysql备忘记录

1、简介 Mysql操作经常忘记命令&#xff0c;本文将持续记录Mysql一些常用操作。 2、常见问题 2.1、忘记密码 # 1、首先停止Mysql服务 systemctl stop mysqld # windows 从任务管理器里面停 # 2、更改配置文件 my.cnf (windows是 ini文件) vim /etc/my.cnf 在[mysqld]下面添…

【蓝桥杯】15届JAVA研究生组F回文字符串

一、思路 1.这题去年考的时候想的是使用全排列进行尝试&#xff0c;实际不用这么麻烦&#xff0c;只用找到第一个和最后一个非特殊字符串的位置&#xff0c;然后分别向内检查是否对称&#xff0c;向外检查是否对称直到左指针小于0(可以通过添加使其对称) 2.至于如何找到第一个…

X 进制减法

题目链接&#xff1a; 思路&#xff1a; X进制数321怎么转换为十进制数为65&#xff1f;如下图&#xff1a; ①题目要求我们求 A - B 的最小值&#xff0c;对第 i 位&#xff0c;要求 A[i] - B[i] 的最小值&#xff0c;当进制越小的时候差值越小&#xff0c;但进制要比 max&…

java线程安全-单例模式-线程通信

首先看看单例模式的写法 首先我们先来回顾一下饿汉式单例模式&#xff1a; class Singleton{private static Singleton singletonnew Singleton();private Singleton(){}public static Singleton getInstrance(){return singleton;} } public class Test{public static void …

大数据技术之SPARK

Spark Core 什么是 RDD 代码中是一个抽象类&#xff0c;它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合 弹性 存储的弹性&#xff1a;内存与磁盘的自动切换&#xff1b; 容错的弹性&#xff1a;数据丢失可以自动恢复&#xff1b; 计算的弹性&#xff1a;…

Go 语言范围 (Range)

Go 语言范围 (Range) Go 语言是一种静态强类型、编译型、并发型编程语言&#xff0c;由 Google 开发。它的简洁性和高效性使其成为众多开发者的首选。在 Go 语言中&#xff0c;range 是一个非常有用的关键字&#xff0c;用于遍历数组、切片、字符串以及通道&#xff08;channe…

VUE中数据绑定之OptionAPI

<template> <div> 姓名:<input v-model="userName" /> {{ userName }} <br /> 薪水:<input type="number" v-model="salary" /> <br /> <button v-on:click="submit">提交</button>…

react动态路由

框架的权限控制&#xff08;在config.ts中配置&#xff09; export default {access: {}, }; 权限配置文件&#xff08;access.ts&#xff09; 新建 src/access.ts &#xff0c;在该文件中 export default 一个函数&#xff0c;定义用户拥有的权限 该文件需要返回一个 functi…

Android里面如何优化xml布局

在 Android 开发中&#xff0c;以下是系统化的优化方案&#xff0c;从基础到高级分层解析&#xff1a; 一、基础优化策略 1. 减少布局层级 问题&#xff1a;每增加一层布局&#xff0c;测量/布局时间增加 1-2ms 解决方案&#xff1a; <!-- 避免嵌套 --> <LinearLayo…

基于STM32、HAL库的IP6525S快充协议芯片简介及驱动程序设计

一、简介: IP6525S是一款高性能的同步降压DC-DC转换器芯片,具有以下特点: 输入电压范围:4.5V至32V 输出电压范围:0.8V至30V 最大输出电流:5A 效率高达95% 可编程开关频率(100kHz-1MHz) 支持PWM和PFM模式 内置过流保护、过温保护等功能 该芯片常用于工业控制、通信设备…

二分算法的入门笔记

二分查找 使用前提&#xff1a;有序。可理解为枚举的一种技巧。时间复杂度&#xff1a; l o g ( n ) log(n) log(n) 基础模版代码 使用时根据情景进行相应的变化。注意跳出条件and分支处理方式and返回答案&#xff0c;三者之间的配合&#xff0c;不要进入死循环。可以在模拟…

轻量级Java跨包调用(完全解耦)

Java函数式命令模式 轻量级跨包调用解耦方案&#xff0c;让跨包调用就像调用本地接口那样简单。适用与具有公共依赖的两个jar包&#xff0c;但是又不想相互引入对方作为依赖。 函数式命令模式&#xff0c;很好地实现了跨包调用解耦的目标&#xff0c;并且通过泛型JSON动态转换保…