feat(aihr): prepare grounded agent shadow validation
This commit is contained in:
@@ -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 条人工标注黄金集、真实延迟分位数、容量评估及来源冲突样本。
|
||||
|
||||
Reference in New Issue
Block a user