M10 · 单步断言与漂移检测#
简历 Bullet Point: 三类单步断言(Schema / Sequencing / Semantic)逐步校验工具调用正确性,Silent Drift 漂移检测识别目标遗忘/探索发散/偏好丢失/成本失控四类信号,两段式检测(确定性预检 + LLM 推断)分级纠正
开场钩子#
Agent 每一步单独看都合理,但连起来看偏了——用户说”旅行包预算 300”,Agent 搜完旅行包后突然去查”旅行充电宝”,再查”旅行枕头”。每一步的工具调用参数都合法(品类相关),但整体偏离了用户原始意图。
这种 Silent Drift 不会触发任何单步错误检测——工具返回值格式正确、参数合法、没有循环。需要一个跨步骤的漂移检测器。
一、模块运作流程#
1.1 三类单步断言#
| 类型 | Hook 点 | 检查什么 | 示例 |
|---|---|---|---|
| Schema | post_tool_call | 工具返回值结构 | item_search 返回必须有 candidates 列表 |
| Sequencing | pre_tool_call | 调用时序合法性 | 没调 planner 就调 item_search |
| Semantic | post_tool_call | 语义合理性(轻量 LLM,默认关) | 候选商品与 query 相关度 |
1.2 Silent Drift 四类信号#
| 信号 | 含义 | 检测方式 |
|---|---|---|
| 目标遗忘 | Agent 偏离原始意图 | query 关键词在最近工具调用中消失 |
| 探索发散 | 不断换方向不收敛 | 连续 N 步品类/平台完全不同 |
| 偏好丢失 | 忘记用户约束 | 硬约束关键词未出现在工具参数 |
| 成本失控 | token 消耗异常快 | 当前速率 vs 历史基线 |
1.3 两段式检测#
确定性预检(关键词匹配、计数统计)→ 预检不决才调 lite LLM(成本可控)。
1.4 分级纠正#
- 轻微:注入提醒消息(“请回到原始需求”)
- 严重:强纠正 + 预算检查
- 连续严重:强制收尾(授权阶段机到 CONCLUDING)
二、踩坑与设计决策#
为什么 Semantic 断言默认关?#
每次调 LLM 做语义检查成本高(一次断言 ~100 token)。10 轮对话每轮 2-3 次工具调用 = 20-30 次额外 LLM 调用。确定性预检能覆盖 80% 的漂移场景,只在预检不决时才需要 LLM。
四类检测和 LoopDetector / Rubric 的关系#
LoopDetector 检测行为模式(同工具刷屏),漂移检测检测语义偏离(方向跑偏),Rubric 评测检测结果质量(最终输出好不好)。三者正交互补。
三、面试问答#
Q1: 漂移检测为什么不每一步都做?#
每 3 轮做一次。太频繁成本高且误判多(1-2 步的探索可能是正常的策略调整),太稀疏又检测不到。3 轮是平衡点。
Q2: 强制收尾会不会导致”还没搜完就结束”?#
会。但连续严重漂移意味着 Agent 已经跑偏——继续跑只会更偏。不如用已有候选做一个诚实的部分推荐,而不是一直跑下去烧完 token 拿到一个完全不相关的结果。
四、诚实边界#
| 维度 | 做了 | 没做 |
|---|---|---|
| Schema 断言 | 结构校验 | 完整字段语义校验 |
| Semantic 断言 | 预留(默认关) | 大规模开启(成本) |
| 漂移检测 | 4 类信号 + 分级纠正 | 基于 embedding 的轨迹相似度 |