产品概览
Qt-UI AgentKit 产品概览
Qt-UI AgentKit 是面向 Qt Widgets 应用的智能体开发套件,帮助桌面产品接入 AI 对话、工具调用、审批确认、执行追踪和流程编排能力。
适用场景
- 工业软件中的设备状态分析、告警摘要和报告生成。
- 企业内部工具中的智能问答、操作建议和数据查询。
- Qt 桌面产品中的嵌入式 AI 助手。
- 需要工具调用、人工审批和流程追踪的 Agent 工作流。
核心能力
- 多种大语言模型接入,支持 Mock 离线模型、OpenAI-compatible 接口和 DeepSeek 接口。
- Mock 离线模型,便于无网络演示和开发调试。
- ChatPanel、模型配置、TraceView、ApprovalDialog 等 Qt Widgets 原生界面组件。
- Tool Registry 和函数工具调用。
- Prompt Template、输出解析、对话记忆、RAG 检索。
- 基于状态的工作流编排,支持条件路由、循环、检查点和人工审核。
Slogan
Build Intelligent Qt Applications, Visually and Natively.
快速接入
快速接入
1. 配置模型
AgentKit 示例程序支持从本地配置读取模型信息。可以在运行目录或 UIGearsAgentKit 目录放置 agentkit.local.json。
OpenAI-compatible 配置示例:
{
"provider": "openai",
"baseUrl": "https://api.example.com/v1",
"apiKey": "your-api-key",
"model": "your-model",
"maxTokens": 1024,
"timeoutMs": 60000,
"stream": true
}
DeepSeek 配置示例:
{
"provider": "deepseek",
"baseUrl": "https://api.deepseek.com",
"apiKey": "your-deepseek-api-key",
"model": "deepseek-v4-flash",
"maxTokens": 1024,
"timeoutMs": 60000,
"stream": true
}
也可以通过环境变量配置真实模型。OpenAI-compatible provider 使用 OPENAI_API_KEY、OPENAI_BASE_URL、OPENAI_MODEL;DeepSeek provider 使用 DEEPSEEK_API_KEY、DEEPSEEK_BASE_URL、DEEPSEEK_MODEL。
没有配置时,示例程序会自动使用 Mock 模型离线运行。
2. 创建聊天请求
using namespace UIGQtLib::QtAgent;
ChatRequest request;
request.addSystemMessage("你是 Qt 应用中的智能助手。");
request.addUserMessage("分析当前设备状态。");
ChatReply* reply = model->chat(request, {}, parent);
3. 注册工具
ToolRegistry registry;
registry.registerTool(new FunctionTool(
"query_device_status",
"查询设备状态。",
schema,
ToolPermission::ReadOnly,
[](const QJsonObject& args) {
return ToolResult{true, {}, "设备状态正常。"};
}
));
4. 运行示例程序
打开 AgentKit 示例程序后,可通过左侧能力树分别查看基础对话、模型能力、流程能力和设备监控分析示例。
使用指南
使用指南
模型接入
AgentKit 使用 ChatModel 抽象模型接口。首版内置:
MockChatModel:本地离线模型,用于演示和测试。OpenAICompatibleModel:兼容 OpenAI Chat Completions 协议的 HTTP 客户端。DeepSeekModel:DeepSeek 模型客户端,默认使用 OpenAI-compatible 接口https://api.deepseek.com和deepseek-v4-flash。
示例程序支持三种 provider:mock、openai、deepseek。配置文件 agentkit.local.json 中把 provider 设置为 deepseek 后,只需要填写 DeepSeek API Key 即可使用真实模型;也可以通过 DEEPSEEK_API_KEY、DEEPSEEK_BASE_URL、DEEPSEEK_MODEL 环境变量配置。
工具调用
业务功能通过 AgentTool 或 FunctionTool 注册到 ToolRegistry。工具包含名称、说明、JSON Schema、权限和执行函数。
工具权限包括:
ReadOnlyWriteDestructiveExternalNetworkFileSystemSystemCommand
涉及写入、文件系统或更高风险操作时,应通过审批弹窗确认。
Trace 追踪
每次工具调用会生成 ToolCallTrace,用于展示工具名称、状态、权限、输入、输出、错误和耗时。ToolCallTraceView 可直接用于产品调试界面。
工作流编排
StateGraph 使用 QJsonObject 作为状态对象。节点读取状态并返回局部更新,边和条件边决定下一步执行位置。
适合实现:
- 多步骤任务。
- 条件路由。
- 循环直到完成。
- 人工审核。
- 工具节点和模型节点组合。
能力总览
AgentKit 能力模块
Qt-UI AgentKit 的接口位于命名空间 UIGQtLib::QtAgent。建议业务代码统一引入聚合头文件:
#include "QtAgentKit.h"
本章按 AgentKit 的能力模块说明 SDK 的核心类、接口方法、参数、返回值和常见调用示例。
类关系概览
ChatModel
├─ MockChatModel
├─ OpenAICompatibleModel
└─ DeepSeekModel
AgentTool
└─ FunctionTool
ToolRegistry
AgentExecutor
PromptTemplate
ChatPromptTemplate
RunnableChain
RunnableParallel
StringOutputParser
JsonOutputParser
StructuredOutputParser
ChatMemory
InMemoryRetriever
SimpleRagChain
StateGraph
MemoryCheckpointer
AgentChatPanel
ModelConfigWidget
ToolCallTraceView
ApprovalDialog
选型建议
| 场景 | 推荐模块 |
|---|---|
| 只需要普通 AI 对话 | ChatRequest + OpenAICompatibleModel 或 DeepSeekModel |
| 需要在 UI 中显示流式输出 | ChatReply + AgentChatPanel |
| 需要模型调用本地业务函数 | ToolRegistry + FunctionTool + AgentExecutor |
| 需要高风险操作确认 | ToolPermission + ApprovalDialog |
| 需要知识库问答 | InMemoryRetriever + SimpleRagChain |
| 需要多步骤可追踪流程 | StateGraph + GraphTrace |
| 需要保存流程状态 | MemoryCheckpointer |
| 需要快速验证产品能力 | MockChatModel + 示例页面 |
模型对话
模型对话
模型对话模块负责统一不同模型 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;
}); 提示词与链式调用
文档内容暂未配置。
输出解析
文档内容暂未配置。
记忆与 RAG
文档内容暂未配置。
工具调用与审批
文档内容暂未配置。
状态流程编排
文档内容暂未配置。
UI 控件
UI 控件
AgentKit 提供 Qt Widgets 控件,便于把 Agent 能力嵌入桌面应用。
核心控件
| 类名 | 说明 |
|---|---|
AgentChatPanel |
聊天面板,包含历史消息、输入框、发送、停止、清空按钮。 |
ModelConfigWidget |
模型配置面板。 |
ToolCallTraceView |
工具调用 Trace 表格。 |
ApprovalDialog |
工具审批弹窗。 |
AgentChatPanel 方法和信号
| 接口 | 说明 | 参数 | 返回值 |
|---|---|---|---|
appendUserMessage(const QString& text) |
添加用户消息。 | text: 消息内容。 |
无 |
appendSystemMessage(const QString& text) |
添加系统消息。 | text: 消息内容。 |
无 |
beginAssistantMessage() |
开始助手消息块。 | 无 | 无 |
appendDelta(const QString& text) |
追加流式片段。 | text: 文本片段。 |
无 |
finishAssistantMessage() |
结束助手消息块。 | 无 | 无 |
setRunning(bool running) |
设置运行状态,控制按钮状态。 | running: 是否运行中。 |
无 |
sendRequested(const QString& text) |
用户点击发送。 | text: 输入内容。 |
signal |
stopRequested() |
用户点击停止。 | 无 | signal |
clearRequested() |
用户点击清空。 | 无 | signal |
ModelConfigWidget 方法
| 方法 | 说明 | 参数 | 返回值 |
|---|---|---|---|
config() const |
获取模型配置。 | 无 | ModelConfig |
setConfig(const ModelConfig& config) |
设置模型配置。 | config: 模型配置。 |
无 |
provider() const |
获取当前 provider,返回 mock、openai 或 deepseek。 |
无 | QString |
useOpenAI() const |
判断当前是否使用 OpenAI-compatible provider。 | 无 | bool |
useDeepSeek() const |
判断当前是否使用 DeepSeek provider。 | 无 | bool |
configChanged() |
配置变化通知。 | 无 | signal |
ToolCallTraceView 方法
| 方法 | 说明 | 参数 | 返回值 |
|---|---|---|---|
addTrace(const ToolCallTrace& trace) |
添加一条工具调用记录。 | trace: Trace 对象。 |
无 |
clearTraces() |
清空记录。 | 无 | 无 |
ApprovalDialog 方法
| 方法 | 说明 | 参数 | 返回值 |
|---|---|---|---|
ApprovalDialog(const ApprovalRequest& request, QWidget* parent) |
构造审批弹窗。 | request: 审批对象。parent: 父控件。 |
对象实例 |
ask(const ApprovalRequest& request, QWidget* parent) |
显示审批弹窗并返回结果。 | request: 审批对象。parent: 父控件。 |
bool |
示例:嵌入聊天面板和 Trace 表格
auto* chat = new AgentChatPanel(this);
auto* traceView = new ToolCallTraceView(this);
auto* executor = new AgentExecutor(this);
executor->setModel(model);
executor->setToolRegistry(registry);
connect(chat, &AgentChatPanel::sendRequested, this, [chat, executor](const QString& text) {
chat->appendUserMessage(text);
chat->beginAssistantMessage();
chat->setRunning(true);
executor->run(text);
});
connect(chat, &AgentChatPanel::stopRequested, executor, &AgentExecutor::cancel);
connect(executor, &AgentExecutor::assistantDelta, chat, &AgentChatPanel::appendDelta);
connect(executor, &AgentExecutor::assistantFinished, this, [chat](const QString&) {
chat->finishAssistantMessage();
chat->setRunning(false);
});
connect(executor, &AgentExecutor::traceAdded, traceView, &ToolCallTraceView::addTrace); 授权说明
授权说明
Qt-UI AgentKit 提供试用版、基础版和完整版。
试用版
用于评估、学习和原型验证,不提供源码,不支持商用。下载内容后续补充,当前页面会保留试用入口。
基础版
包含 AgentKit 单产品完整源码,支持单项目商用,包含 1 年版本免费升级权益,提供邮件 + 工单支持。
完整版
统一价格为 ¥12,800,包含 StyleKit、WidgetKit、ChartKit、AgentKit 全系列 4 款产品完整源码,不限商用项目数量,包含 1 年版本免费升级权益,提供邮件 + 工单 + 优先支持。
下载说明
商业源码包下载内容后续补充。购买记录、下载入口和更新权益将在会员中心与订单查询页面中展示。