跳到主要内容

Agent日志体系

1. 定义与边界

Agent 日志体系是对 Agent 输入、决策、工具调用、状态变更、安全策略和用户反馈的结构化记录。它不是把 prompt 和回答全文塞进日志,而是按事件记录可查询、可聚合、可审计的信息。

2. 为什么重要

没有日志,生产问题只能靠复述和猜测。Agent 失败经常跨越模型、工具、检索、权限和业务系统,结构化日志是定位和审计的基础。

3. 核心机制

日志事件建议分层:

层级事件示例
会话task_started、task_finished、task_failed
模型model_call_started、model_call_finished
工具tool_call_requested、tool_call_finished、tool_call_denied
安全guardrail_triggered、policy_check_failed
用户feedback_submitted、handoff_requested

4. 工程实现

统一日志结构:

{
"timestamp": "2026-05-09T10:00:00Z",
"level": "INFO",
"trace_id": "tr_001",
"span_id": "sp_003",
"event": "tool_call_finished",
"agent_version": "support_agent_3.1",
"user_hash": "u_hash",
"task_type": "refund",
"tool_name": "refund_payment",
"tool_risk": "payment",
"status": "denied",
"reason": "missing_user_confirmation"
}

字段原则:

  • 标识字段:trace_id、span_id、request_id、user_hash、tenant_id。
  • 版本字段:agent_version、prompt_version、tool_schema_version、policy_version。
  • 分类字段:task_type、risk_level、channel、environment。
  • 结果字段:status、error_code、failure_reason、latency_ms、cost。

5. 生产实践

  • 日志先脱敏再落盘,密钥、完整身份证号、银行卡、访问 token 不应进入日志。
  • 原始 prompt 和工具返回只在必要场景受控保存,并设置保留期。
  • 高风险事件使用审计日志,避免被普通日志清理策略删除。
  • 日志格式要稳定版本化,方便长期查询和告警。

6. 常见反模式

  • 只打自然语言日志,后续无法聚合。
  • 只记录失败,不记录成功基线,导致无法计算比例。
  • 把完整用户隐私写入 debug 日志。
  • 没有 trace_id,多个系统日志无法关联。

7. 评测方法

日志体系本身也要验收:

检查项标准
Trace 覆盖率生产任务中带 trace_id 的比例
关键事件覆盖率模型、工具、护栏、结果是否都有事件
脱敏通过率抽检日志中无明文敏感信息
查询可用性能按用户反馈定位到完整 trace

8. 安全与治理

日志是敏感资产。需要访问控制、保留周期、加密、审计、脱敏和数据最小化。对安全事件,日志要能证明 Agent 为什么执行或拒绝某个动作。

9. 权威资料

10. 二次精修:结构化日志 schema

Agent 日志必须能回答:谁、在什么版本、基于什么输入、调用了什么工具、为什么失败、是否触发安全策略。

{
"timestamp": "2026-05-09T10:20:30Z",
"level": "INFO",
"event_name": "agent.tool_call.completed",
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"span_id": "00f067aa0ba902b7",
"run_id": "run_123",
"tenant_id": "t_123",
"agent_id": "refund_agent",
"agent_version": "1.8.2",
"prompt_version": "refund.system@2026-05-09.3",
"model": "gpt-5",
"tool_name": "search_order",
"tool_status": "ok",
"duration_ms": 320,
"input_tokens": 2100,
"output_tokens": 120,
"cost_usd": 0.04,
"policy_decision": "allow",
"error_code": null
}
字段用途脱敏要求
trace_id/span_id关联 trace不含业务数据
tenant_id/user_id分租户分析低权限视图可 hash
prompt_version回放和回滚不记录 prompt 全文
tool_name/tool_status工具质量分析参数用 hash 或摘要
policy_decision安全审计保留策略版本
cost_usd成本监控不含敏感输入

11. 日志事件分类

事件名必须字段告警用途
agent.run.startedrun_id、agent_version、budget量级异常
agent.model.completedmodel、tokens、latency成本延迟
agent.tool_call.completedtool、status、duration工具错误
agent.policy.checkedpolicy、decision安全审计
agent.run.completedoutcome、cost、latencySLO
agent.security_eventseverity、rule、action安全告警

12. 日志治理与评测

  • 日志采样不能丢关键安全事件;普通成功事件可采样,高危和失败事件全量保留。
  • 日志字段要有 schema 测试,发布时校验关键字段不缺失。
  • PII、密钥、完整 prompt、完整工具参数默认不进普通日志。
  • 日志保留周期按数据分级设置,安全审计日志通常比调试日志保留更久。
  • 评测指标:Log Completeness、PII Leakage Count、Schema Violation Rate、Event Drop Rate、Correlation Success Rate。

13. Runbook 检查

  • 没有 trace_id 的错误日志优先修复。
  • 看到 agent.security_event 的 critical 事件,先确认是否有真实副作用。
  • 成本日志突增时按 prompt_versiontool_nametenant_id 分片。
  • 工具错误突增时同时检查下游状态、重试放大和 DLQ。
  • 日志平台故障时主链路不能阻塞,应本地缓冲或降级。

14. 补充权威资料

15. 主控验收清单

  • 是否所有错误日志都有 trace_idrun_idagent_version
  • 是否所有模型调用都有 token、model、prompt_version。
  • 是否所有工具调用都有 tool_name、status、duration。
  • 是否安全事件全量记录且不被采样丢弃。
  • 是否日志 schema 有 CI 校验。
  • 是否明确定义哪些字段禁止写入日志。
  • 是否能按租户、版本、工具、风险等级检索。
  • 是否配置日志保留周期和访问审计。
  • 是否有日志导出失败告警。
  • 是否能从日志跳转到 trace。
  • 是否对自由文本做 PII 扫描。
  • 是否把日志字段变更纳入发布审查。
  • 是否有事故时的日志查询模板。
  • 是否记录采样率,避免误解统计结果。
  • 是否定期抽检日志脱敏效果。