亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++通過控制臺訪問deepseek接口并進行對話

 更新時間:2025年02月09日 10:31:16   作者:manelry  
這篇文章主要為大家詳細介紹了C++如何通過控制臺訪問deepseek接口并進行對話,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

如題,其實對于調試一個接口來說并不復雜,關鍵在于會遇到json輸入和解析的字符處理問題,比如中文的輸入和解析,動不動就會遇到亂碼,經(jīng)過與deepseek的深度碰撞(發(fā)給deepseek),同比通義千問給的方案,更加的準確和高效

開發(fā)環(huán)境:win11,visual stutio 2022

注意事項:在創(chuàng)建控制臺項目后,對main.cpp(或者你自定義的cpp文件)點擊頂部“文件”-xxxx.cpp另存為,選擇”保存“按鈕右側的更多按鈕下的“編碼保存”

以下是代碼方案

#include <iostream>
#include <json/json.h>
#include <curl/curl.h>
#include <vector>
#include <Windows.h>
#include <sstream>
using namespace std;

// 回調函數(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() {
    // 設置控制臺為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);

            // 構建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);

            // 設置CURL選項
            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;
            }

            // 處理響應
            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ěn)定,經(jīng)常會出現(xiàn)空響應,多試幾次即可。

后續(xù):目前代碼未支持流式輸出,另外實際上對于有需要的朋友,可以設計幾個輔助功能

1、創(chuàng)建新話題,和保存舊話題內容

2、對于想要留存到本地的價值內容,可以設計個事件,將對話內容以word或者txt的方式存放到一個專門的文件夾中

到此這篇關于C++通過控制臺訪問deepseek接口并進行對話的文章就介紹到這了,更多相關C++控制臺訪問deepseek接口內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言使用廣度優(yōu)先搜索算法解決迷宮問題(隊列)

    C語言使用廣度優(yōu)先搜索算法解決迷宮問題(隊列)

    這篇文章主要介紹了C語言使用廣度優(yōu)先搜索算法解決迷宮問題,結合迷宮問題分析了C語言隊列廣度優(yōu)先搜索算法的相關使用技巧,需要的朋友可以參考下
    2017-09-09
  • C語言學生成績管理系統(tǒng)源碼

    C語言學生成績管理系統(tǒng)源碼

    這篇文章主要為大家詳細介紹了C語言學生成績管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • c++函數(shù)指針使用示例分享

    c++函數(shù)指針使用示例分享

    這篇文章主要介紹了c++函數(shù)指針使用示例,需要的朋友可以參考下
    2014-03-03
  • C++中 set的用法

    C++中 set的用法

    這篇文章主要介紹了C++中 set的用法,set的內部使用了紅黑樹對所有的元素進行了排序。在樹結構當中,我們通常使用的都是<key, value>的形式。下面我們來看看該內容的具體情況,需要的朋友也可以參考一下
    2021-11-11
  • C++中的RTTI機制詳解

    C++中的RTTI機制詳解

    這篇文章主要介紹了C++中的RTTI機制詳解,本文詳細的總結了RTTI的相關知識,需要的朋友可以參考下
    2014-10-10
  • wxWidgets自定義按鈕的方法

    wxWidgets自定義按鈕的方法

    這篇文章主要為大家詳細介紹了wxWidgets自定義按鈕的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C++?opencv利用grabCut算法實現(xiàn)摳圖示例

    C++?opencv利用grabCut算法實現(xiàn)摳圖示例

    這篇文章主要為大家介紹了C++?opencv利用grabCut算法實現(xiàn)摳圖的代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • C語言實現(xiàn)數(shù)學表達式運算

    C語言實現(xiàn)數(shù)學表達式運算

    這篇文章主要為大家詳細介紹了c語言實現(xiàn)數(shù)學表達式運算,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語言實現(xiàn)循環(huán)隊列

    C語言實現(xiàn)循環(huán)隊列

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)循環(huán)隊列,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 利用mmap實現(xiàn)文件拷貝功能

    利用mmap實現(xiàn)文件拷貝功能

    這篇文章主要為大家詳細介紹了利用mmap實現(xiàn)文件拷貝功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評論