模型对话

模型对话

模型对话模块负责统一不同模型 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.comdeepseek-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;
});