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