feat(aihr): prepare grounded agent shadow validation

This commit is contained in:
key
2026-08-04 21:24:25 +08:00
parent b653164a46
commit 901f1aeb3c
64 changed files with 3574 additions and 199 deletions
+26 -1
View File
@@ -1,6 +1,6 @@
# 帮道受约束业务 Agent TechSpec
状态:`IMPLEMENTED_AND_LOCALLY_VERIFIED_SHADOW`。未接入现役 `/api/aihr/agent/**` 请求入口,未部署生产。
状态:`IMPLEMENTED_AND_LOCALLY_VERIFIED_SHADOW`。已在现役 `/api/aihr/agent/**` 文本请求完成旧响应后异步旁路执行;默认 `OFF`,不改变旧响应,未部署生产。
## 目标
@@ -82,3 +82,28 @@ Java 契约以 `AihrAgentGroundingDto` 为准。HTTP DTO 在兼容期保持 addi
## 验收
首批 30 条纯内存契约黄金集覆盖金额口径、`哪些` 路由、CRM 能力幻觉、零证据、待办与流程、多轮第二项、月份纠正、跨项目、过期 factRef、来源冲突、工具失败/超时、模型失败回退、重复调用停止和对抗性槽位误标。该集合验证内部契约,不代表本地 MySQL/Qdrant/真实模型效果;没有 100-300 条人工黄金集前不宣称正式召回率达标。
## HTTP Shadow 边界
- `aihr.agent.grounded-mode` 只允许 `OFF/SHADOW`,仓库与生产默认 `OFF`。`SHADOW` 复用现役认证主体、应用和项目输入,但在异步线程中重新解析并校验项目、空间与应用授权。
- 旧 `AihrAgentOrchestrator` 先完整生成用户可见 `AgentResponse`;旁路的计划、工具、DecisionResult 或失败均不得改写 `answer/status/citations/data/contextVersion`。媒体和附件请求明确跳过。
- 专用有界队列满时立即 `REJECTED`,watchdog 超时后取消任务;原子终态保证超时与迟到完成只记录一次。旁路失败不得阻断主请求。
- `aihr_agent_shadow_run` 只保存 run ID、query SHA-256、授权范围哈希、结构化 intent/tool/status/reason、数量和耗时,不保存原始问题、答案、手机号、token、附件名、Citation/Fact 正文或工具响应正文。
- 默认 `grounded-shadow-timeout-ms=4000` 是保守的旁路保护预算,不是模型服务 SLA。2026-08-04 的本地真实模型诊断仅通过进程环境临时放宽到 45000ms;样本显示规划耗时可超过 4 秒,因此在完成人工黄金集、延迟分位数和容量评估前不得开启生产 SHADOW,更不得切换客户端答案。
## 2026-08-04 本地实依赖验证
本次只在本地以 `SHADOW + 45000ms` 诊断运行,仓库默认值仍为 `OFF + 4000ms`,用户可见响应继续由旧 Orchestrator 生成。最近一组真实请求的 Semantic Planner 耗时约 `1.4-4.1s`、单次 shadow 总耗时约 `3.1-7.3s`;早期模型冷启动曾出现 `18.4s` 离群值。Qdrant 直接探测约 `0.2s`,当前主要延迟来自受约束模型规划、证据分类和旧知识查询审计,不应仅靠放宽 watchdog 掩盖。默认 4 秒预算仍不足以作为生产 SHADOW SLA,需先取得真实分位数和容量数据。
治理索引已完成本地幂等重建并通过当前事实核对:MySQL 有效 `production`、`PUBLISHED`、`HUMAN_VERIFIED` fragment 为 `224`,`aihr_knowledge_governed_v1` 为 `green`、`224` points、`1024` 维 Cosine,模型为 `BAAI/bge-m3`;224 个 points 与 MySQL fragment 一一对应,payload 必填治理字段缺失为 0,全部属于 `production/PUBLISHED/HUMAN_VERIFIED`。这只证明索引和治理过滤可用,不证明检索召回率达标。
| 脱敏场景组 | SHADOW 观察 | 当前结论 |
|---|---|---|
| `500元的一笔采购如何报销`、`500元以下的零星采购怎么报销`、`五百块的小额自采怎么走账` | 均调用 `KNOWLEDGE_SEARCH`;分别保留报销/采购领域、金额原文和口径缺口,`NO_EVIDENCE`,未调用 Composer | 正式来源缺失时安全失败关闭;未把月累计额度推成单笔资格,也未引用访谈/案例 |
| `当前账号能查询哪些内容` | `CAPABILITY_QUERY → ANSWERED`,1 个 `VERIFIED_FACT` | 只返回当前注册且授权的工具集合,不使用文档推断能力 |
| CRM 提及、催费话术 | CRM 场景走 `CAPABILITY_QUERY` 且 `requestedSupported=false`;催费话术走 `KNOWLEDGE_SEARCH`,当前资料不足时 `NO_EVIDENCE` | 文档提及 CRM 不会升级为系统已接入;粗粒度话术不会绕过规划或生成无依据流程 |
| 本月待办加流程、`第二项需要什么材料` | 首问与追问均执行 `MY_CURRENT_TASKS + KNOWLEDGE_SEARCH`;事实与文档分型,材料槽位缺失时 `PARTIAL`,不补齐步骤 | 多工具和 `REQUIRED_MATERIALS` 已在真实 HTTP shadow 证明;旧响应仍保持兼容,不被旁路改写 |
| 月份纠正、过期/跨作用域引用 | 既有 stateful 回归覆盖纠正后旧 ref 失效、TTL 重查和授权拒绝;本阶段继续保持服务端重鉴权 | 会话状态仅保存受控引用元数据,不能由客户端回传正文冒充事实 |
| 零正式证据、来源冲突 | 零合格证据记录 `ANSWER_GENERATION_SKIPPED`;来源冲突进入 `CONFLICT/NEEDS_INPUT` 或 fail-closed | 门禁生效;仍需更多真实冲突资料验证 |
当前真实 HTTP 仍由旧 Orchestrator 返回用户可见状态,部分旧请求会显示 `CLARIFY/NEEDS_INPUT`;这不代表 shadow 未执行。审计行只记录 query hash、run ID、结构化差异、计数和阶段耗时,未发现原问题、答案、手机号、token、附件或工具正文。以上结果证明旁路隔离、工具分型、治理索引、失败关闭和隐私边界,不证明召回率达标,也不支持客户端接管;进入受控客户端灰度前仍需 100-300 条人工标注黄金集、真实延迟分位数、容量评估及来源冲突样本。
+1 -1
View File
@@ -2,7 +2,7 @@
本文维护当前前后端业务接口和安全边界;旧演示流继续保留降级链,但不能作为生产或试点通过证据。
> 2026-08-04 本地新增的 Grounded Agent 仍是影子运行时,尚未接入本页 `/api/aihr/agent/**` 现役入口,也没有改变客户端响应契约。其内部 DTO、双工具、证据门禁和结构化会话状态见 [AIHR_GROUNDED_AGENT_TECHSPEC.md](AIHR_GROUNDED_AGENT_TECHSPEC.md);生产行为仍以本页现役接口说明为准。
> 2026-08-04 本地 Grounded Agent 已在 `/api/aihr/agent/**` 文本请求的旧响应完成后增加异步 SHADOW 旁路,但仓库与生产默认 `OFF`,旁路结果不进入客户端响应,媒体/附件请求跳过。其内部 DTO、双工具、证据门禁、结构化会话状态和隐私审计见 [AIHR_GROUNDED_AGENT_TECHSPEC.md](AIHR_GROUNDED_AGENT_TECHSPEC.md);尚未部署生产,生产行为仍以本页现役接口说明为准。
## 第一阶段范围
+1 -1
View File
@@ -11,7 +11,7 @@
3. 专项 TechSpec 细化单个领域;实施计划可记录本地实现与验证,但部署和生产状态仍以审查文档、接口事实和真实环境证据为准。
4. `prototypes/` 只作视觉回归基准;会议纪要、历史 Prompt、`legacy/` 与 `archive/` 只作需求来源和追溯材料。
“问”模块的产品边界见[《数字师傅工作 Agent 总体设计》](superpowers/specs/2026-07-24-digital-master-agent-design.md),现役旧链路的实施与验证进度见[《实施计划》](superpowers/plans/2026-07-24-digital-master-agent.md);2026-08-04 本地新增、尚未切流的 Grounded Agent 架构以[专项 TechSpec](AIHR_GROUNDED_AGENT_TECHSPEC.md)和[ADR-002](adr/ADR-002-GROUNDED-AGENT-EXECUTION.md)为准。工作助手相关术语、实施状态与文档关系集中在[《工作助手与今日工作成果迭代计划》](工作助手与今日工作成果迭代计划-20260721.md)。阶段一“练”的唯一后续施工范围见[《AI陪练完整交付计划》](AI陪练完整交付计划-20260724.md),公司消息现状见[九项能力设计](superpowers/specs/2026-07-24-company-message-nine-capabilities-design.md)与[大喇叭纠偏增量方案](银城大喇叭与问模块纠偏增量方案-20260722.md)。不得把本地影子实现、已部署但尚未完成 Agent 专项生产回归的包存在性,或已验证的全员文件消息和直通车闭环,外推为 Agent 正式验收、消息修订、强触达、工单流转、完整个人知识空间或完整试点已经完成。
“问”模块的产品边界见[《数字师傅工作 Agent 总体设计》](superpowers/specs/2026-07-24-digital-master-agent-design.md),现役旧链路的实施与验证进度见[《实施计划》](superpowers/plans/2026-07-24-digital-master-agent.md);2026-08-04 本地 Grounded Agent 已以默认关闭的异步 SHADOW 旁路挂到现役文本入口,但尚未切换用户可见响应,其架构与运行边界以[专项 TechSpec](AIHR_GROUNDED_AGENT_TECHSPEC.md)和[ADR-002](adr/ADR-002-GROUNDED-AGENT-EXECUTION.md)为准。工作助手相关术语、实施状态与文档关系集中在[《工作助手与今日工作成果迭代计划》](工作助手与今日工作成果迭代计划-20260721.md)。阶段一“练”的唯一后续施工范围见[《AI陪练完整交付计划》](AI陪练完整交付计划-20260724.md),公司消息现状见[九项能力设计](superpowers/specs/2026-07-24-company-message-nine-capabilities-design.md)与[大喇叭纠偏增量方案](银城大喇叭与问模块纠偏增量方案-20260722.md)。不得把本地影子实现、已部署但尚未完成 Agent 专项生产回归的包存在性,或已验证的全员文件消息和直通车闭环,外推为 Agent 正式验收、消息修订、强触达、工单流转、完整个人知识空间或完整试点已经完成。
## 当前项目文档
@@ -24,6 +24,14 @@
- 保留现有统一 Agent API、认证解析、知识授权、RAG 治理和审计。
- 金额候选/送模/复核成为确定性校验器的第一条纵向切片。
- 旧路径在影子验证期间继续承担兼容回退。
- 新运行时先以默认 `OFF` 的异步 SHADOW 旁路挂在现役文本入口之后;旧响应先完成,旁路不得改变客户端契约,媒体/附件不进入影子执行。
- SHADOW 使用有界队列、独立 watchdog 和单次原子终态;审计只保存 query hash、授权范围哈希、结构化代码、计数与耗时,不保存问题、答案、附件或工具正文。
- 工具必须声明 schema、授权、时效、幂等、审计和允许意图。
- `PARTIAL` 只能输出已覆盖 claim slots;零合格证据不调用答案模型。
- 客户端最终按 `DecisionStatus` 展示完整、部分、需补充、无依据和冲突状态。
## 本地验证更新(2026-08-04)
- 治理 Qdrant `aihr_knowledge_governed_v1` 已在本地以 MySQL 有效 production fragments 幂等重建:224/224 points 一致,1024 维 Cosine,`BAAI/bge-m3`,payload 治理字段完整。
- 真实 HTTP 仍只启用进程级 `SHADOW` 诊断,旧响应保持用户可见;金额变体、能力查询、CRM 能力边界、待办+流程和第二项材料已通过双工具/能力工具观测。正式来源缺失时为 `NO_EVIDENCE` 或 `PARTIAL`,不调用答案生成模型。
- 最近样本 Planner 约 1.4-4.1 秒、shadow 总耗时约 3.1-7.3 秒,默认 4 秒仅是旁路保护预算,不是生产 SLA。尚未具备客户端灰度接管条件,也没有在缺少 100-300 条人工黄金集时宣称召回率达标。
@@ -12,7 +12,7 @@
> v1.8 发布前本地实施快照:项目名称选择、项目化会话、确认记录来源/状态、员工今日成果、主管项目成果和“成果投稿”界面名称已完成本地实现与 390×844 验证;该快照记录的是发布前状态,外部线索、工单和考勤投递仍保持 PENDING。
> v1.9 发布与本轮回填: v1.8 所列多项目、项目化确认采集、来源/状态、员工今日成果、主管项目成果和“成果投稿”界面名称已于 2026-07-21 部署。成果历史日期选择、服务端拒绝未来日期及主管手机号授权兜底已于 2026-07-22 发布,并完成远端服务、schema 与产物匹配复核;外部线索、工单和考勤投递仍保持 PENDING。
> v2.0 实施快照:“问”改由 `/api/aihr/agent/**` 统一规划意图并执行受控工具,知识 RAG 退回底层能力;新增 `aihr_agent_run` 最小路由审计。该增量已完成自动化、H5 构建和部分 390×844 浏览器验证,并随 2026-07-25 完整包部署;移动身份失败关闭语义又包含在 2026-07-29 定向发布的生产后端中。正式账号完整业务和真机验收仍未完成。
> v2.1 本地影子增量:2026-08-04 新增 Grounded Agent 核心契约、`MY_CURRENT_TASKS + KNOWLEDGE_SEARCH` 双工具、证据/事实分型、有界执行、逐结论引用和结构化会话状态;现役 `/api/aihr/agent/**` 仍由 v2.0 路径处理,本增量未切流、未部署。详细契约见 [AIHR_GROUNDED_AGENT_TECHSPEC.md](AIHR_GROUNDED_AGENT_TECHSPEC.md)。
> v2.1 本地影子增量:2026-08-04 新增 Grounded Agent 核心契约、`MY_CURRENT_TASKS + KNOWLEDGE_SEARCH` 双工具、证据/事实分型、有界执行、逐结论引用和结构化会话状态;现役 `/api/aihr/agent/**` 仍由 v2.0 路径生成用户可见响应,新运行时只在文本响应完成后以默认关闭的异步 SHADOW 旁路执行,未切流、未部署。详细契约见 [AIHR_GROUNDED_AGENT_TECHSPEC.md](AIHR_GROUNDED_AGENT_TECHSPEC.md)。
> 配套:需求见[《物业AI人力资源系统业务需求文档BRD》](物业AI人力资源系统业务需求文档BRD.md);2026-07 MVP 执行计划已归档到[《AI人力资源系统一期MVP版作战清单》](archive/2026-07-mvp-delivery/AI人力资源系统一期MVP版作战清单.md)。
> **优先级图例**:`P0`=2026-07-05 MVP 演示必需 · `P1`=一期必需 · `P2`=二期/推迟。
> 决策基线:若依基座 / 集中式前后端分离 / 本地登录 / 公有大模型API / 一期RAG / 组织人员外部同步(MVP 用快照) / 数据范围以项目为主体。
@@ -368,7 +368,7 @@ POST /api/aihr/agent/actions/{draftId}/dismiss
- 全网工具必须先取得用户本次明确同意;写入只通过 30 分钟有效的 `draftId` 确认/忽略,并复用领域服务的 `expectedVersion + idempotencyKey + saveScope`。`aihr_agent_run` 只记录最小路由元数据。
- 旧 `/api/knowledge/query`、`query-media` 和 `/api/aihr/web-ai/**` 保留为底层/兼容接口。完整请求示例、错误码和当前发布边界见 [API_INTEGRATION.md](API_INTEGRATION.md)。
2026-08-04 的 Grounded Agent 增量不改变以上 HTTP 契约:新 `SemanticQueryPlan`、Tool Registry、Evidence Evaluator、DecisionResult 和 Grounded Composer 目前只在内部测试链路串联。只有完成真实模型/授权知识库回归、客户端状态契约和独立发布验收后,才能逐步接管 v2.0 Orchestrator;不得从源码存在推断已切流。
2026-08-04 的 Grounded Agent 增量不改变以上 HTTP 响应契约:新 `SemanticQueryPlan`、Tool Registry、Evidence Evaluator、DecisionResult 和 Grounded Composer 已在文本请求完成旧响应后通过异步 SHADOW 旁路串联,默认 `OFF`,其结果与失败均不进入客户端;媒体/附件请求跳过。只有完成真实模型/授权知识库回归、客户端状态契约和独立发布验收后,才能逐步接管 v2.0 Orchestrator;不得从旁路存在推断已切流或已部署。
---