跳转到主要内容

多智能体搭建实操案例与总结

时长:约 92 分钟(5511 秒)

本节要点

  • 多智能体系统:从「独行侠」到「梦之队」,模拟现实世界的组织分工。
  • 多智能体协作的核心三要素:角色与目标、工具与消息、共享记忆。
  • 三种协作模式:顺序接力、辩论与反思、层级委派。
  • 两大主流多智能体框架:微软 AutoGen 与 CrewAI(Agent-Task-Crew)。
  • 工具调用的本质与 Function Calling 机制、ReAct 模式。
  • 工具选择策略、参数传递、结果解析、链式/并行调用。
  • 实操:用 Dify 与 CrewAI 分别搭建「旅行助手」多智能体,并测试调试。
  • 常见问题避坑与最佳实践总结。

一、多智能体系统概述

单智能体独立完成任务,结构简单但能力边界清晰;多智能体则由多个专业个体组成团队,通过分工协作突破单一个体的能力极限。

多智能体系统概述

它的本质是模拟现实世界的组织分工。如同互联网公司的项目组:产品经理 Agent 定义需求,设计师 Agent 负责体验,程序员 Agent 实现功能,测试 Agent 把控质量。单智能体像「独行侠」,适合处理标准化、流程化的单一任务;多智能体则是「梦之队」,每个成员拥有专属技能树(推理、执行、分析),通过任务拆解与结果整合,攻克非结构化的复杂难题。

二、多智能体协作的核心:角色与对话

多智能体协作不是能力的简单堆叠,而是构建一个分工明确、沟通顺畅、认知统一的「智能团队」。其核心围绕「角色定义」与「协作对话」展开。

多智能体协作的核心:角色与对话

01 角色与目标(分工基石):

  • 角色(Role):为每个智能体赋予明确身份,如「代码审查员」「数据分析师」,定义其专长与行为边界;
  • 目标(Goal):设定具体的子目标,所有智能体的子目标汇聚指向系统最终总目标,确保行动方向一致。

02 工具与消息(协作桥梁):

  • 工具(Tools):配备与角色匹配的专属工具,如分析师用 SQL、审查员用代码检测工具;
  • 结构化消息:通过标准化的「发送者—接收者—上下文—内容」格式沟通,确保信息传递准确、无歧义。

03 共享记忆(认知统一):构建公共存储区域,存放任务初始信息、中间结果与最终输出,让所有智能体对任务进度、背景知识拥有一致认知,避免信息孤岛。

三、三种协作模式

模式一:顺序接力

任务如同接力赛般在智能体间线性流转,每个智能体只专注自身环节,完成后把结果完整传递给下一个,形成 AgentA → AgentB → AgentC 的闭环链路。

协作模式:顺序接力

典型场景是代码开发全流程自动化:编码 Agent 按需求编写 Python 函数,交给审查 Agent 排查 Bug 并输出优化建议,最后由文档 Agent 基于最终代码自动生成标准化 API 文档与示例。优势是分工明确、流程标准化、结果可追溯、各环节解耦,适合步骤固定、依赖前置结果的线性任务。

模式二:辩论与反思

让多个智能体针对同一问题提出不同观点、相互质疑,同时设置「主持人」Agent 统筹辩论流程,综合各方意见消除片面性。核心价值是通过引入「反对者」Agent 主动发现初始方案的漏洞与偏见,从技术可行性、商业价值、用户体验等多维视角切入,规避单一视角的认知盲区。典型场景如事实核查(一方提出观点,另一方搜寻证据证实/证伪)和投资决策(趋势分析建议买入、风险研判提示卖出,决策 Agent 权衡后做理性选择)。

模式三:层级委派

由「经理 Agent」承担统筹角色,负责理解并拆解高层复杂任务、监控整体进度;「员工 Agent」承接细分后的专业子任务,形成「决策—执行」的分层协作体系。例如做「年度市场分析报告」,经理 Agent 把总任务拆解为销售数据收集、竞品分析、趋势整理、PPT 设计等子模块,分别委派给数据分析师、研究员、设计师等专项 Agent;员工完成后反馈成果,经理校验进度、整合输出完整交付物。

四、共享记忆与上下文管理

  • 短期记忆:单次任务执行中临时保存的信息,存储于工作流状态内,生命周期仅限当前任务运行,涵盖用户输入、中间计算结果与工具调用记录,任务结束即消失;
  • 长期记忆:可跨多次任务持久化保存,依托外部数据库或向量数据库存储,包含用户偏好、历史对话、知识库信息,智能体可通过检索机制复用;
  • 共享记忆:多智能体系统中的公共记忆空间,所有智能体均可访问与修改,核心作用是实现信息同步、成果共享、避免重复劳动。

五、主流多智能体框架

微软 AutoGen

