C++通過控制臺訪問deepseek接口并進(jìn)行對話
如題,其實(shí)對于調(diào)試一個(gè)接口來說并不復(fù)雜,關(guān)鍵在于會遇到j(luò)son輸入和解析的字符處理問題,比如中文的輸入和解析,動(dòng)不動(dòng)就會遇到亂碼,經(jīng)過與deepseek的深度碰撞(發(fā)給deepseek),同比通義千問給的方案,更加的準(zhǔn)確和高效
開發(fā)環(huán)境:win11,visual stutio 2022
注意事項(xiàng):在創(chuàng)建控制臺項(xiàng)目后,對main.cpp(或者你自定義的cpp文件)點(diǎn)擊頂部“文件”-xxxx.cpp另存為,選擇”保存“按鈕右側(cè)的更多按鈕下的“編碼保存”
以下是代碼方案
#include <iostream> #include <json/json.h> #include <curl/curl.h> #include <vector> #include <Windows.h> #include <sstream> using namespace std; // 回調(diào)函數(shù) static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) { ((std::string*)userp)->append((char*)contents, size * nmemb); return size * nmemb; } void addMessage(std::vector<Json::Value>& messages, const std::string& role, const std::string& content) { Json::Value message; message["role"] = role; message["content"] = content; messages.push_back(message); } int main() { // 設(shè)置控制臺為UTF-8模式 system("chcp 65001 > nul"); SetConsoleOutputCP(CP_UTF8); SetConsoleCP(CP_UTF8); std::string apiKey = "這里放你自己申請的APIkey(注意不要尖括號)"; std::vector<Json::Value> messages; addMessage(messages, "system", "You are a helpful assistant."); CURL* curl = curl_easy_init(); if (curl) { std::string readBuffer; std::string userInput; while (true) { std::cout << "User: "; std::getline(std::cin, userInput); if (userInput == "exit") break; addMessage(messages, "user", userInput); // 構(gòu)建JSON請求 Json::Value jsonData; jsonData["model"] = "deepseek-chat"; jsonData["stream"] = false; for (const auto& msg : messages) { jsonData["messages"].append(msg); } // 生成JSON字符串 Json::StreamWriterBuilder writerBuilder; writerBuilder.settings_["emitUTF8"] = true; std::string jsonString = Json::writeString(writerBuilder, jsonData); // 設(shè)置CURL選項(xiàng) curl_easy_setopt(curl, CURLOPT_URL, "https://api.deepseek.com/chat/completions"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonString.c_str()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); struct curl_slist* headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); headers = curl_slist_append(headers, ("Authorization: Bearer " + apiKey).c_str()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // 執(zhí)行請求 CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { std::cerr << "Request failed: " << curl_easy_strerror(res) << std::endl; } // 處理響應(yīng) Json::CharReaderBuilder readerBuilder; std::unique_ptr<Json::CharReader> reader(readerBuilder.newCharReader()); Json::Value root; std::string errs; if (reader->parse(readBuffer.c_str(), readBuffer.c_str() + readBuffer.size(), &root, &errs)) { if (root.isMember("choices") && root["choices"].size() > 0) { std::string response = root["choices"][0]["message"]["content"].asString(); std::cout << "Assistant: " << response << std::endl; addMessage(messages, "assistant", response); } else { std::cerr << "API Error: " << root.toStyledString() << std::endl; } } else { std::cerr << "JSON Parse Error: " << errs << std::endl; } readBuffer.clear(); curl_slist_free_all(headers); curl_easy_reset(curl); } curl_easy_cleanup(curl); } return 0; }
ps:由于deepseek官方API服務(wù)目前不穩(wěn)定,經(jīng)常會出現(xiàn)空響應(yīng),多試幾次即可。
后續(xù):目前代碼未支持流式輸出,另外實(shí)際上對于有需要的朋友,可以設(shè)計(jì)幾個(gè)輔助功能
1、創(chuàng)建新話題,和保存舊話題內(nèi)容
2、對于想要留存到本地的價(jià)值內(nèi)容,可以設(shè)計(jì)個(gè)事件,將對話內(nèi)容以word或者txt的方式存放到一個(gè)專門的文件夾中
到此這篇關(guān)于C++通過控制臺訪問deepseek接口并進(jìn)行對話的文章就介紹到這了,更多相關(guān)C++控制臺訪問deepseek接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言使用廣度優(yōu)先搜索算法解決迷宮問題(隊(duì)列)
這篇文章主要介紹了C語言使用廣度優(yōu)先搜索算法解決迷宮問題,結(jié)合迷宮問題分析了C語言隊(duì)列廣度優(yōu)先搜索算法的相關(guān)使用技巧,需要的朋友可以參考下2017-09-09C++?opencv利用grabCut算法實(shí)現(xiàn)摳圖示例
這篇文章主要為大家介紹了C++?opencv利用grabCut算法實(shí)現(xiàn)摳圖的代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05C語言實(shí)現(xiàn)數(shù)學(xué)表達(dá)式運(yùn)算
這篇文章主要為大家詳細(xì)介紹了c語言實(shí)現(xiàn)數(shù)學(xué)表達(dá)式運(yùn)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11C語言實(shí)現(xiàn)循環(huán)隊(duì)列
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)循環(huán)隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07