一个基于 C++17 的多模型聊天接入项目,仓库同时包含:
ai_chat_SDK:统一封装多家大模型与本地 Ollama 的 C++ SDKAIChatServer:基于 SDK 构建的 HTTP 聊天服务ChatServer/build/www:配套的前端聊天页面
如果你希望在 C++ 项目中快速接入 LLM,或者直接运行一个可访问的聊天服务,这个仓库可以作为起点。
chat-sdk-access-ai-large-model/
├── AIModelAccess/
│ ├── sdk/ # Chat SDK
│ ├── ChatServer/ # HTTP 服务端 + 前端静态资源
│ └── test/ # SDK 测试与示例
├── docs/
│ └── diagrams/ # PlantUML 类图
├── README.md
└── README.en.md
下图来自 docs/diagrams/class-architecture.puml,展示了 SDK、会话管理、模型管理和 Provider 的关系。
- 统一接入多种模型
- 会话创建、查询、列举、删除
- 消息持久化
- 全量回复
sendMessage - 流式回复
sendMessageIncremental - SQLite 本地存储
- DeepSeek:
deepseek-chat - OpenRouter(OpenAI):
openai/gpt-4o-mini - OpenRouter(Gemini):
google/gemini-2.0-flash-001 - Ollama 本地模型:例如
gemma3:270m
GET /api/sessions:获取会话列表GET /api/models:获取可用模型POST /api/session:创建新会话GET /api/session/{id}/history:获取会话历史POST /api/message:发送消息并全量返回POST /api/message/async:发送消息并流式返回DELETE /api/session/{id}:删除会话- 托管前端静态页面
- CMake >= 3.10
- 支持 C++17 的编译器(g++ / clang++)
OpenSSLjsoncppfmtspdlogsqlite3gflags(ChatServer)gtest(test)
Linux 环境通常需要先安装对应开发包,例如:
libssl-devlibjsoncpp-devlibfmt-devlibspdlog-devlibsqlite3-devlibgflags-devlibgtest-dev
git clone https://gitee.com/zhibite-edu/ai-model-acess-tech.git
# 或
git clone https://github.com/PinkMagicFly/Ai_Chat_SDK.git
cd chat-sdk-access-ai-large-model如果你使用的是你自己的镜像仓库,请把地址替换成实际仓库地址。
cd AIModelAccess/sdk
mkdir -p build
cd build
cmake ..
make -j如果你需要安装到系统目录:
sudo make install默认安装位置:
- 静态库:
/usr/local/lib - 头文件:
/usr/local/include/ai_chat_SDK
cd AIModelAccess/ChatServer
mkdir -p build
cd build
cmake ..
make -j编译结果默认输出到:
AIModelAccess/ChatServer/build/AIChatServer
export deepseek_apikey="your_deepseek_key"
export openrouter_apikey="your_openrouter_key"如果你启用本地模型,请确保:
ollama serve
ollama pull gemma3:270m推荐在 AIModelAccess/ChatServer/build 目录下启动:
cd AIModelAccess/ChatServer/build
./AIChatServer原因是当前服务端静态目录配置为:
_chatServer->set_base_dir("./www");因此当前工作目录需要能找到 ./www,否则根路径无法正确映射前端页面。
启动后默认访问地址:
http://127.0.0.1:8807/http://127.0.0.1:8807/index.html
AIChatServer 支持 4 层配置优先级:
- 命令行参数
--config_file指定文件- 可执行文件目录下的
config.conf - 默认值 / 环境变量
示例 config.conf:
--host=0.0.0.0
--port=8807
--log_level=INFO
--temperature=0.7
--max_tokens=2048
--ollama_model_name=gemma3:270m
--ollama_model_desc=Gemma 3 local model
--ollama_endpoint=http://localhost:11434帮助与版本:
./AIChatServer --help
./AIChatServer --version头文件:
#include <ai_chat_SDK/ChatSDK.h>当前 ChatSDK 常用接口:
bool initializeSDK(const std::vector<std::shared_ptr<Config>>& configs)std::string createSession(const std::string& modelName)Session getSession(const std::string& sessionId)std::vector<std::string> getSessionLists() constbool deleteSession(const std::string& sessionId)std::vector<LLMInfo> getAvailableModels() conststd::string sendMessage(const std::string& sessionId, const std::string& message)std::string sendMessageIncremental(const std::string& sessionId, const std::string& message, callback)
相关结构体见:
AIModelAccess/sdk/include/common.h
包括:
MessageConfigAPIConfigOllamaConfigLLMInfoSession
#include <iostream>
#include <memory>
#include <vector>
#include <cstdlib>
#include <ai_chat_SDK/ChatSDK.h>
int main() {
ai_chat_sdk::ChatSDK sdk;
auto deepseek = std::make_shared<ai_chat_sdk::APIConfig>();
deepseek->_modelName = "deepseek-chat";
deepseek->_apiKey = std::getenv("deepseek_apikey");
deepseek->_temperature = 0.7f;
deepseek->_max_tokens = 2048;
std::vector<std::shared_ptr<ai_chat_sdk::Config>> configs = {deepseek};
if (!sdk.initializeSDK(configs)) {
std::cerr << "initializeSDK failed" << std::endl;
return 1;
}
auto sessionId = sdk.createSession("deepseek-chat");
if (sessionId.empty()) {
std::cerr << "createSession failed" << std::endl;
return 1;
}
auto callback = [](const std::string& chunk, bool done) {
std::cout << chunk;
if (done) {
std::cout << "\n[done]" << std::endl;
}
};
auto full = sdk.sendMessageIncremental(sessionId, "你好,请介绍一下你自己。", callback);
std::cout << "\nFull response: " << full << std::endl;
return 0;
}POST /api/session
Content-Type: application/json{
"model": "deepseek-chat"
}GET /api/sessionsGET /api/modelsGET /api/session/{session_id}/historyDELETE /api/session/{session_id}POST /api/message
Content-Type: application/json{
"session_id": "session_xxx",
"message": "你好"
}POST /api/message/async
Content-Type: application/json{
"session_id": "session_xxx",
"message": "你好"
}返回内容为 SSE 风格数据块,例如:
data: "第一段内容"
data: "第二段内容"
data: [DONE]
curl -s http://127.0.0.1:8807/api/modelscurl -s http://127.0.0.1:8807/api/session \
-H 'Content-Type: application/json' \
-d '{"model":"deepseek-chat"}'curl -s http://127.0.0.1:8807/api/sessionscurl -N http://127.0.0.1:8807/api/message/async \
-H 'Content-Type: application/json' \
-d '{"session_id":"session_xxx","message":"请介绍一下你自己"}'测试与示例位于:
AIModelAccess/test/testLLM.cpp
编译方式:
cd AIModelAccess/test
mkdir -p build
cd build
cmake ..
make -j
./AIModelAccessTest运行前请确保:
- 环境变量已设置
- 对应模型服务可访问
- 如果使用 Ollama,本地服务已启动且模型已拉取
- API Key 建议通过环境变量注入,不要写死在源码中
- 生产环境建议继续补充鉴权、限流、监控和容器化部署
- 如果你只需要本地集成能力,可以直接使用 SDK,而不启动 ChatServer
项目使用仓库根目录中的 LICENSE。