核心是通过「可对话的智能体」协作解决复杂任务。三大核心概念:ConversableAgent 是具备对话、执行代码和调用工具能力的基础单元;GroupChat 管理多智能体的参与范围与发言规则;GroupChatManager 作为调度者按预设逻辑驱动对话流程推进。框架还支持把人类用户作为特殊 Agent 加入对话,在关键决策、信息校验或反馈环节进行人工干预。

CrewAI

CrewAI 以「角色」为核心设计理念,开发者需为每个 Agent 定义专属的 Role(角色定位)、Goal(核心目标)和 Backstory(背景故事),让大模型精准代入专家身份。

多智能体框架:CrewAI

其核心是 Agent—Task—Crew 协作闭环:Agent 是具备特定能力的专家个体,Task 是明确描述与预期输出的工作单元,Crew 是统筹管理的团队容器。内置 Sequential Execution(顺序执行)与 Hierarchical Execution(层级委派)两种模式,结构直观,便于快速组织智能体团队。

六、工具调用的本质与 Function Calling

6.1 让 LLM 发出指令

LLM 并不直接执行代码或调用 API,它的核心能力是理解与推理:分析当前输入和状态,决策「调用哪个工具」及「所需参数」,并以 JSON 等结构化格式输出意图;编排引擎(应用代码)负责解析意图、匹配工具实现并完成真实执行。经典类比:LLM 是「大脑」,只负责做出「喝水」的决策;编排引擎与工具是「神经系统 + 双手」,负责走到饮水机、接水、喝水的具体动作。

6.2 Function Calling 机制

主流模型(OpenAI 的 GPT 系列、Anthropic Claude 3、Google Gemini)均原生支持函数调用。调用 API 时除 messages 外,传入 tools 数组(工具 JSON Schema 描述)定义可用工具,并用 tool_choice 控制模型行为(auto 自主决策 / none 禁用 / 指定工具名)。若模型判定需调用工具,返回的 message 包含 tool_calls 数组,每个元素对应一次调用,含唯一 id、function.name 和 function.arguments。

tool_calls 是数组结构,意味着 LLM 可在单次响应中发起多个工具调用,实现并行执行。开发者的闭环是:解析调用指令 → 用 function.name 在注册表匹配函数 → json.loads 解析 arguments → 执行工具 → 把结果封装为带原调用 id 的 tool 消息回传给 LLM,让模型基于真实数据继续生成。

6.3 ReAct 模式

ReAct(Reasoning and Acting)是让大模型交替「思考」与「行动」解决问题的核心模式:先分析状态生成思考(Thought),再执行工具调用(Action),最后获取执行结果作为新输入继续循环(Observation),直至达成目标。它不依赖模型原生 Function Calling 能力,可通过精心设计的提示词引导模型输出结构化「思考—动作—参数」格式,再用正则表达式解析执行,从而在各类型 LLM 上兼容适配。

七、工具选择、参数与调用编排

  • 工具选择策略:一是「LLM 自主选择」,把所有工具 Schema 传给 LLM 自主决策,灵活但 Token 消耗大、易选错;二是「手动路由」,先由轻量 LLM/分类器做意图分类,只把强相关工具的 Schema 传给主 LLM,省 Token、更精准,但灵活性与边缘场景受限。
  • 参数传递:参数来源有用户输入提取、上游节点输出、预设常量(如 API Key)、LLM 动态生成四类;模板变量用 {{state.key}} 从全局状态取值;LLM 输出的字符串参数在调工具前需转换为整数、浮点、布尔等期望类型。
  • 参数绑定与解析:显式绑定是拖拽连线式的确定性传递,适合参数结构固定的标准化流程;隐式解析是 LLM 从非结构化文本中智能提取,灵活但有成本与不确定性。
  • 链式与并行调用:链式调用串行执行、前一个工具输出作为后一个输入(如 search_flight → get_flight_status → send_sms);并行调用同时发起多个独立请求(如同时查天气、酒店、景点)。复杂流程常是「链式取前置信息 → 并行采集 → 链式整合」的组合。

八、实操:搭建「旅行助手」智能体

8.1 项目需求与工具集设计

实操:搭建旅行助手智能体

用户只需输入出发地、目的地和出行日期,智能体自动完成多维信息聚合:检索往返航班时刻与价格、获取目的地行程期间的天气、筛选核心商圈或景区周边的热门酒店,最后整合为逻辑清晰的旅行计划。

关键工具集(模块化接口):search_flights(departure, arrival, date) 查航班、get_weather(city, date) 查天气、search_hotels(city, checkin_date, checkout_date) 查酒店,核心 LLM 节点通过 generate_itinerary(flights, weather, hotels) 把多源数据转化为个性化行程。

8.2 Dify 工作流编排

