实用提示:代理数量越多并不代表AI性能越好——我在构建多代理系统时学到的经验
《实用笔记》操作指南:更多智能体并不等于更优秀的AI:我在构建多智能体系统时所学到的知识——包括合同条款、校验机制,以及供采用该架构的团队使用的现成代码模块。
本指南将逐步构建从原始材料到可运行系统的完整流程,主题为“更多智能体并不等于更优秀的AI:我在构建多智能体系统中学到的经验”。重点在于可操作的步骤、明确的检查点,以及可直接放入代码仓库的代码,无需猜测其用途。 在概览阶段,应在修改代码之前明确输入参数、各步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新运行相应步骤,而无需推测隐藏状态。 配置信息应与应用程序代码分开存放。环境文件、密钥存储以及功能开关应集中管理,以便操作人员无需查看整个系统结构即可进行审核。
更多智能体并不等于更优秀的AI
在“更多智能体,更好的人工智能”阶段工作时,首先需写下相关契约:所需输入、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 同时记录正常流程与异常恢复流程。重试机制、人工干预环节以及死信处理都是产品本身的组成部分,而非后续需要补充的功能。 在成本较高的步骤之后设置检查点。当操作员重新尝试某个后续节点时,恢复流程不应再次调用相同的大型语言模型。
核心理念:人工智能面试小组
在处理“AI理念”阶段时,首先写下相关规范:所需的输入参数、成功标志,以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 优先选择小型、可测试的单元,而非庞大的脚本。当某个步骤失败时,故障应能指向具体的责任模块,而非复杂的流程链。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的LLM接口。
Candidate
↓
Coordinator / Orchestrator
↓
┌────────────┬─────────────┬─────────────┐
↓ ↓ ↓
Technical Behavioral Evaluation
Agent Agent Agent
\ | /
└───────────┼───────────┘
↓
Shared State
技术代理
在处理技术代理阶段时,首先需明确合同条款:所需输入、成功标志以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 将此阶段视为输入与验证后输出之间的契约。为相关成果命名,定义成功检查标准,并杜绝无声的半完成状态。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的大型语言模型。 在处理技术代理阶段时,首先需明确合同条款:所需输入、成功标志以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 将配置信息置于应用程序代码之外。环境文件、密钥存储和功能标志应集中存放于一个位置,以便操作员无需查看整个架构即可进行审计。
行为代理
将行为代理阶段视为可测量的界面来处理时,其效果最佳。在扩大范围之前,先记录一个成功的用例、一个失败案例以及回滚说明。 同时记录正常流程和恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的一部分,而非后续的优化内容。 保持图结构的状态简洁且具有类型定义。嵌套的数据块会掩盖哪个节点编写了哪个字段的信息,还会在中断后导致流程无法继续。
评估代理
将评估代理阶段视为可度量的对象时,其效果最佳。在扩大范围之前,先记录一份理想的处理结果、一个失败案例以及回滚说明。 优先选择小型且可测试的单元,而非庞大的脚本。当某一步骤失败时,故障应能指向具体的责任主体,而非复杂的流程链。 保持图结构的状态简洁且具有类型定义。嵌套的数据块会掩盖哪个节点编写了哪个字段的信息,还会在流程中断后导致无法继续执行。
上下文代理
将上下文代理阶段视为可度量的界面时,其效果最佳。在扩大范围之前,需记录一份理想状态示例、一个故障案例以及回滚说明。 应将此阶段视为输入与已验证输出之间的契约。为相关成果命名,明确成功标准,杜绝默许的半完成状态。 保持图结构扁平且类型化。嵌套的数据块会掩盖哪个节点修改了哪个字段,还会在中断后导致无法继续处理。 将上下文代理阶段视为可度量的界面时,其效果最佳。在扩大范围之前,需记录一份理想状态示例、一个故障案例以及回滚说明。 将配置置于应用程序代码之外。环境文件、密钥存储和功能开关应集中存放于一处,以便操作员无需查看整个图结构即可进行审计。
调度器
在“编排器”阶段,修改代码之前需明确输入参数、该步骤的负责人以及终止条件。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 需同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及死信处理都是产品功能的一部分,而非后续需要补充的内容。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的连接方式并不等同于业务功能的完整性。
多个代理节点并不等同于编排功能
由于涉及多个代理且并非处于同一阶段,因此在修改代码之前需明确输入参数、该步骤的负责人以及终止条件。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 相较于冗长的脚本,更应采用小型且可测试的单元。当某个步骤失败时,故障原因应能明确指向单一责任主体,而非复杂的流程链。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的逻辑连接并不等同于业务功能的完整性。
Candidate answers
↓
Technical Agent
↓
Structured result
↓
Coordinator
┌───┴─────────┐
↓ ↓
Follow-up Change stage
↓ ↓
Technical Behavioral
Now the system has a workflow.
第1课:专业化确实有帮助
在课程1的专项实践阶段,修改代码之前需明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与已验证输出之间的契约。为相关成果命名,定义成功判定标准,杜绝默许的半完成状态。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的连接方式并不等同于业务上的完整性。 在课程1的专项实践阶段,修改代码之前需明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将配置信息置于应用程序代码之外。环境文件、密钥存储以及功能开关应集中存放于操作人员可审计且无需读取的地方。
整个图表。
第2课:更多智能体并不必然让系统更聪明
在完成第2课“更多智能体”阶段时,首先写下契约:所需输入、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 同时记录正常流程和恢复流程。重试、人工审核以及死信处理都是产品本身的组成部分,而非后续的优化工作。 在成本较高的步骤之后设置检查点。当操作员重新尝试某个节点时,恢复流程不应再次调用相同的LLM接口。
1 agent = okay
5 agents = much smarter
10 agents = extremely intelligent
It doesn’t work like that.
第3课:上下文成为真正的问题
在完成“上下文变为阶段”这一第3课内容时,首先写下相关约定:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 建议使用小型、可测试的单元,而非庞大的脚本。当某个步骤失败时,故障应指向单一的责任模块,而非复杂的流程链。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的LLM接口。
session_id
current_stage
questions_asked
candidate_answers
scores
follow_up_required
next_action
Now the Technical Agent can receive the technical information it needs.
第4课:你开始将LLM调用视为一种资源
在完成第4课起始阶段的工作时,首先写下契约:所需的输入参数、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持透明可溯。 将这一阶段视为输入与验证后输出之间的契约。为相关产物命名,明确成功判定标准,杜绝无声的半完成状态。 缓存系统中稳定的指令和工具结构。重复发送相同的开头信息是导致资源浪费的常见原因。 在完成第4课起始阶段的工作时,首先写下契约:所需的输入参数、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持透明可溯。 将配置信息置于应用程序代码之外。环境文件、密钥存储以及功能开关应集中存放于一处,以便操作人员无需查看整个系统结构即可进行审计。
User answer
↓
Agent A
↓
Agent B
↓
Agent C
↓
Agent D
questions_answered >= 10
current_stage == "behavioral"
follow_up_required == false
第5课:结构化输出被低估了
在第5课中,将结构化输出视为可度量的指标会带来最佳效果。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 同时记录正常流程和恢复流程。重试机制、人工审核环节以及错误处理都是产品本身的一部分,而非后续需要补充的内容。 保持图表状态简洁且类型明确。嵌套的数据块会掩盖哪个节点编写了哪个字段的信息,还会在流程中断后导致无法继续执行。
{
"candidate_score": 7,
"needs_followup": true,
"next_action": "technical_followup"
}
next_action = technical_followup
第6课:本地大语言模型改变了实验方式
在第6课中,将本地大语言模型视为可测量的对象来使用效果最佳。在扩大范围之前,先记录一份理想的实验结果、一个失败案例以及回滚说明。 优先选择小型且易于测试的单元,而非庞大的脚本。当某个步骤失败时,故障应能指向单一责任点,而非复杂的流程链。 需为每轮对话和每次会话设定token预算。智能代理工具会大量消耗上下文资源,设置上限可避免演示过程变成意外的费用账单。
第7课:智能体越多,出错的可能性也越大
第7课:将“更多智能体阶段”视为可度量的界面时效果最佳。在扩大范围之前,需记录一份理想案例、一个失败案例以及回滚说明。 应将此阶段视为输入与已验证输出之间的契约。为相关成果命名,明确成功标准,杜绝默许的半完成状态。 保持图结构扁平且类型化。嵌套的数据块会掩盖哪个节点修改了哪个字段,还会在中断后导致无法继续处理。 第7课:将“更多智能体阶段”视为可度量的界面时效果最佳。在扩大范围之前,需记录一份理想案例、一个失败案例以及回滚说明。 将配置置于应用程序代码之外。环境文件、密钥存储和功能标志应集中存放,以便操作员无需查看整个图结构即可进行审计。
这一思路在面试之外同样适用
对于“相同思路适用于该阶段”的情况,应在修改代码之前明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 需同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及错误处理都是产品本身的组成部分,而非后续需要补充的内容。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的配置并不等同于业务功能的完整性。
User Request
↓
Planner Agent
↓
Coding Agent
↓
Testing Agent
↓
Code Review Agent
↓
Coordinator
如何在今天实现它
在“如何构建”阶段,应在修改代码之前明确输入参数、该步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 优先选择小型、可测试的单元,而非庞大的脚本。当某个步骤失败时,故障应指向单一责任点,而非复杂的流程链。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的连接方式并不等同于业务功能的完整性。
1. 单代理基准方案
在1 A单智能体基准阶段,修改代码之前需明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与已验证输出之间的契约。为相关产物命名,定义成功检测标准,并拒绝默许的半完成状态。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的连接方式并不等同于业务上的完整性。 在1 A单智能体基准阶段,修改代码之前需明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将配置信息置于应用程序代码之外。环境文件、密钥存储以及功能开关应集中存放于一个操作人员可审计的位置,无需阅读全部内容。
aph。2. 明确的应用状态
在处理“明确的应用状态”这一阶段时,首先需列出相关规范:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 同时记录正常流程与异常恢复流程。重试机制、人工审核环节以及死信处理都是产品功能的一部分,而非后续需要补充的内容。 在耗时较高的步骤之后设置检查点。当操作员重新尝试某个后续节点时,恢复流程不应再次调用相同的大型语言模型接口。
3. 简单的协调器
在处理“3个简单协调器阶段”时,首先写下相关契约:所需的输入、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 优先选择小型、可测试的单元,而非庞大的脚本。当某个步骤失败时,故障应指向单一责任点,而非复杂的流程链。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的LLM接口。
4. 两个或三个专用代理
在处理四阶段或三阶段流程时,首先需明确合同条款:所需输入、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 将此阶段视为输入与验证后输出之间的契约。为相关成果命名,定义成功判定标准,并杜绝无声的半完成状态。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的大型语言模型。 在处理四阶段或三阶段流程时,首先需明确合同条款:所需输入、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 将配置信息置于应用程序代码之外。环境文件、密钥存储和功能开关应集中存放于一个位置,以便操作员无需查看整个流程即可进行审计。
5. 结构化输出
将“5个结构化输出阶段”视为可度量的指标时,其效果最佳。在扩大范围之前,先记录一份理想的处理结果、一个失败案例以及回滚说明。同时记录正常流程与恢复流程的文档。重试机制、人工审核环节以及死信处理都是产品本身的一部分,而非后续需要补充的内容。保持图结构的状态简洁且类型明确,嵌套的数据块会掩盖哪个节点编写了哪个字段的信息,还会在中断后导致流程无法继续。
6. 日志记录与评估
将“日志记录与评估阶段”视为可度量的界面来处理效果最佳。在扩大范围之前,先记录一份理想的运行日志、一个故障案例以及回滚说明。 优先选择小型且可测试的单元,而非庞大的脚本。当某个步骤出现故障时,故障应指向单一责任模块,而非复杂的流程链。 保持图表状态简洁且具有类型定义。嵌套的数据块会掩盖哪个节点编写了哪个字段的信息,还会在中断后导致无法继续处理。
7. 优化
将“7个优化阶段”视为可度量的对象时,其效果最佳。在扩大范围之前,需记录一份理想状态下的输出、一个故障案例以及回滚说明。 应将此阶段视为输入与已验证输出之间的契约。为相关成果命名,明确成功标准,绝不允许出现无声的、不完整的处理。 要保持图结构的扁平化与类型化。嵌套的数据块会掩盖哪个节点修改了哪个字段的信息,还会在中断后导致无法继续处理。 将“7个优化阶段”视为可度量的对象时,其效果最佳。在扩大范围之前,需记录一份理想状态下的输出、一个故障案例以及回滚说明。 应将配置信息置于应用程序代码之外。环境文件、密钥存储和功能开关应集中存放于一个位置,以便操作人员无需查看整个图结构即可进行审计。
AWS的介入点
在确定 AWS 的介入时机时,应在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 需同时记录正常流程与故障恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的组成部分,而非后续需要补充的内容。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的配置并不等同于业务功能的完整性。
Client
↓
API Gateway
↓
Lambda
↓
Amazon Bedrock
↓
Coordinator
├── Technical Agent
├── Behavioral Agent
├── Context Agent
└── Evaluation Agent
↓
Shared State
├── DynamoDB
└── S3
↓
OpenSearch
↓
Final Report
你仍在摸索的部分
在进入该阶段之前,应先明确输入参数、步骤负责人以及结束标准,然后再修改代码。操作人员应当能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。