多智能体系统即使保留了所有消息,也可能丢失任务所有权、重放已完成的写入,或在停止一个工作者后让另一个继续操作。多智能体协作测试会检查委派、共享状态、冲突处理、所有权、终止和追踪规则。
多智能体协作测试:追踪一次交接
对每项任务或消息记录任务 ID、消息 ID 或关联 ID、发送方、接收方、父级委派、范围、负责人、共享状态版本和确认信息。按项目定义的接收、拒绝和终止规则检查,不要假设消息只会投递一次。
| 交接内容 | 需要查找的证据 |
|---|---|
| 委派 | 子任务范围明确,工具权限受限,责任人清楚。 |
| 共享状态 | 消息引用接收方实际可以读取的版本或产物。 |
| 所有权 | 任务认领和提交遵循已提供的原子所有权规则或 fencing token(隔离令牌)协议。 |
| 确认 | 发送方能区分已接收、已拒绝、已完成和结果不确定。 |
| 终止 | 停止请求传达到所有活跃子任务,并留下可审计的终态。 |
如果协议能安全去重,重复投递本身不一定是缺陷。要检查陈旧消息能否重新取得所有权、租约过期的工作者是否仍可提交,以及重试任务是否会重复产生副作用。
示例:研究流水线
假设一个流水线由规划、来源核验、写作和评审 Agent 组成。来源核验 Agent 读取旧版政策,而规划 Agent 收到新需求。复核交接载荷与共享状态版本:写作者应保留这个冲突,评审者应能找出每项结论使用的来源,然后才分配最终决策责任。
如果子 Agent 在产生副作用后超时,重新分配前要区分已完成、未完成和结果不确定的工作,并保留每项工作的负责人和证据。停止请求也需要确认和终态;父任务超时不能证明所有子任务都已停止。
按协议选择故障场景
不要一次把所有故障都塞进回归。先根据协议挑出会改变所有权、状态或外部副作用的路径,再逐项注入条件。下面的检查要在隔离环境或可回滚的测试数据上进行;生产写入不能作为试验手段。
| 场景 | 注入条件 | 需要观察的结果 |
|---|---|---|
| 重复交接 | 接收方已确认后重放同一消息 | 是否按消息 ID 去重,重复确认是否与原结果一致,副作用是否被重复提交 |
| 共享状态变更 | 接收方读取状态后,另一 Agent 更新了版本 | 旧版本是否被拒绝、合并或明确标记为冲突;不能静默覆盖新值 |
| 所有权过期 | 工作者持有租约时暂停,等另一工作者接管后再恢复 | 旧工作者能否凭过期令牌提交;提交端是否核对当前所有权或 fencing token |
| 副作用后超时 | 写入成功,但完成消息未送达,父任务触发重试 | 是否先用稳定的操作标识对账,再决定重试、复用结果或人工处理不确定状态 |
| 停止传播 | 一个子任务收到取消请求时,其他子任务仍在排队或调用工具 | 每个子任务的取消请求、确认、工具状态和终态是否分别可查 |
每轮只改变一个条件,并保留输入任务 ID、消息 ID、状态版本、所有权令牌、工具操作标识和最终确认。这些记录可以帮助区分安全去重、检测到状态更新,以及把不确定结果误当失败后重试。如果协议没有定义预期结果,先由负责人补齐规则,再把它加入回归。
记录 MAT-## 发现
每个协调缺口都应指出任务或协议规则、来源、触发条件、消息和状态版本、预期关注点、证据状态、影响与优先级、负责人角色、关闭条件和验证方法。只有当提供的协议涉及相应情况时,才加入重复消息、陈旧状态、部分失败、重新分配和停止传播场景。
静态设计、候选验证和实际执行必须分开。任务图或消息 schema 的存在不能证明 Agent 实际运行时遵循了它。
相关 Skill
- AI Agent 测试: https://inaodeng.com/zh-cn/qaskills/ai-agent-testing/;检查 Agent 的任务行为与运行轨迹。
- Agent 工具测试: https://inaodeng.com/zh-cn/qaskills/agent-tool-testing/;检查工具调用契约和副作用。
- 授权测试: https://inaodeng.com/zh-cn/qaskills/authorization-testing/;检查哪个主体可以执行哪项动作。
安装与调用
安装这个独立 Skill:
npx skills add https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh --skill multi-agent-testing
调用 multi-agent-testing 时,提供协调协议、任务和消息记录、共享状态版本、所有权规则与终止行为。可以先从一段脱敏轨迹开始:
请用 multi-agent-testing 复核这组脱敏多智能体交接记录。
协议与成功条件:[委派、认领/提交、重试、取消和终止规则]
轨迹:[task/message/correlation ID、发送方/接收方、状态版本、ACK、工具副作用]
范围:[纳入或排除的 Agent、消息和步骤]
请列出已确认事实、冲突、缺失证据和 MAT-## 候选发现;区分静态设计与实际运行结果。不要假设消息只投递一次,也不要声称未提供的子任务已停止。
常见问题
重复投递消息就代表缺陷吗? 不一定。按项目协议检查去重、所有权和副作用;没有证据时,不要假设 exactly-once 或安全重放。
父任务超时能证明所有子任务都已停止吗? 不能。需要各活跃子任务的取消确认、工具状态和终态证据。
源文件
使用前请阅读多 Agent 协作测试 Prompt: https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh/testing-types/multi-agent-testing/prompts/multi-agent-testing.md。其中定义了 MAT-## 契约,覆盖所有权、部分失败对账、确认消息和终止。