编排逻辑分四步:

  1. 起点接收与意图提取:Start Node 接收请求,LLM 节点执行意图识别,提取出发地、目的地、出行日期并存入状态;
  2. 并行网关与工具调用:把流程拆成机票搜索、天气查询、酒店预订三个并行分支,同步执行;
  3. 结果汇聚与行程生成:汇聚网关等待所有分支返回后,再次调用 LLM 整合数据,生成结构化旅行计划;
  4. 测试与调试:输入测试用例(如「规划下周三从北京到上海的旅行」),检查节点日志(确认 departure=北京、date=2026-06-10 等),验收最终产物,针对意图识别失败/工具异常/文案不佳分别修复提示词或参数绑定。

8.3 CrewAI 多智能体版

用 CrewAI 把旅行助手模拟成一个小团队:目的地研究员查景点、美食、天气、避坑提示;行程规划师按天数做每日行程安排;预算核算师核算交通、住宿、餐饮总预算并给省钱建议。

from crewai import Agent, Task, Crew, Process

researcher = Agent(role="目的地信息研究员", goal="搜集目标城市核心景点、美食、注意事项", backstory="资深旅游调研人员", verbose=True)
planner = Agent(role="行程规划师", goal="结合素材设计合理每日行程", backstory="多年旅游方案设计经验", verbose=True)
budget_analyst = Agent(role="预算核算师", goal="估算总花费并给省钱建议", backstory="熟悉各地消费水平", verbose=True)

travel_crew = Crew(
    agents=[researcher, planner, budget_analyst],
    tasks=[task_research, task_plan, task_budget],
    process=Process.sequential,
)
result = travel_crew.kickoff()

示例输入「西安 3 天 2 人、预算 3999–5998 元」,团队按顺序执行:研究员输出景点/美食/避坑素材 → 规划师做每日上午/下午/晚上行程 → 核算师输出预算明细表格(住宿、门票、交通、餐饮)与省钱建议,最终 kickoff() 返回完整 Markdown 旅行方案。

九、常见问题与避坑指南

  • 工具描述模糊:LLM 频繁调错工具或不调工具——重写描述,明确适用与不适用场景;
  • 参数不匹配:生成参数的数量或类型与工具定义冲突——精准 Schema 描述 + 实现层严格参数校验;
  • 无限循环陷阱:「思考—行动」反复无进展——设置最大迭代次数阈值 + 明确的目标达成退出条件;
  • 敏感信息泄露:工具描述或提示词里硬编码 API Key、内部 URL——用环境变量、配置文件集中管理;
  • 工具调用超时:API 请求耗时过长阻塞流程——设置合理超时 + 超时异常捕获与降级处理。

十、最佳实践总结

  1. 规范命名与描述:采用「动词 + 名词」命名(如 get_weather、search_flights),这是提升 LLM 理解与调用准确率的核心前提;
  2. 工具独立可测试:每个工具是独立功能单元,编写完善单元测试覆盖各种输入场景;
  3. 完善日志与监控:记录调用输入参数与返回结果,监控调用频率、成功率与响应时间;
  4. 坚持逐步迭代:从核心基础功能切入,小步快跑扩展工具集,每次迭代后充分回归测试;
  5. 严格防御性编程:不盲目信任 LLM 输出,对所有传入参数严格校验,全面捕获处理异常。

小结

本课是全课程的收官:先讲清多智能体「为什么」——用角色分工突破单智能体能力边界;再讲「怎么做」——角色与目标、工具与消息、共享记忆三要素,以及顺序接力、辩论反思、层级委派三种协作模式;然后落到「用什么」——AutoGen 与 CrewAI 两大框架,以及工具调用的底层机制 Function Calling 与 ReAct;最后通过 Dify 和 CrewAI 两套「旅行助手」实操,把工具选择、参数传递、并行编排、测试调试串成完整闭环,并以避坑清单和最佳实践收尾。

自测题

  1. 单智能体与多智能体最本质的区别是什么?多智能体协作的核心三要素分别解决什么问题?
  2. 顺序接力、辩论与反思、层级委派三种协作模式各适合什么场景?请各举一例。
  3. 在 Function Calling 中,tools、tool_choice、tool_calls 分别起什么作用?为什么说 tool_calls 是数组意味着可以并行调用?
  4. 工具选择有两种策略:LLM 自主选择与手动路由,它们的优缺点各是什么?
  5. 搭建「旅行助手」时,Dify 工作流编排的四步是什么?CrewAI 版本用哪三个 Agent 分工?

答案提示:1. 单智能体独立完成任务、能力边界清晰,多智能体通过分工协作突破极限;角色与目标定分工、工具与消息做沟通、共享记忆统一认知。2. 顺序接力=线性依赖流程(编码→审查→文档);辩论反思=需要多视角消除偏见(事实核查/投资决策);层级委派=复杂任务拆解(年度市场分析报告)。3. tools 定义可用工具、tool_choice 控制调用行为、tool_calls 承载返回的调用指令;数组可一次含多次调用。4. 自主选择灵活但费 Token、易选错;手动路由省 Token、精准但灵活性受限、需维护意图规则。5. 起点接收意图提取→并行网关工具调用→汇聚生成行程→测试调试;目的地研究员、行程规划师、预算核算师。