追踪多智能体交接,定位输出失真源头
围绕 CrewAI 中角色交接导致的上下文失真,介绍使用开源 ZizkaDB、日志集成、MCP 服务及 GitHub Actions 建立审计记录。文章强调沿交接链定位问题,具体委派表示方式需核对参考示例。
AI 深度解读
多 Agent 系统答错,问题可能早在研究员把资料交给分析师时就埋下了。最后负责写作的 Agent 只是把错误包装成了一段流畅的文字。这篇围绕 CrewAI 和 ZizkaDB 的指南,讨论的正是如何把任务交接、共享记忆和当时的配置串成记录,追查错误从哪里开始。
它最有用的主张是:调试不能只盯最终回答,还得保存回答形成的路径。不过,记录能否代表真实因果、防篡改能证明什么,以及所谓节省成本的数据,都需要分开看。
为什么每个 Agent 都像没错,最终答案却错了
作者指出,多 Agent 系统多了一类故障:角色之间的上下文失真。研究员找到正确事实,压缩摘要时偏了一点;分析师沿着错误前提继续推理;写作者再把结论组织得更有说服力。每一步都可能显得合理。
其中有两种典型情况:「传话效应」让细小偏差逐次累积;「权威混淆」让下游把上游的猜测当成已核实事实。
因此,作者要求每次交接除了输出,还要留下角色、来源、自述置信度,以及任务中哪些要求没有完成。来源为空、置信度只有 medium 的结论,不该未经检查就变成下一步的确定前提。自述置信度也只是排查线索,不能直接当作准确率。
这与通常的 AI 可观测性关注点不同。延迟、token 数、错误率帮助团队发现系统异常;可审计性还要求事后还原任务、追踪依赖,并检查记录有没有被改动。原文强调完整记录、因果关联和完整性校验,二者可以共用基础设施。
ZizkaDB 开源版有个实际限制:每个安装实例只记录一个 agent。作者建议把整支 crew 记作 research-crew,在事件字段里区分角色。每个角色独立建 agent、管理 fleets,以及 agent-to-agent 记录,属于 Cloud 功能。
先把任务串起来,再检查这条链是否可信
本地方案需要 Docker,启动命令为 curl -fsSL https://raw.githubusercontent.com/Zizka-ai/ZizkaDB/main/scripts/quickstart-remote.sh | bash。API 位于 http://localhost:8000,面板位于 http://localhost:3001,本地无需注册或 API key。依赖通过 pip install zizkadb-sdk zizkadb-crewai crewai 安装。
创建 ZizkaDB 连接及 ZizkaDBCrewLogger 后,下面这段记录启动、任务和最终输出:
await logger.log_kickoff(goal="Prepare a supplier risk summary")
result = await crew.kickoff_async()
for task_output in result.tasks_output:
await logger.log_task(
description=task_output.description,
output=str(task_output.raw)[:2000],
)
await logger.log_output(str(result))
(await db.why(logger.last_event_id)).print()
要留意 result = await crew.kickoff_async() 的位置:任务全部结束后才开始补记,时间戳代表写日志的时间。想记录实际执行过程,需要参考 examples/crewai-agent/,在任务回调里接入。
logger 通过 last_event_id 自动把新事件接到前一个事件。它方便阅读,却有个边界:日志写入顺序不自动等于真实的任务依赖。 存在并行、委派或多路输入时,要核实父子关系的表达方式,不能看到一条链就认定它已经解释了全部因果。
示例还通过 [:2000] 截断输出。这样控制存储量很直接,但被截掉的部分也可能包含错误来源。原文同时建议入库前脱敏;完整留痕与数据最小化之间,团队仍需设计自己的取舍。
记录建立后,排查分三步:在面板 Activity 中查看 session replay,找到第一个偏离预期的任务;用 zizkadb why 或 (await db.why(event_id)).print() 追溯输入;再通过 GET /v1/events/{event_id}/impact 查看哪些后续输出受影响。原因可先归为错误输入、错误上下文、工具故障和推理错误,避免每次都去修改最后一个 Agent 的 prompt。
共享记忆和旧配置,也必须留下来路
作者用供应商账期说明共享记忆的风险:研究员查对了,分析师却受到三周前旧记忆影响。若只看最终文本,很容易错改写作者的提示词。原文没有附上这次案例的原始运行记录,应把它视为说明机制的案例。
SDK 的 db.search 可检索事件,db.context_for 可生成适合放进提示词的记忆块。修正事实时,用 supersedes=old_event_id 保留旧记录,同时让旧事实退出搜索与上下文。示例通过 db.log 写入 memory_written,将账期改为 net-60,设置 subject_id="supplier_113" 和 importance=0.8。排序综合重要性与新近程度,后者默认每 30 天减半;默认使用关键词搜索,也可选本地 embeddings。
但作者无法确认 context_for 是否自动记录了记忆被使用的过程。因此,还要显式记录启动时提供了哪些记忆,并把 kickoff 接到这个事件下面。查得到某条记忆,与证明某次任务用过它,是两件事。
旧事故还需要旧配置。db.at("research-crew", "2026-09-15T09:00:00Z") 根据已记录的状态事件恢复当时状态,每个 key 取当时最近一次写入。角色 prompt 版本、模型名、工具清单和任务顺序都得先记录,否则它无法替你找回六周前的系统。
完整性方面,原文介绍了 SHA-256 校验和、事件链哈希及 db.verify_chain("research-crew")。链头必须存到数据库之外,后续可结合序号验证新增记录。校验通过能支持记录未被改动的判断,不能证明记录里的答案正确。 拥有完整数据库权限的人可能重写整条链,外部锚点因此很关键。
工程接入也包括两个 GitHub Actions:ZIZKA-AI-SL/zizkadb-why-action@v1 在测试失败时展示任务链,示例使用 actions/checkout@v4、actions/setup-python@v5、Python 3.12 和 pytest tests/crew;ZIZKA-AI-SL/zizkadb-audit-action@v1 按 0 6 * * 1 定时核验实例并导出报告。报告可用 gh attestation verify report.md -R your-org/your-repo 验证。只有面向真实运行实例的审计,才覆盖生产历史;记录零事件也应判失败。
编辑器侧,原文提供了 MCP 配置,便于直接查询记忆、追溯和校验:
{ "mcpServers": { "zizkadb": { "command": "uvx", "args": ["zizkadb-mcp==0.1.12"], "env": { "ZIZKADB_HOST": "http://localhost:8000" } } } }
这里要关注固定版本的 zizkadb-mcp==0.1.12。原文给出的 Registry 名称是 io.github.ZIZKA-AI-SL/zizkadb-mcp,MCP 服务会在本机执行代码,升级前需要审阅。
我的判断
我认同作者把调试重心移到交接和记忆上。与只保存最终回答相比,记录「谁给了什么依据、下游用了哪些记忆」更有机会定位根因。不过,如果现有 tracing 平台已经能完整保留任务输入、依赖和配置,也可以先补缺失字段;原文没有提供与其他方案的对照实验,无法据此判断必须换数据库。
成本收益尤其不能当成实测。作者假设每月 10 次错误或争议输出、工程师每小时 100 欧元,单次排查从 5 小时降到 1.5 小时,月成本便从 5,000 欧元降到 1,500 欧元,年省 42,000 欧元。每年四次取证请求、单次从 4,800 欧元降到 1,600 欧元,同样属于模型假设。部署需数天、Cloud Pro 每月 29 欧元、Team 每月 69 欧元,都是原文给出的信息,不能替代自己的评估;自托管还采用 AGPL-3.0。
合规部分也要收住结论。作者提到 EU AI Act Article 12 的自动日志要求,并引用追踪器列出的 Annex III 高风险系统日期 2027-12-02,同时明确提醒时间表可能调整。本文仅转述该信息,未作核验。技术证据包能辅助审查,不能替代风险管理或正式评估。
能拿来做什么
- 先选一个至少有三个任务的 CrewAI 流程,为每次交接记录角色、来源、置信度和未完成项,再拿一次真实错误检查能否找到首个偏差。
- 如果流程使用共享记忆,先落实
supersedes和记忆使用记录,同时保存 prompt、模型及工具配置,让旧事故具备可追查条件。 - 把失败任务追溯接入 PR,把真实实例的链校验接入定时任务,并固定镜像和第三方 Actions 版本。
- 按原文建议,每季度抽取一次三个月前的运行,让构建团队之外的同事仅凭证据包回答问题,用结果检验记录是否真的够用。