模型对话
模型对话
模型对话模块负责统一不同模型 Provider 的调用方式。开发阶段可使用 MockChatModel 离线验证,也可以使用 OpenAICompatibleModel 接入兼容 OpenAI Chat Completions 协议的服务;对于 DeepSeek,AgentKit 提供了独立的 DeepSeekModel 入口,内部复用 OpenAI-compatible 请求格式。
核心类
| 类名 |
说明 |
ChatRequest |
保存 system、user、assistant 等消息,并导出为模型接口需要的 JSON。 |
ModelConfig |
保存 provider、baseUrl、apiKey、model、maxTokens、timeoutMs 等模型配置。 |
ChatReply |
表示一次模型调用的异步结果,通过 Qt signal 返回流式片段、最终结果或错误。 |
ChatModel |
抽象模型基类。 |
MockChatModel |
离线模型,适合功能验证、单元测试和无网络环境。 |
OpenAICompatibleModel |
OpenAI-compatible HTTP 模型实现。 |
DeepSeekModel |
DeepSeek 模型实现,默认使用 https://api.deepseek.com 和 deepseek-v4-flash。 |
支持的 Provider
| Provider |
模型类 |
默认 Base URL |
默认模型 |
说明 |
mock |
MockChatModel |
无 |
无 |
本地离线演示,不需要网络和 API Key。 |
openai |
OpenAICompatibleModel |
https://api.openai.com/v1 |
gpt-4.1-mini |
适用于 OpenAI 或兼容 OpenAI Chat Completions 的服务。 |
deepseek |
DeepSeekModel |
https://api.deepseek.com |
deepseek-v4-flash |
适用于 DeepSeek OpenAI-compatible 接口。 |
ChatRequest 常用方法
| 方法 |
说明 |
参数 |
返回值 |
addMessage(const ChatMessage& message) |
追加一条完整消息。 |
message: 消息对象。 |
无 |
addSystemMessage(const QString& content) |
追加 system 消息。 |
content: 系统提示词。 |
无 |
addUserMessage(const QString& content) |
追加 user 消息。 |
content: 用户输入。 |
无 |
addAssistantMessage(const QString& content) |
追加 assistant 消息。 |
content: 助手回复。 |
无 |
clear() |
清空全部消息。 |
无 |
无 |
messages() const |
获取消息列表。 |
无 |
const QVector<ChatMessage>& |
messagesJson() const |
导出 OpenAI-compatible 消息 JSON。 |
无 |
QJsonArray |
ChatModel 常用方法
| 方法 |
说明 |
参数 |
返回值 |
setConfig(const ModelConfig& config) |
设置模型配置。 |
config: 模型配置。 |
无 |
config() const |
获取当前模型配置。 |
无 |
ModelConfig |
chat(const ChatRequest& request, const QVector<ToolDefinition>& tools, QObject* parent) |
发起对话请求。 |
request: 对话消息。tools: 可选工具定义。parent: Qt 对象父级。 |
ChatReply* |
ChatReply 信号和方法
| 接口 |
说明 |
参数 |
返回值 |
deltaReceived(const QString& delta) |
流式输出片段。 |
delta: 新增文本。 |
signal |
responseReceived(const QJsonObject& response) |
收到完整原始 JSON 响应。 |
response: 原始响应。 |
signal |
finished(const QString& text) |
模型调用完成。 |
text: 最终文本。 |
signal |
failed(const QString& error) |
模型调用失败。 |
error: 错误说明。 |
signal |
canceled() |
请求被取消。 |
无 |
signal |
cancel() |
取消当前请求。 |
无 |
slot |
isCanceled() const |
判断是否已取消。 |
无 |
bool |
finalText() const |
获取最终文本。 |
无 |
QString |
rawResponse() const |
获取原始响应 JSON。 |
无 |
QJsonObject |
示例
#include "QtAgentKit.h"
using namespace UIGQtLib::QtAgent;
auto* model = new OpenAICompatibleModel(this);
ModelConfig config;
config.provider = "openai";
config.baseUrl = "https://api.example.com/v1";
config.apiKey = qgetenv("OPENAI_API_KEY");
config.model = "gpt-5.4-mini";
config.stream = true;
model->setConfig(config);
ChatRequest request;
request.addSystemMessage("你是一个 Qt 桌面应用助手。");
request.addUserMessage("说明如何在 Qt 中接入 AgentKit。");
ChatReply* reply = model->chat(request, {}, this);
connect(reply, &ChatReply::deltaReceived, this, [](const QString& delta) {
qDebug() << delta;
});
connect(reply, &ChatReply::finished, this, [](const QString& text) {
qDebug() << "finished:" << text;
});
connect(reply, &ChatReply::failed, this, [](const QString& error) {
qWarning() << error;
});
示例:接入 DeepSeek
#include "QtAgentKit.h"
using namespace UIGQtLib::QtAgent;
auto* model = new DeepSeekModel(this);
ModelConfig config;
config.provider = "deepseek";
config.baseUrl = "https://api.deepseek.com";
config.apiKey = qgetenv("DEEPSEEK_API_KEY");
config.model = "deepseek-v4-flash";
config.stream = true;
model->setConfig(config);
ChatRequest request;
request.addSystemMessage("你是一个 Qt 桌面应用助手。");
request.addUserMessage("用三句话说明 AgentKit 的作用。");
ChatReply* reply = model->chat(request, {}, this);
connect(reply, &ChatReply::deltaReceived, this, [](const QString& delta) {
qDebug() << delta;
});
connect(reply, &ChatReply::failed, this, [](const QString& error) {
qWarning() << error;
});