当不同工具返回 Unix 时间戳、以分为单位的货币和 HTTP 状态码时,agent 会比错、算错、理解错。PostToolUse hook 在系统层面解决这个问题——确定性地、无感地,在 agent 看到任何东西之前。
三个标准化领域
时间戳
工具 A 返回 1704067200(Unix epoch)。工具 B 返回 "December 15, 2023"(字符串)。Agent 按字典序比较:1704067200 > "December 15, 2023"。结论:一篇 2024 年的论文发表在 2023 年的论文之前。错了。
PostToolUse hook 在 agent 看到之前把所有时间戳转成 ISO 8601。两者变成可比较的字符串。
货币
工具 A 返回 12750(分)。工具 B 返回 "$127.50"(带符号的字符串)。工具 C 返回 {"amount": 127.50, "currency": "USD"}(对象)。Agent 把分加到元上:12750 + 127.50 = 12877.50。荒谬的总额。
PostToolUse hook 把所有货币值标准化为 {"amount": <元>, "currency": <字符串>}。
状态码
工具 A 返回 200(HTTP)。工具 B 返回 "OK"(字符串)。工具 C 返回 true(布尔值)。Agent 可能把 HTTP 201 误解为错误,把 “OK” 和 true 区别对待,或者识别不了工具特定的约定。
PostToolUse hook 标准化为一致的状态 schema。
标准化成效
部署日期和货币的 PostToolUse hook 后:
| 错误类型 | 之前 | 之后 |
|---|---|---|
| 日期比较错误 | 12% | 0.3% |
| 货币计算错误 | 8% | 0.1% |
| 状态码误解 | 6% | 6%(尚未覆盖) |
| 整体准确率 | 78% | 91% |
状态码错误持续因为 hook 还没标准化它们。模式有效——扩展覆盖剩余格式类型就行。
敏感数据脱敏
工具结果经常包含 agent 不需要也不该看到的数据:完整 SSN、信用卡号、内部员工 ID。两个风险:(1) agent 上下文中的安全暴露,(2) agent 偶尔会把敏感数据回显给客户。
PostToolUse hook 脱敏:SSN → "***-**-1234",卡号 → "****1234"。Agent 永远看不到完整的敏感数据,不可能回显。这确定性地解决了安全和客户安全两个问题——不是靠 prompt 指令”绝不重复 SSN”(偶尔会失败)。
Token 减少:90% 节省
平均 5,000 token 的工具结果中 agent 实际使用的字段只有约 500 token。8 次调用/会话 × 5,000 = 40,000 token 的工具结果,占 API 输入成本的 60%。
PostToolUse hook 只提取相关字段:5,000 → 500 token/结果。会话总计:40,000 → 4,000 token。工具结果 token 减少 90%,整体 API 输入成本降低约 54%。
分层转换设计
一个需要标准化、脱敏和提取的 PostToolUse hook 需要仔细分层:
- 格式标准化(无损)— 同样的数据,标准格式。ISO 8601 日期、元为单位的金额、一致的状态码。没有信息丢失。
- 敏感数据脱敏(有损但安全要求)— SSN、信用卡、token。Agent 本来就不需要这些数据;移除是安全要求。
- 提取相关字段(有损,仅经验证后)— 移除 agent 明确不使用的字段,通过使用分析验证。不要激进地剥离——只移除确认不需要的。
每层都有明确的理由。激进的全面压缩有移除 agent 偶尔需要的字段的风险,导致间歇性故障。
为什么不用基于 prompt 的格式处理?
PostToolUse hook 是:
- 确定性的 — 从不遗漏转换
- 集中化的 — 一个地方维护
- 对 agent 不可见的 — 减少认知负担
基于 prompt 的格式文档是:
- 概率性的 — agent 在负载下可能忘记规则
- 分散的 — 8 个工具的说明散布在 prompt 各处
- 额外开销 — 每次工具交互都增加推理负担
数据确认:基于 hook 的标准化达到 0.3% 的错误率,基于 prompt 的处理是 12%。
先审计,再标准化
对于有 8 个 MCP 工具且偶尔误解的系统:
- 审计所有 8 个工具的输出格式,识别不一致(哪些字段、哪些格式)
- 实现针对已识别不一致的 PostToolUse hook
- 验证标准化字段的错误率下降
- 扩展覆盖剩余格式类型
一句话总结: PostToolUse hook 确定性地标准化时间戳(12%→0.3% 错误)、货币和状态码;脱敏敏感数据让 agent 无法回显;提取相关字段实现 90% token 减少——分层为无损标准化 → 必需脱敏 → 验证后提取。