2026-05-15 06:58:21 +00:00
|
|
|
|
# Day 6:Hermes MVP
|
|
|
|
|
|
|
|
|
|
|
|
## 今天的大开发点
|
|
|
|
|
|
|
|
|
|
|
|
实现 Hermes 数字员工的最小闭环。Hermes 负责后台内循环:定时巡检、统计日报、风险预警、知识维护、规则草稿形成。
|
|
|
|
|
|
|
|
|
|
|
|
## 为什么第六天做这个
|
|
|
|
|
|
|
|
|
|
|
|
Hermes 依赖前几天已经建立的资产、规则、语义、Orchestrator、Trace 和权限体系。放在第六天做,可以避免它变成孤立脚本。
|
|
|
|
|
|
|
|
|
|
|
|
## 今天主要交付
|
|
|
|
|
|
|
|
|
|
|
|
- 任务资产调度入口。
|
|
|
|
|
|
- 手动触发任务 API。
|
|
|
|
|
|
- 系统 Hermes 后台执行入口。
|
|
|
|
|
|
- 每日风险巡检。
|
|
|
|
|
|
- 每日报销、报账、账款统计。
|
|
|
|
|
|
- OCR Mock 接入点。
|
|
|
|
|
|
- 知识候选条目生成。
|
|
|
|
|
|
- 规则草稿生成。
|
|
|
|
|
|
- LLM Wiki 解析目录与增量重建机制。
|
|
|
|
|
|
- Hermes 运行结果展示。
|
|
|
|
|
|
|
|
|
|
|
|
相关架构文档:
|
|
|
|
|
|
|
|
|
|
|
|
- [Agent 职责边界](<../agent plan/03_agent_responsibilities.md>)
|
|
|
|
|
|
- [OCR 票据识别架构](<../agent plan/11_ocr_invoice_architecture.md>)
|
|
|
|
|
|
- [LLM Wiki 知识库架构](<../agent plan/12_llm_wiki_knowledge_architecture.md>)
|
|
|
|
|
|
- [反馈学习闭环](<../agent plan/15_feedback_learning_loop.md>)
|
|
|
|
|
|
|
|
|
|
|
|
## 当天验收门槛
|
|
|
|
|
|
|
|
|
|
|
|
- 至少一个 Hermes 任务可以手动触发。
|
|
|
|
|
|
- 风险巡检有结构化结果。
|
|
|
|
|
|
- 每日统计有结构化结果。
|
|
|
|
|
|
- OCR Mock 调用能记录 ToolCall。
|
|
|
|
|
|
- 知识候选只能是草稿。
|
|
|
|
|
|
- 规则草稿只能是 draft,不能自动上线。
|
|
|
|
|
|
|
|
|
|
|
|
## 今天不做
|
|
|
|
|
|
|
|
|
|
|
|
- 不做完整生产调度集群。
|
|
|
|
|
|
- 不做真实 OCR 深度集成。
|
|
|
|
|
|
- 不做自动发布知识。
|
|
|
|
|
|
- 不做自动上线规则。
|
|
|
|
|
|
- 不做每天无差别全量重建 LLM Wiki。
|
|
|
|
|
|
|
|
|
|
|
|
## 本次新增约束
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Hermes 必须是系统后台 Hermes
|
|
|
|
|
|
|
|
|
|
|
|
这次 Hermes 不应继续只是代码里的占位逻辑。
|
|
|
|
|
|
|
|
|
|
|
|
最小可接受形态:
|
|
|
|
|
|
|
|
|
|
|
|
- 后端任务入口能明确区分 `selected_agent=hermes`。
|
|
|
|
|
|
- 后端可调用系统安装的 Hermes CLI 或受控 Hermes 进程。
|
|
|
|
|
|
- 即使当前阶段仍允许 Python 内部 fallback,也必须保留真实 Hermes 进程接入点。
|
|
|
|
|
|
- Hermes 的模型配置继续由系统设置同步,不允许在任务代码里再写一套模型配置。
|
|
|
|
|
|
- Hermes 执行应记录 `run_id`、ToolCall、错误信息和最终摘要。
|
|
|
|
|
|
|
|
|
|
|
|
### 2. LLM Wiki 必须有独立解析目录
|
|
|
|
|
|
|
|
|
|
|
|
原始知识文件与解析产物必须分离。
|
|
|
|
|
|
|
|
|
|
|
|
推荐目录:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
/app/server/storage/knowledge/报销制度 原始制度文件
|
|
|
|
|
|
/app/server/storage/knowledge/.llm_wiki 解析产物根目录
|
|
|
|
|
|
/app/server/storage/knowledge/.llm_wiki/documents/<document_id>/
|
|
|
|
|
|
document.json
|
|
|
|
|
|
text.md
|
|
|
|
|
|
chunks.json
|
|
|
|
|
|
clauses.json
|
|
|
|
|
|
knowledge_candidates.json
|
|
|
|
|
|
rule_candidates.json
|
|
|
|
|
|
/app/server/storage/knowledge/.llm_wiki/index.json
|
|
|
|
|
|
/app/server/storage/knowledge/.llm_wiki/sync_runs.json
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. LLM Wiki 只能增量形成
|
|
|
|
|
|
|
|
|
|
|
|
不允许每天无脑全量重建。
|
|
|
|
|
|
|
|
|
|
|
|
文档级重建触发条件至少包括:
|
|
|
|
|
|
|
|
|
|
|
|
- 文件名 `original_name` 变更。
|
|
|
|
|
|
- 文件对象 `stored_name` 变更。
|
|
|
|
|
|
- 内容摘要 `sha256` 变更。
|
|
|
|
|
|
- 上传版本 `version_number` 变更。
|
|
|
|
|
|
- 更新时间 `updated_at` 变更,视为人工改动。
|
|
|
|
|
|
|
|
|
|
|
|
如果以上条件都未变化:
|
|
|
|
|
|
|
|
|
|
|
|
- 本次文档应标记为 `unchanged_skipped`。
|
|
|
|
|
|
- 不重新抽取文本。
|
|
|
|
|
|
- 不重新生成知识候选。
|
|
|
|
|
|
- 不重新生成规则草稿。
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 规则草稿必须模板化
|
|
|
|
|
|
|
|
|
|
|
|
Hermes 不允许自由生成任意结构的规则。
|
|
|
|
|
|
|
|
|
|
|
|
必须满足:
|
|
|
|
|
|
|
|
|
|
|
|
- 规则 Markdown 使用固定模板。
|
|
|
|
|
|
- 可执行规则 JSON 使用固定模板族,不允许随意拼字段。
|
|
|
|
|
|
- 规则中心要同时展示人类可读的 Markdown 和机器可执行的 JSON。
|
|
|
|
|
|
- Hermes 生成的规则默认 `draft`。
|
|
|
|
|
|
- 审核通过前不能 `active`。
|
|
|
|
|
|
- Hermes 不能直接覆盖线上 active 规则。
|
|
|
|
|
|
|
|
|
|
|
|
## 详细执行清单
|
|
|
|
|
|
|
|
|
|
|
|
以下内容为合并后的详细执行清单。
|
|
|
|
|
|
|
2026-05-15 09:33:18 +00:00
|
|
|
|
## 本轮追加范围(2026-05-15)
|
|
|
|
|
|
|
|
|
|
|
|
本轮不扩散到新的业务能力,先把已经落地的 LLM Wiki 归纳链路收紧成可运维、可追踪、可持续运行的形态。
|
|
|
|
|
|
|
|
|
|
|
|
本轮目标:
|
|
|
|
|
|
|
|
|
|
|
|
- 把知识管理中的 Hermes 归纳从同步请求改成后台异步任务。
|
|
|
|
|
|
- 用户关闭或切走页面后,归纳任务仍继续执行,不因前端页面生命周期被误判失败。
|
|
|
|
|
|
- 归纳过程中的状态、进度、摘要、异常统一写入 `AgentRun.route_json` 与 `result_summary`。
|
|
|
|
|
|
- 知识管理页轮询真实任务状态,任务完成后立刻把文档状态从“正归纳”切到最终状态。
|
|
|
|
|
|
- 右侧侧边栏新增“日志管理”入口。
|
|
|
|
|
|
- 日志管理页拆成两类日志:
|
|
|
|
|
|
- Hermes 调用日志:查看归纳任务运行状态、当前阶段、文档进度、ToolCall、错误信息。
|
|
|
|
|
|
- 系统运行日志:直接查看 `server/logs` 下的系统日志文本。
|
|
|
|
|
|
|
|
|
|
|
|
本轮边界:
|
|
|
|
|
|
|
|
|
|
|
|
- 仍然使用系统 Hermes CLI 入口,不虚构不存在的 gateway 推理接口。
|
|
|
|
|
|
- 不引入完整消息队列或 Celery 集群,先用后端受控后台任务管理器落地。
|
|
|
|
|
|
- 不把日志页做成审计替代品,重点只覆盖 Hermes 运行日志和系统运行日志。
|
|
|
|
|
|
- 不把普通用户开放为日志管理员,日志查看仍属于管理员能力。
|
|
|
|
|
|
|
2026-05-15 06:58:21 +00:00
|
|
|
|
## 0. 开始前检查
|
|
|
|
|
|
|
|
|
|
|
|
- [x] ~~确认任务资产 `asset_type=task` 可查询。~~
|
|
|
|
|
|
- [x] ~~确认 Orchestrator 能处理 `source=schedule`。~~
|
|
|
|
|
|
- [x] ~~确认系统 Hermes CLI 或等价后台 Hermes 进程可被调用。~~
|
|
|
|
|
|
- [x] ~~确认 AgentRun 和 ToolCall 可记录。~~
|
2026-05-15 09:33:18 +00:00
|
|
|
|
- [x] ~~确认是否已有后台任务框架。~~
|
2026-05-15 06:58:21 +00:00
|
|
|
|
- [ ] 如果没有后台任务框架,先用手动触发 API 模拟定时执行。
|
|
|
|
|
|
|
|
|
|
|
|
## 1. Hermes 输入输出
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] 定义 `HermesTaskRequest`。
|
|
|
|
|
|
- [ ] 请求包含 `run_id`。
|
|
|
|
|
|
- [ ] 请求包含 `task_asset_id`。
|
|
|
|
|
|
- [ ] 请求包含 `task_type`。
|
|
|
|
|
|
- [ ] 请求包含 `schedule_time`。
|
|
|
|
|
|
- [ ] 请求包含 `context_json`。
|
|
|
|
|
|
- [ ] 定义 `HermesTaskResult`。
|
|
|
|
|
|
- [ ] 响应包含 `summary`。
|
|
|
|
|
|
- [ ] 响应包含 `risk_items`。
|
|
|
|
|
|
- [ ] 响应包含 `statistics`。
|
|
|
|
|
|
- [ ] 响应包含 `knowledge_updates`。
|
|
|
|
|
|
- [ ] 响应包含 `draft_rules`。
|
|
|
|
|
|
- [ ] 响应包含 `next_actions`。
|
|
|
|
|
|
|
|
|
|
|
|
验收证据:
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] Hermes 响应能被任务详情或运行日志展示。
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 任务调度入口
|
|
|
|
|
|
|
|
|
|
|
|
- [x] ~~新增手动触发任务 API。~~
|
|
|
|
|
|
- [x] ~~API 参数支持任务资产 ID。~~
|
|
|
|
|
|
- [x] ~~API 调用 Orchestrator,source 为 `schedule`。~~
|
|
|
|
|
|
- [x] ~~Orchestrator 路由到 Hermes。~~
|
|
|
|
|
|
- [x] ~~Hermes 执行结果写入 AgentRun。~~
|
|
|
|
|
|
- [ ] 任务执行失败时写入错误。
|
|
|
|
|
|
- [ ] 任务执行结束后更新任务最近执行时间。
|
|
|
|
|
|
- [ ] 任务执行结束后更新任务最近执行状态。
|
|
|
|
|
|
- [x] ~~保留真实 Hermes 进程执行入口,不把 Hermes 固定写死为本地占位函数。~~
|
|
|
|
|
|
|
|
|
|
|
|
验收证据:
|
|
|
|
|
|
|
|
|
|
|
|
- [x] ~~可以手动触发一次 Hermes 任务并看到运行结果。~~
|
|
|
|
|
|
|
|
|
|
|
|
## 3. 每日风险巡检
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] 实现重复报销巡检。
|
|
|
|
|
|
- [ ] 实现金额超标巡检。
|
|
|
|
|
|
- [ ] 实现发票异常巡检占位。
|
|
|
|
|
|
- [ ] 实现应收逾期巡检。
|
|
|
|
|
|
- [ ] 实现应付异常付款巡检。
|
|
|
|
|
|
- [ ] 每个风险项包含风险类型。
|
|
|
|
|
|
- [ ] 每个风险项包含业务对象。
|
|
|
|
|
|
- [ ] 每个风险项包含触发规则。
|
|
|
|
|
|
- [ ] 每个风险项包含建议动作。
|
|
|
|
|
|
- [ ] 每个风险项包含风险等级。
|
|
|
|
|
|
|
|
|
|
|
|
验收证据:
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] 风险巡检结果可以被用户理解和追溯。
|
|
|
|
|
|
|
|
|
|
|
|
## 4. 每日统计
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] 统计当日报销单数量。
|
|
|
|
|
|
- [ ] 统计当日报销金额。
|
|
|
|
|
|
- [ ] 统计当日报账数量。
|
|
|
|
|
|
- [ ] 统计当日报账金额。
|
|
|
|
|
|
- [ ] 统计应收新增金额。
|
|
|
|
|
|
- [ ] 统计应收逾期金额。
|
|
|
|
|
|
- [ ] 统计应付待付金额。
|
|
|
|
|
|
- [ ] 统计应付逾期金额。
|
|
|
|
|
|
- [ ] 输出日报摘要。
|
|
|
|
|
|
|
|
|
|
|
|
验收证据:
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] Hermes 能生成一份每日财务摘要。
|
|
|
|
|
|
|
|
|
|
|
|
## 5. OCR 接入点
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] 原始票据先落 `document_assets` 和 `document_asset_versions`,不直接以内存临时文件参与流程。
|
|
|
|
|
|
- [ ] 建立 OCR 识别服务接口。
|
|
|
|
|
|
- [ ] 定义发票识别输入结构。
|
|
|
|
|
|
- [ ] 定义发票识别输出结构。
|
|
|
|
|
|
- [ ] 输出结构包含发票号。
|
|
|
|
|
|
- [ ] 输出结构包含开票日期。
|
|
|
|
|
|
- [ ] 输出结构包含金额。
|
|
|
|
|
|
- [ ] 输出结构包含税额。
|
|
|
|
|
|
- [ ] 输出结构包含销售方。
|
|
|
|
|
|
- [ ] 输出结构包含购买方。
|
|
|
|
|
|
- [ ] 输出结构包含置信度。
|
|
|
|
|
|
- [ ] OCR 输入可通过 `storage_key` 或等价文件定位字段读取原件。
|
|
|
|
|
|
- [ ] 当前阶段允许使用 Mock 结果。
|
|
|
|
|
|
- [ ] OCR 调用写入 ToolCall。
|
|
|
|
|
|
|
|
|
|
|
|
验收证据:
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] Hermes 风险巡检中可以调用 OCR Mock。
|
|
|
|
|
|
|
|
|
|
|
|
## 6. 知识库维护
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] 建立知识条目写入服务。
|
|
|
|
|
|
- [x] ~~建立 `.llm_wiki` 独立解析目录。~~
|
|
|
|
|
|
- [x] ~~原始文档与解析产物物理隔离。~~
|
|
|
|
|
|
- [x] ~~文本抽取结果落 `text.md`。~~
|
|
|
|
|
|
- [x] ~~分块结果落 `chunks.json`。~~
|
|
|
|
|
|
- [x] ~~文档索引落 `index.json`。~~
|
|
|
|
|
|
- [x] ~~同步记录落 `sync_runs.json`。~~
|
|
|
|
|
|
- [x] ~~文档签名包含 `original_name`、`stored_name`、`sha256`、`version_number`、`updated_at`。~~
|
|
|
|
|
|
- [x] ~~未变化文档跳过重建并记录 `unchanged_skipped`。~~
|
|
|
|
|
|
- [x] ~~Hermes 可以生成知识候选条目。~~
|
|
|
|
|
|
- [x] ~~候选条目包含标题。~~
|
|
|
|
|
|
- [x] ~~候选条目包含正文。~~
|
|
|
|
|
|
- [x] ~~候选条目包含来源。~~
|
|
|
|
|
|
- [x] ~~候选条目包含适用场景。~~
|
|
|
|
|
|
- [x] ~~候选条目默认状态为 `draft`。~~
|
|
|
|
|
|
- [x] ~~知识条目不能自动发布。~~
|
|
|
|
|
|
- [ ] 知识条目写入审计日志。
|
|
|
|
|
|
|
|
|
|
|
|
验收证据:
|
|
|
|
|
|
|
|
|
|
|
|
- [x] ~~Hermes 可以生成待审核知识条目。~~
|
|
|
|
|
|
|
|
|
|
|
|
## 7. 规则草稿形成
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] Hermes 可以根据风险巡检结果生成规则草稿。
|
|
|
|
|
|
- [x] ~~规则草稿使用固定 Markdown 模板。~~
|
|
|
|
|
|
- [x] ~~规则草稿生成可执行 JSON 草稿。~~
|
|
|
|
|
|
- [x] ~~规则中心展示 Markdown + JSON 双视图。~~
|
|
|
|
|
|
- [x] ~~JSON 草稿字段受模板约束,不允许自由扩展。~~
|
|
|
|
|
|
- [x] ~~规则草稿保存为 `asset_type=rule`。~~
|
|
|
|
|
|
- [x] ~~规则草稿状态为 `draft`。~~
|
|
|
|
|
|
- [x] ~~规则草稿包含 Markdown 内容。~~
|
|
|
|
|
|
- [x] ~~规则草稿包含 JSON 内容或等价 `runtime_rule` 配置。~~
|
|
|
|
|
|
- [ ] 规则草稿包含生成原因。
|
|
|
|
|
|
- [ ] 规则草稿包含关联风险样例。
|
|
|
|
|
|
- [x] ~~规则草稿不能自动上线。~~
|
|
|
|
|
|
- [x] ~~规则草稿需要审核人。~~
|
|
|
|
|
|
- [x] ~~规则草稿写入审计日志。~~
|
|
|
|
|
|
- [x] ~~Hermes 不直接覆盖线上 active 规则。~~
|
|
|
|
|
|
|
|
|
|
|
|
验收证据:
|
|
|
|
|
|
|
|
|
|
|
|
- [x] ~~Hermes 生成的新规则出现在规则列表中,但不是 active。~~
|
|
|
|
|
|
|
|
|
|
|
|
## 8. Hermes 页面或日志展示
|
|
|
|
|
|
|
|
|
|
|
|
- [x] ~~任务详情能看到最近执行结果。~~
|
|
|
|
|
|
- [ ] 任务详情能手动触发执行。
|
|
|
|
|
|
- [ ] 任务详情能看到风险项数量。
|
|
|
|
|
|
- [ ] 任务详情能看到日报摘要。
|
|
|
|
|
|
- [ ] 任务详情能看到知识候选数量。
|
|
|
|
|
|
- [ ] 任务详情能看到规则草稿数量。
|
|
|
|
|
|
- [ ] 运行 Trace 能看到 Hermes 步骤。
|
|
|
|
|
|
- [x] ~~错误时展示错误原因。~~
|
2026-05-15 09:33:18 +00:00
|
|
|
|
- [ ] 日志管理页能查看 Hermes 归纳任务的实时状态。
|
|
|
|
|
|
- [ ] 日志管理页能查看 Hermes ToolCall 请求与结果。
|
|
|
|
|
|
- [ ] 日志管理页能查看系统运行日志文本。
|
|
|
|
|
|
- [ ] 知识管理页能在后台任务完成后自动刷新归纳状态。
|
2026-05-15 06:58:21 +00:00
|
|
|
|
|
|
|
|
|
|
验收证据:
|
|
|
|
|
|
|
|
|
|
|
|
- [x] ~~不查数据库也能判断 Hermes 是否执行成功。~~
|
|
|
|
|
|
|
|
|
|
|
|
## 9. 测试
|
|
|
|
|
|
|
|
|
|
|
|
- [x] ~~测试手动触发任务。~~
|
|
|
|
|
|
- [x] ~~测试 Orchestrator 路由到 Hermes。~~
|
|
|
|
|
|
- [ ] 测试风险巡检输出。
|
|
|
|
|
|
- [ ] 测试日报统计输出。
|
|
|
|
|
|
- [ ] 测试 OCR Mock 调用。
|
|
|
|
|
|
- [x] ~~测试知识候选写入。~~
|
|
|
|
|
|
- [x] ~~测试规则草稿生成。~~
|
|
|
|
|
|
- [ ] 测试 Hermes 异常写入 AgentRun。
|
2026-05-15 09:33:18 +00:00
|
|
|
|
- [ ] 测试知识归纳异步任务在接口返回后仍能继续执行。
|
|
|
|
|
|
- [ ] 测试归纳进度能持续写入 AgentRun。
|
|
|
|
|
|
- [ ] 测试系统日志读取接口。
|
2026-05-15 06:58:21 +00:00
|
|
|
|
|
|
|
|
|
|
验收证据:
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] Hermes 核心测试通过。
|
|
|
|
|
|
|
|
|
|
|
|
## 10. Day 6 验收
|
|
|
|
|
|
|
|
|
|
|
|
- [x] ~~Hermes 可被 Orchestrator 调用。~~
|
|
|
|
|
|
- [x] ~~至少一个任务可以手动触发。~~
|
|
|
|
|
|
- [ ] 风险巡检有结构化结果。
|
|
|
|
|
|
- [ ] 每日统计有结构化结果。
|
|
|
|
|
|
- [ ] OCR Mock 接入点可用。
|
|
|
|
|
|
- [x] ~~知识候选可生成。~~
|
|
|
|
|
|
- [x] ~~规则草稿可生成且不能自动上线。~~
|
|
|
|
|
|
- [x] ~~任务详情或运行日志能展示结果。~~
|
|
|
|
|
|
- [x] ~~所有完成项已用 `[x] ~~...~~` 标记。~~
|
|
|
|
|
|
|
|
|
|
|
|
## 阻塞记录
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] 暂无。
|
|
|
|
|
|
|
|
|
|
|
|
## 日终交接
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] 写明 Hermes 已支持任务类型。
|
|
|
|
|
|
- [ ] 写明 OCR 当前是真实还是 Mock。
|
|
|
|
|
|
- [ ] 写明生成的知识和规则草稿状态。
|
|
|
|
|
|
- [ ] 写明 Day 7 需要重点回归的路径。
|