工具调用链路追踪
1. 定义与边界
工具调用链路追踪记录 Agent 从决定调用工具、生成参数、权限检查、执行请求、处理返回到继续推理的完整链路。它关注的是行动路径,而不是单个工具服务的 API 日志。
2. 为什么重要
生产事故常见于工具层:选错工具、参数错、权限错、工具超时、返回脏数据、Agent 把错误返回当成功。链路追踪能把“Agent 回答错了”拆成可修复原因。
3. 核心机制
4. 工程实现
工具调用事件:
{
"event": "tool_call_requested",
"trace_id": "tr_001",
"span_id": "sp_tool_req_1",
"tool_name": "update_customer_note",
"tool_schema_version": "2026-05-01",
"risk_level": "write_low",
"args_schema_valid": true,
"args_hash": "sha256:...",
"policy_decision": "allow",
"user_confirmed": true
}
工具返回要标准化:
{
"ok": false,
"error_code": "RATE_LIMITED",
"retryable": true,
"safe_to_show_user": false,
"message": "rate limit"
}
5. 生产实践
- 使用工具网关统一记录、鉴权、限流、脱敏和幂等。
- 参数记录使用摘要和关键业务字段,避免保存完整敏感载荷。
- 高风险写工具必须记录用户确认、策略版本和调用者身份。
- 工具错误码要可机器处理,便于 Agent 正确重试或转人工。
6. 常见反模式
- Agent 直接调用多个后端服务,绕过统一审计。
- 工具返回自然语言错误,Agent 难以区分可重试和不可重试。
- 只记录工具服务日志,不记录 Agent 为什么调用。
- 工具 schema 变更未版本化,导致旧评测无法解释。
7. 评测方法
| 指标 | 解释 |
|---|---|
| Tool Success Rate | 工具实际执行成功率 |
| Policy Denial Rate | 被策略拒绝的调用比例 |
| Argument Validation Failure | 参数校验失败比例 |
| Retryable Error Recovery | 可重试错误恢复成功率 |
| Irreversible Action Audit Coverage | 不可逆动作审计覆盖率 |
8. 安全与治理
工具是 Agent 权限边界。应采用最小权限、显式 allowlist、参数校验、用户确认、幂等键、速率限制和审计日志。外部内容不得直接提升工具权限。
9. 权威资料
- Model Context Protocol security best practices: https://modelcontextprotocol.io/specification/2025-11-25/basic/security_best_practices (核对日期:2026-05-09)
- OpenAI Function calling guide: https://platform.openai.com/docs/guides/function-calling (核对日期:2026-05-09)
- Anthropic Tool use docs: https://docs.anthropic.com/en/docs/build-with-claude/tool-use/overview (核对日期:2026-05-09)
- OpenTelemetry semantic conventions for generative AI: https://opentelemetry.io/docs/specs/semconv/gen-ai/ (核对日期:2026-05-09)
15. 主控验收清单
- 是否每个工具调用都能关联 Agent run。
- 是否记录策略决策和审批 ID。
- 是否记录幂等键或业务事实 ID。
- 是否记录下游 HTTP 状态和重试次数。
- 是否对工具参数做 hash 或脱敏。
- 是否识别 forbidden tool call。
- 是否能按工具版本比较错误率。
- 是否有工具超时和下游故障告警。
- 是否能区分工具失败和模型误用工具。
- 是否把工具调用失败加入评测集。
- 是否对外部不可信内容打标。
- 是否有副作用工具回放替身。
- 是否检查 tool schema 变更对 trace 字段的影响。
- 是否限制高危工具 trace 的访问权限。
- 是否监控重复副作用为 0。
- 是否把工具调用成本归因到 run。
10. 二次精修:工具链路 trace 示例
工具调用链路要覆盖模型决策、权限检查、工具入参、下游调用、结果处理和副作用确认。
| Span | 关键字段 | 失败分析用途 |
|---|---|---|
tool.policy_check | policy.version、decision、reason | 是否越权 |
tool.call | tool.name、args_hash、idempotency_key | 是否重复/错参 |
tool.downstream | http.status_code、retry_count | 下游可靠性 |
tool.result_normalize | result_size、schema_valid | 结果契约 |
tool.side_effect_confirm | business_id、ledger_status | 副作用确认 |
11. 工具调用事件结构
{
"event_name": "agent.tool_call.completed",
"tool": {
"name": "issue_refund",
"version": "1.4.0",
"args_hash": "sha256:abc",
"idempotency_key": "refund:A123:v1"
},
"policy": {"version": "refund_policy_v2", "decision": "needs_approval"},
"downstream": {"status_code": 200, "duration_ms": 480},
"result": {"schema_valid": true, "business_id": "refund_789"},
"safety": {"risk_level": "high", "approval_id": "apv_456"}
}
12. 告警与指标
| 指标 | 告警建议 |
|---|---|
| Tool Error Rate | 单工具 5 分钟高于基线 |
| Tool Timeout Rate | 影响 TSR 时告警 |
| Forbidden Tool Call | 任意出现即安全告警 |
| Missing Approval Rate | 高危工具目标为 0 |
| Duplicate Side Effect | 目标为 0 |
| Tool Cost Spike | 成本环比异常 |
13. 安全与治理
- 工具参数默认只记录 hash;排障需要明文时走受控调试环境。
- 外部内容触发的工具调用要标记
untrusted_input=true。 - 高危工具的 trace 必须记录审批 ID、审批结果和业务事实 ID。
- tool adapter 要统一注入 traceparent,不能每个工具各自实现。
- 工具失败回放必须使用 fixture,避免调试时重复产生副作用。
14. 补充权威资料
- OpenTelemetry GenAI semantic conventions: https://opentelemetry.io/docs/specs/semconv/gen-ai/ (核对日期:2026-05-09)
- Model Context Protocol security best practices: https://modelcontextprotocol.io/specification/2025-11-25/basic/security_best_practices (核对日期:2026-05-09)