多Agent上生产的第一课:日志、轨迹、回放与责任归因

简介: 多Agent系统排查难?作者亲历生产事故后,提出五层可观测性体系:结构化日志(含参数/结果)、任务轨迹(还原数据流)、可解释回放、责任归因(结合推理链)、状态审计。最小方案仅需3天落地,让问题定位从“两小时盲猜”缩至“五分钟定位”。

单Agent出了问题,你打开对话记录从头看一遍就知道哪里错了。

多Agent出了问题,你可能连是哪个Agent干的都不知道。Lead Agent说它已经把任务分发下去了,Sub Agent A说它完成了自己的部分,Sub Agent B也说完成了。但最终结果是错的。谁的锅?

我在生产环境跑多Agent踩过这个坑。排查了两个小时,最后发现是Sub Agent A的输出格式跟Sub Agent B的预期不匹配,Lead Agent没有做格式校验就直接传递了。三个Agent都没报错,但结果就是废的。

从这件事之后,我把可观测性放到了多Agent系统的第一优先级。

01 第一层:日志

日志是最基础的。每个Agent的每次操作都要留痕。

一条合格的Agent日志至少包含这些字段:时间戳、Agent ID、动作类型(工具调用/LLM请求/消息传递)、输入参数、返回结果、耗时、token消耗。

很多人写日志只记"Agent调用了什么工具",不记参数和返回值。这在排查问题时几乎没用。你知道Agent调了一次文件读取,但不知道它读了哪个文件、拿到了什么内容。等你要回头查的时候,文件可能已经被改过了。

一个我在用的日志格式:

{
   
  "ts": "2026-02-10T14:32:01Z",
  "agent_id": "code-reviewer",
  "action": "tool_call",
  "tool": "read_file",
  "params": {
   "path": "src/api/handler.ts"},
  "result_length": 2847,
  "duration_ms": 120,
  "tokens_in": 0,
  "tokens_out": 0
}

LLM请求的日志要单独存。因为prompt内容通常很长,跟其他日志混在一起会导致日志文件膨胀到不可读。我的做法是主日志里记一个请求ID,详细的prompt和response存到独立的文件里。需要时按ID去查。

02 第二层:轨迹

日志是一条一条的记录。轨迹是把这些记录串成一条线,还原一个任务从开始到结束的完整路径。

一个典型的多Agent任务轨迹:

  1. 用户发起任务:"给这个API加上分页功能"
  2. Lead Agent分析任务,决定拆成两个子任务:修改数据库查询层、修改API响应格式
  3. Lead Agent把子任务1分发给Agent A(数据库专家)
  4. Agent A读取了当前的查询代码,调用了3次工具,生成了修改方案
  5. Agent A把结果返回给Lead Agent
  6. Lead Agent把子任务2和Agent A的结果一起发给Agent B(API专家)
  7. Agent B基于Agent A的修改,调用了4次工具,完成API层的修改
  8. Agent B返回结果
  9. Lead Agent汇总,返回给用户

轨迹要记录每一步之间的数据流。步骤3里Lead Agent发给Agent A的具体指令是什么?步骤5里Agent A返回的具体内容是什么?步骤6里Lead Agent有没有对Agent A的结果做二次加工?

没有这些信息,你在出问题的时候只能看到起点和终点,中间的传递过程是黑盒。

03 第三层:回放

能不能用同样的输入重现同样的执行路径?

理论上,如果你完整记录了每一步的输入输出,应该可以回放整个执行过程。实践中很难做到。

第一个障碍是LLM的非确定性。即使temperature设为0,同样的prompt在不同时间点跑出的结果也可能不同。模型供应商的服务端可能更新了权重、调整了推理参数,这些对你是透明的。

第二个障碍是外部状态。Agent在执行过程中读取了文件系统、调用了API、查询了数据库。回放时这些外部状态可能已经变了。你不能回到任务执行时的文件系统快照。

我的折中方案:不追求完美回放,追求"可解释的回放"。记录每一步的实际输入和实际输出,回放时用这些记录来还原逻辑链路,而不是真的重跑一遍。这样至少能回答"当时发生了什么",即使不能"重现当时的情况"。

对于关键任务,可以更进一步:在执行时把外部依赖的快照也存下来。Agent读了某个文件,就把那个时刻的文件内容存一份。Agent调了某个API,就把API的响应存一份。空间换可追溯性。

04 第四层:责任归因

出错时能定位到具体的Agent和具体的步骤。

这需要两个前提。第一是清晰的任务边界。每个Agent负责什么,输入是什么,输出是什么,要在任务分发时就定义清楚。如果Lead Agent给Sub Agent的指令是模糊的"帮我处理一下这个文件",出了问题你分不清是指令不清楚还是执行不到位。

第二是审计日志。不只是记录Agent做了什么,还要记录Agent为什么做这个决定。LLM在生成工具调用之前通常会有一段推理文本(thinking),这段文本对责任归因很有价值。它能告诉你Agent是基于什么判断选择了这个操作。

GitHub上有一个社区项目dylan-gluck/cc-dev-team,它做多Agent协作开发,里面提到了几个做法:实时可观测性、状态管理、智能hook。状态管理这一点我觉得说得好——每个Agent在执行过程中的状态变化(空闲→接收任务→执行中→等待依赖→完成)都应该被追踪。状态的异常变迁(比如从"执行中"直接跳到"空闲",跳过了"完成"状态)往往就是问题的信号。

