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.pswp.cn/pingmian/76161.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76161.shtml
英文地址,請注明出處:http://en.pswp.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動態轉換保…