日期:2026-06-05
当前版本已经不是纯聊天窗口,而是一个“桌面端 + MCP + DeepSeek + 只读数据库工具”的 Agent 原型。它的优点是边界清楚、安全意识强、MCP 已经接管了 DeepSeek 和数据库配置;但它仍然更像“AI 帮忙挑固定任务”,还不是成熟的业务智能体。
更成熟的 Agent 应该是:模型根据用户目标自主规划,按需调用工具,拿到结果后继续判断是否还需要查数据库、查外部页面、生成表格或进入人工确认,直到给出可执行、可审计、可下载的结果。工具和安全边界由系统控制,决策和编排尽量交给模型。
一句话方向:从“前端/代码规则驱动的任务助手”升级为“模型驱动、工具受控、可追踪的业务 Agent”。
当前项目分成两部分:
smqjh-admin-agent:Electron 桌面端,负责窗口、对话 UI、后台登录会话、IPC、表格渲染、导出和本地任务执行。smqjh-mcp-server:Java MCP 服务,负责本机配置读取、DeepSeek 调用、只读数据库查询、业务工具注册和工具结果返回。当前链路大致如下:
flowchart LR
User["管理员自然语言输入"] --> UI["Electron 对话界面"]
UI --> Orchestrator["AssistantOrchestrator"]
Orchestrator --> Plan["MCP DeepSeek 工具规划"]
Plan --> Tools["MCP 工具或本地任务"]
Tools --> DB["MySQL 只读查询"]
Tools --> Cloud["smqjh 网关接口"]
Tools --> Market["慢慢买/苏宁公开价格线索"]
Tools --> Summary["MCP DeepSeek 总结"]
Summary --> UIResult["回答 + 表格 + 导出"]
已经具备的能力:
| 能力 | 当前状态 |
|---|---|
| 桌面端 EXE 原型 | 已有 Electron 框架和界面 |
| 后台登录会话 | 已支持,并持久化 token |
| DeepSeek | 已迁移到 MCP 侧托管 |
| 数据库查询 | 已支持只读 SELECT、白名单表、默认 LIMIT、超时和只读事务 |
| 商品查询 | 已有 smqjh.product.lookup.summary |
| 订单统计 | 已有 smqjh.order.count.query |
| 通用 SQL 查询 | 已有 smqjh.database.readonly.query |
| 商品比价 | 已支持系统价 + 慢慢买/苏宁线索 |
| 月结需求 | 已有 smqjh.settlement.monthly.plan 规划工具 |
现在的主流程基本是:
这个流程缺少成熟 Agent 常见的循环能力:如果工具结果为空、SQL 字段不对、查到多个候选、需要再查明细,模型应该基于观察结果继续调用下一步工具,而不是直接结束或让用户自己查。
这解释了之前出现的体验问题:模型能识别意图,也能生成 SQL,但系统没有把 SQL 自动执行并回填结果。
一部分能力在 MCP:数据库、DeepSeek、配置、订单统计、商品查询。
另一部分还在桌面端本地任务:商品比价、部分导出、市场页面抓取。
这样会导致模型眼里的工具不完整,桌面端还承担了太多业务逻辑。更好的做法是 MCP 统一暴露业务工具,桌面端只负责展示、会话和文件下载。
现在 DeepSeek 主要靠提示词里的“常用表、常用字段、SQL 示例”来生成查询。这个方式能跑起来,但不够稳。真正要让它智能查询数据库,需要把表结构、字段说明、业务口径、逻辑删除规则、金额单位等作为 MCP resources 或专门的 schema 工具提供。
否则模型会出现:
用户要的是结果,不是过程。比如:
当前已经能渲染一些表格,但文件产物、任务状态、异常清单和后续复核动作还需要变成一等能力。
现在用户看到“思考中”“处理中”时,不知道系统到底在做什么。成熟的 Agent UI 应该能显示:
这不是花哨交互,而是让管理员信任结果。
下面不是某一家产品的唯一标准,而是目前 OpenAI、LangChain、Anthropic、MCP 等主流 Agent 体系共同体现出的落地路径。
| 阶段 | 应该做什么 | 关键产物 |
|---|---|---|
| 1. 定义业务目标 | 先明确 Agent 要替谁完成什么工作,不是先做聊天框 | 场景清单、成功标准、风险分级 |
| 2. 设计工具边界 | 把系统能力封装成工具,模型只能通过工具读写业务系统 | Tool schema、权限、输入输出规范 |
| 3. 提供上下文 | 给模型表结构、接口说明、业务口径、示例和历史上下文 | MCP resources、业务知识库、字段字典 |
| 4. 建立 Agent 循环 | 模型规划、调用工具、观察结果、继续规划、最终回答 | 多轮工具调用循环、最大步数、失败重试 |
| 5. 加安全护栏 | 对写操作、敏感数据、金额、发券、结算确认加人工审批 | 只读限制、审批流、审计日志、脱敏 |
| 6. 结构化输出 | 让模型输出表格、JSON、Excel、任务状态,而不是长文本 | 表格 schema、artifact 文件、下载入口 |
| 7. 做评测集 | 用真实管理员问题持续测试准确率 | eval 用例、回归测试、工具调用追踪 |
| 8. 上线监控 | 记录调用链、失败原因、耗时、SQL、工具结果 | tracing、日志、告警、成本统计 |
| 对比项 | 当前 smqjh-agent | 主流成熟 Agent | 建议 |
|---|---|---|---|
| 决策方式 | DeepSeek 一次性选择工具 | 模型循环规划,按观察结果继续行动 | 改成多步 agent loop |
| 工具来源 | MCP + 本地任务混合 | 工具集中注册,schema 清晰 | 统一迁移到 MCP |
| 数据库能力 | 有只读 SQL 工具,但表结构靠提示词 | schema/resource + SQL 执行 + 校验 | 增加 schema 查询工具 |
| 结果展示 | 文本和部分表格 | 文本、表格、文件、状态、依据分离 | 增加 artifact 层 |
| 人工确认 | 主要靠 dryRun 和文案 | 写操作前强制审批,差异自动标记 | 做审批/复核队列 |
| 业务知识 | 写在 prompt 和代码里 | 可维护的业务知识库和字段字典 | 建立 business-schema 文档/资源 |
| 可观测性 | 有日志,但链路不完整 | 每次工具调用、SQL、耗时、错误可追踪 | 增加 trace 面板 |
| 评测 | 暂无固定问题集 | 用真实问题做回归评测 | 建管理员问题 eval 集 |
flowchart TB
UI["Electron 桌面端<br/>只负责展示、登录、文件入口"] --> Agent["Agent Runtime<br/>多步规划和工具循环"]
Agent --> MCP["Java MCP Server<br/>统一工具和资源"]
MCP --> LLM["DeepSeek<br/>意图判断、SQL 草拟、总结"]
MCP --> Schema["业务 Schema Resource<br/>表结构、字段、业务口径"]
MCP --> DB["MySQL 只读连接池<br/>SELECT 校验、限流、审计"]
MCP --> API["smqjh-cloud API<br/>登录态、导出、业务接口"]
MCP --> Market["外部价格工具<br/>慢慢买、苏宁、后续授权平台"]
MCP --> Artifact["文件产物服务<br/>Excel、报告、异常清单"]
核心原则:
目标:解决“识别到了但不执行”“问法变化就不会查”“回答不连贯”。
建议改动:
把 AssistantOrchestrator 改为多步循环:
增加一个 MCP 工具:smqjh.database.smart.query。
增加 schema 工具或资源:
smqjh.schema.searchsmqjh.schema.getTablesmqjh.schema.businessRules明确规则:只要用户问的是业务系统事实,Agent 不应该回复“你可以去后台查”或“你可以执行 SQL”,而是自己调用工具。
目标:让“查询、比价、月结、订单、物流、商品描述”都能输出表格和文件。
建议改动:
增加通用表格输出 schema:
titlecolumnsrowssummaryevidencewarnings增加文件产物工具:
smqjh.artifact.excel.createsmqjh.artifact.opensmqjh.artifact.list月结功能拆成工具链:
smqjh.settlement.enterprise.listsmqjh.settlement.export.inputssmqjh.settlement.reconcilesmqjh.settlement.report.createsmqjh.settlement.confirmation.mark商品价格对比工具继续保留,但迁移到 MCP:
目标:支持多个客户端使用,降低对业务系统影响,并可审计。
建议改动:
MCP 从“每台客户端本机服务”逐步演进为“内网中心 MCP 服务”。
数据库只读连接池:
权限分级:
追踪和评测:
| 痛点 | 原因 | 调整方式 |
|---|---|---|
| SQL 生成了但不执行 | 编排把 SQL 当成回复内容,没有进入工具执行 | smart.query 内部生成并执行 SQL |
| 问“商品描述”白屏 | 前端或工具结果异常没有兜底 | 加 ErrorBoundary、IPC 异常兜底、结果 schema 校验 |
| 问订单物流状态不会查 | 没有专门工具时编排不敢走通用数据库查询 | 通用业务事实统一走 database.smart.query |
| 商品比价像固定规则 | 前端/本地任务承担了太多判断 | 迁移到 MCP,由 DeepSeek 决定搜索词和筛选口径 |
| 表格显示不稳定 | 文本 Markdown 和表格混在一起 | 回答文本和 tables 分离渲染 |
| 需要 Excel 但没有文件 | 文件不是一等产物 | 增加 artifact 工具,结果直接给文件入口 |
| 多客户端怕影响数据库 | 每客户端直连无法统一治理 | 中期改中心 MCP,连接池和限流 |
不建议现在为了“更智能”直接大换语言。
原因:
可以考虑的折中:
优先级 P0:
smqjh.database.smart.query。优先级 P1:
优先级 P2:
管理员输入:
当前百事可乐 500ml 的商品描述是什么?
Agent 应该自动:
管理员输入:
帮我生成铜仁移动 2026 年 5 月月结报告。
Agent 应该自动:
管理员输入:
查一下这个订单的物流状态。
Agent 应该自动:
这才是我们要做的“智能体”,而不是让管理员根据按钮或固定任务项自己拼流程。