05 Anthropic团队自己怎么做

Anthropic在他们的博客里提到过,内部安全团队用多Agent做生产问题诊断,问题诊断速度提升了3倍。

3倍提升的前提是他们有完整的观测体系。安全团队的多Agent系统能接入内部的日志平台、监控仪表盘、告警系统。Agent不是在黑盒里工作,而是在一个充分透明的环境里。

对于我们普通开发者,没有那么完善的基础设施,但思路可以借鉴。让Agent的执行环境尽可能透明。它读了什么、调了什么、判断了什么,都应该有记录。

06 一个最小可行的观测方案

如果让我推荐一个成本最低的方案,三个东西。

结构化日志。用JSON格式写日志,每条包含时间戳、Agent ID、动作、参数、结果。不要用纯文本日志,纯文本在后续分析时解析成本很高。

执行轨迹文件。每个任务生成一个轨迹文件,把这个任务涉及的所有Agent的所有操作按时间排列。文件名用任务ID命名,方便按任务检索。

错误快照。每次任务失败时,自动把当时的完整上下文存一份:所有Agent的日志、任务的输入、每个Agent的输出、失败时的错误信息。这些失败样本积累起来就是一个案例库。下次遇到类似的失败,先去案例库里搜一下,可能有现成的解决方案。

三样东西加起来,写代码大概一到两天的量。但它能把排查时间从"两小时翻聊天记录"缩短到"五分钟查日志"。

多Agent系统的可观测性投入,回报率远高于在prompt上反复调优。prompt调得再好,出了问题看不到执行过程,还是得靠猜。

目录
相关文章
|
2月前
|
人工智能 安全 测试技术
agents-hive 开源了:一个面向生产的Harness Agent 工程
agents-hive 是开源的生产级 Agent 工程化系统,提供全链路执行回放、质量闭环迭代、多入口统一运行时及内建安全约束四大能力,助力开发者高效构建、调试与规模化运营商业级 Agent 应用。
|
1月前
|
人工智能 API 开发工具
Claude Code 官方工作原理与使用指南深度解析(新版)
在AI编程工具快速迭代的当下,Claude Code凭借其强大的自主编码能力、完整的项目上下文理解与高效的工具调用体系,成为开发者提升编码效率、处理复杂项目的核心助手。作为Anthropic推出的AI编码代理,它突破了传统代码补全工具的局限,能够自主规划任务、执行代码、调试错误、管理项目,实现从需求到落地的全流程自动化。
818 0
|
5月前
|
存储 人工智能 API
Agent Internet 的未来:去中心化是唯一的出路吗?
Moltbook崩塌暴露中心化Agent网络的致命风险,但Agent互联本身价值巨大。本文冷静剖析:为何需要“Agent互联网”?为何Moltbook模式不可持续?并提出以Email为范本的去中心化愿景——基于DID、Nostr、端到端加密与细粒度授权,构建自主、可信、抗单点故障的机器对机器网络。
350 1
|
6月前
|
机器学习/深度学习 人工智能 调度
从单体到集群:AI Agent 中“指挥官”与“调度官”的双层协作模式设计
本文提出一种“指挥官+调度官”双层治理架构,解决多智能体系统中的通信混乱与任务死锁问题。指挥官负责高层规划,调度官专注任务分发,通过职责解耦实现高效协作,并结合Python代码展示核心实现,提升复杂场景下多Agent系统的稳定性与可扩展性。
804 0
|
自然语言处理 JavaScript 前端开发
Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎
Duktape是一个可嵌入的Javascript引擎,主要关注便携性和精简及紧凑性。 Duktape很容易集成到C/C++项目: 添加duktape.c和duktape.h到您的build中,并使用Duktape API从C代码中,调用ECMAScript代码的功能,反之亦然。
2204 0
|
7月前
|
运维 监控 前端开发
基于AI大模型的故障诊断与根因分析落地实现
本项目基于Dify平台构建多智能体协作的AIOps故障诊断系统,融合指标、日志、链路等多源数据,通过ReAct模式实现自动化根因分析(RCA),结合MCP工具调用与分层工作流,在钉钉/企业微信中以交互式报告辅助运维,显著降低MTTD/MTTR。
6451 28
|
4月前
|
人工智能 安全 Serverless
让 AI Agent 安全“跑”在云端:基于函数计算打造 Agent 代码沙箱
Agent 代码沙箱是保障 AI 智能体安全执行的核心基础设施。依托函数计算构建强隔离、有状态、低成本的 AI 运行时。
|
6月前
|
安全 物联网 API
Windows 11 25H2 | 24H2 中文版、英文版 (x64、ARM64) 下载 (2026 年 1 月更新)
Windows 11 25H2 | 24H2 中文版、英文版 (x64、ARM64) 下载 (2026 年 1 月更新)
975 0
Windows 11 25H2 | 24H2 中文版、英文版 (x64、ARM64) 下载 (2026 年 1 月更新)
|
3月前
|
弹性计算 关系型数据库 对象存储
阿里云优惠券怎么领取?入口在哪?2026年最新指南
阿里云2026年优惠券指南:详解代金券、满减券、折扣券三类用法,覆盖ECS/OSS/RDS等通用产品及指定活动商品;提供权益中心、高校计划等四大领取入口;支持预付费订单手动抵扣与按量账单自动抵扣,助力大家低成本上云!
310 5