C++AI大模型接入SDK—快速上手

C++AI大模型接入SDK---ChatSDK编写---快速上手

项目地址:橘子师兄/ai-model-acess-tech - Gitee.com

博客专栏:C++AI大模型接入SDK_橘子师兄的博客-CSDN博客

博主首页:橘子师兄-CSDN博客

ChatSDK支持功能如下:

• 获取支持模型

• 创建会话

• 获取会话列表

• 给模型发送消息,模型响应以全量方式返回

• 给模型发送消息,模型响应以流式方式返回

• 获取历史会话消息

• 删除会话

详细参考使用手册:C++AI大模型接入SDK---ChatSDK使用手册-CSDN博客

使用介绍:

  1. 下载ChatSDK库
  2. 编译并安装libai_chat_sdk库
  3. 在项目中包含 <ai_chat_sdk/chat_sdk.h> 和 ai_chat_sdk 库

具体请详细阅读ChatSDK使用手册,以及仓库中的server案例。

下面快速实现一个基于ChatSDK的使用deepseek的cmd案例,大家看下效果:

c++ 复制代码
#include <iostream>
#include <ai_chat_sdk/chat_sdk.h>
#include <ai_chat_sdk/util/my_logger.h>

void sendMessageStream(ai_chat_sdk::ChatSDK& chatSDK, const std::string& sessionId)
{
    std::cout << "--------------发送消息--------------" << std::endl;
    std::cout << "user消息 > ";
    
    std::string message;
    std::getline(std::cin, message);
    
    std::cout << "--------------发送消息完成--------------" << std::endl;
    
    chatSDK.sendMessageStream(sessionId, message, [](const std::string& response, bool done) {
        std::cout << "assistant消息: " << response << std::endl;
        if (done) {
            std::cout << "--------------接收消息完成--------------" << std::endl;
        }
    });
}

int main(int argc, char* argv[])
{
    bite::Logger::init_logger("aiChatServer", "stdout", spdlog::level::info);
    
    ai_chat_sdk::ChatSDK chatSDK;
    
    // 初始化deepseek模型信息
    ai_chat_sdk::ApiConfig deepseekConfig;
    deepseekConfig.api_key = std::getenv("deepseek_apikey");
    deepseekConfig.temperature = 0.7;
    deepseekConfig.max_tokens = 2048;
    deepseekConfig.model_name = "deepseek-chat";
    
    std::vector<std::shared_ptr<ai_chat_sdk::Config>> configs;
    configs.push_back(std::make_shared<ai_chat_sdk::ApiConfig>(deepseekConfig));
    
    // 初始化模型
    chatSDK.initModels(configs);
    
    std::cout << "--------------创建会话--------------" << std::endl;
    std::string sessionId = chatSDK.createSession("deepseek-chat");
    std::cout << "创建会话成功, 会话ID: " << sessionId << std::endl;
    
    int userOp = 1;  // 注意:原代码中变量名不一致,这里统一为userOp
    
    while (true) {
        std::cout << "-------1. send message 0. exit-----------------" << std::endl;
        std::cin >> userOp;
        
        if (userOp == 0) {
            break;
        }
        
        getchar();  // 清除输入缓冲区中的换行符
        sendMessageStream(chatSDK, sessionId);
    }
    
    std::cout << "--------------程序退出--------------" << std::endl;
    return 0;
}

在源码目录下创建CMakeList.txt文件,按照如下规则进行编译:

cmake 复制代码
# 项目名称为AIChatDemo
project(AIChatDemo)
# 设置C++标准,使用C++17标准进行编译,REQUIRED表示编译器如果不支持C++17则报错
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 设置构建类型为Debug
set(CMAKE_BUILD_TYPE Debug)
# 添加可执行文件
add_executable(AIChatDemo cmdChatDemo.cpp)
# 查找OpenSSL包
find_package(OpenSSL REQUIRED)
# 将 OpenSSL 的头文件目录添加到编译器的搜索路径中
include_directories(${OPENSSL_INCLUDE_DIR})
# 设置库的目录,链接器会在这个目录中查找需要的库文件ai_chat_sdk库文件
link_directories(/usr/local/lib)
# 链接SDK
target_link_libraries(AIChatDemo PRIVATE
    ai_chat_sdk
    fmt
    jsoncpp
    OpenSSL::SSL
    OpenSSL::Crypto
    gflags
    spdlog
    sqlite3
)

编译命令:

bash 复制代码
# 构建build目录,并进入build目录
mkdir build && cd build
# 生成构建系统文件
camke ..
# 对程序进行编译
make

运行结果:

复制代码
./AIChatDemo
// ...
--------------创建会话--------------
09:50:44 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/SessionManager.cpp:66 ] create session, session_id:
session_1758016244_00000001, model_name: deepseek-chat
09:50:44 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/DataManager.cpp:106 ] Inserted session:
session_1758016244_00000001
09:50:44 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/ChatSDK.cpp:34 ] create session session_1758016244_00000001
success with model deepseek-chat!!!
创建会话成功, 会话ID: session_1758016244_00000001
--------------发送消息--------------
user消息 > 你是谁?
--------------发送消息完成--------------
09:50:47 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/SessionManager.cpp:123 ] add message to session
session_1758016244_00000001:你是谁?
09:50:48 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/DeepSeekProvider.cpp:179 ] DeepSeekProvider sendMessageStream
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":
{"role":"assistant","content":""},"logprobs":null,"finish_reason":null}]}
data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"我是"},"logprobs":null,"finish_reason":null}]}
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":" Deep"},"logprobs":null,"finish_reason":null}]}
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"Se"},"logprobs":null,"finish_reason":null}]}
data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"ek"},"logprobs":null,"finish_reason":null}]}
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"-V"},"logprobs":null,"finish_reason":null}]}
data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"3"},"logprobs":null,"finish_reason":null}]}
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":","},"logprobs":null,"finish_reason":null}]}
data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"由"},"logprobs":null,"finish_reason":null}]}
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"深度"},"logprobs":null,"finish_reason":null}]}
// ...
buffer: data: [DONE]
assistant消息:
--------------接收消息完成--------------
09:50:53 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/ChatSDK.cpp:146 ] chatsdk sendMessageStream end : 我是 DeepSeek-
V3,由深度求索公司打造的智能助手!🤖✨ 我的目标是帮助你解答各类问题,无论是学习、工作,还
是生活中的小困扰,我都会尽力提供有用的信息和建议。有什么想问的,尽管来吧!😊
09:50:53 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/DataManager.cpp:170 ] Updated session timestamp:
session_1758016244_00000001, round 1
09:50:53 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/ChatSDK.cpp:152 ] Message send and response received for session
session_1758016244_00000001, round 1
--------------发送消息--------------
相关推荐
大模型玩家七七8 小时前
基于语义切分 vs 基于结构切分的实际差异
java·开发语言·数据库·安全·batch
历程里程碑8 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
Coder_Boy_9 小时前
技术发展的核心规律是「加法打底,减法优化,重构平衡」
人工智能·spring boot·spring·重构
牛奔10 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
会飞的老朱11 小时前
医药集团数智化转型,智能综合管理平台激活集团管理新效能
大数据·人工智能·oa协同办公
聆风吟º13 小时前
CANN runtime 实战指南:异构计算场景中运行时组件的部署、调优与扩展技巧
人工智能·神经网络·cann·异构计算
寻星探路13 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
Codebee15 小时前
能力中心 (Agent SkillCenter):开启AI技能管理新时代
人工智能
lly20240615 小时前
Bootstrap 警告框
开发语言
2601_9491465316 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言