news 2026/9/30 23:40:31

08-多Agent协作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
08-多Agent协作

多 Agent 协作:让 AI 自己组队干活

系列:AI Agent 从入门到实战 | 第 8 篇

一个 Agent 能力有限,就像一个人再厉害也干不了所有事。那如果让多个 Agent 组成团队,分工协作呢?这一篇我们探索 Multi-Agent 系统,看看 Agent 是怎么"组队"完成复杂任务的。


一、为什么需要多 Agent

单个 Agent 的局限:

单个 Agent 处理一个复杂任务: 用户:"帮我写一份竞品分析报告" Agent 的困境: - 要搜索 10 个竞品的信息 → 工具调用次数多 - 要分析每个竞品的优劣 → 需要不同角度的分析能力 - 要写成结构化报告 → 需要写作能力 - 要做数据可视化 → 需要代码能力 一个 Agent 干所有事 → 容易混乱、效率低、质量差

多 Agent 的思路:

把任务拆给不同的专业 Agent: 🔍 搜索 Agent:专门负责搜集信息 📊 分析 Agent:专门负责数据分析 ✍️ 写作 Agent:专门负责撰写报告 🔍 审核 Agent:专门负责检查质量 各司其职 → 效率高、质量好

二、多 Agent 的三种架构

架构一:层级模式(Manager-Worker)

┌──────────┐ │ Manager │ ← 负责分配任务、协调进度 │ Agent │ └────┬─────┘ / | \ ▼ ▼ ▼ ┌────┐ ┌────┐ ┌────┐ │Worker│ │Worker│ │Worker│ ← 各自执行分配到的任务 │ A │ │ B │ │ C │ └────┘ └────┘ └────┘
  • Manager 负责拆解任务、分配给 Worker、汇总结果
  • Worker 专注执行具体任务
  • 适合:任务可以明确拆分的场景

架构二:对等模式(Peer-to-Peer)

┌────┐ ┌────┐ ┌────┐ │Agent│◄─►│Agent│◄─►│Agent│ ← 平等协作,互相传递信息 │ A │ │ B │ │ C │ └────┘ └────┘ └────┘
  • 没有管理者,Agent 之间平等通信
  • 适合:需要多个视角讨论的场景

架构三:流水线模式(Pipeline)

┌────┐ ┌────┐ ┌────┐ ┌────┐ │Agent│──►│Agent│──►│Agent│──►│Agent│ ← 串行处理 │ A │ │ B │ │ C │ │ D │ └────┘ └────┘ └────┘ └────┘
  • 每个 Agent 处理完后传给下一个
  • 适合:有明确先后顺序的任务

三、实战:用 LangChain 搭建多 Agent 团队

我们来搭建一个竞品分析团队:

Agent角色职责
🔍 搜索员信息搜集搜索竞品的相关信息
📊 分析师分析对比对比各竞品的优劣
✍️ 写作者撰写报告把分析结果写成报告

完整代码

""" 多 Agent 协作实战:竞品分析团队 基于 LangChain 实现 Manager-Worker 模式 """fromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.toolsimporttoolfromlangchain.agentsimportcreate_tool_calling_agent,AgentExecutor# ============ 定义共享工具 ============@tooldefsearch_info(query:str)->str:"""搜索指定产品或公司的信息"""# 模拟搜索结果(实际项目中接入真实搜索 API)mock_data={"Notion":"Notion:All-in-one 工作空间,支持文档、数据库、看板、wiki。定价:免费版可用,Plus $8/月。优势:功能全面、模板丰富。劣势:学习曲线较陡。","Obsidian":"Obsidian:本地优先的笔记应用,支持双向链接、知识图谱。定价:免费个人使用,Sync $4/月。优势:本地存储、插件生态强。劣势:协作能力弱。","Roam":"Roam Research:大纲式笔记工具,支持块引用。定价:$15/月。优势:强大的知识网络。劣势:价格贵、界面老旧。","语雀":"语雀:蚂蚁集团出品的知识库工具。定价:免费版可用,会员 ¥99/年。优势:中文友好、团队协作好。劣势:国际化不足。",}forkey,valueinmock_data.items():ifkey.lower()inquery.lower():returnvaluereturnf"搜索结果:关于 '{query}' 的信息较少,建议换个关键词。"@tooldefsave_report(content:str)->str:"""将报告内容保存到文件"""withopen("competitive_analysis.txt","w",encoding="utf-8")asf:f.write(content)return"报告已保存到 competitive_analysis.txt"# ============ Agent 1:搜索员 ============defcreate_searcher_agent():"""创建搜索 Agent"""llm=ChatOpenAI(model="gpt-3.5-turbo",temperature=0)prompt=ChatPromptTemplate.from_messages([("system","""你是一个专业的信息搜集员。你的任务是搜索指定产品的详细信息。 你需要搜集的信息包括: 1. 产品名称和简介 2. 核心功能 3. 定价策略 4. 优势和劣势 5. 目标用户群体 使用搜索工具获取信息,然后整理成结构化格式返回。 """),("human","{input}"),("placeholder","{agent_scratchpad}"),])agent=create_tool_calling_agent(llm,[search_info],prompt)returnAgentExecutor(agent=agent,tools=[search_info],verbose=True)# ============ Agent 2:分析师 ============defcreate_analyst_agent():"""创建分析 Agent"""llm=ChatOpenAI(model="gpt-3.5-turbo",temperature=0)prompt=ChatPromptTemplate.from_messages([("system","""你是一个专业的产品分析师。你的任务是对比分析多个产品的优劣。 分析维度: 1. 功能完整性 2. 用户体验 3. 定价合理性 4. 目标市场定位 5. 竞争优势 输出格式: - 每个维度的对比表格 - 每个产品的综合评分(1-10) - 总结建议 """),("human","{input}"),])# 分析师不需要工具,纯推理chain=prompt|llmreturnchain# ============ Agent 3:写作者 ============defcreate_writer_agent():"""创建写作 Agent"""llm=ChatOpenAI(model="gpt-3.5-turbo",temperature=0.3)# 稍微调高温度,让写作更有创意prompt=ChatPromptTemplate.from_messages([("system","""你是一个专业的报告撰写者。你的任务是把分析结果写成一份结构清晰、语言流畅的报告。 报告结构: 1. 标题 2. 摘要(100字以内) 3. 背景介绍 4. 产品概览 5. 详细对比分析 6. 总结与建议 要求: - 语言专业但不晦涩 - 使用表格呈现对比数据 - 结论明确,建议具体 """),("human","{input}"),])chain=prompt|llmreturnchain# ============ Manager:协调者 ============defrun_competitive_analysis(products:list):"""Manager 协调整个分析流程"""print("="*60)print("🚀 竞品分析团队启动")print("="*60)# 创建各个 Agentsearcher=create_searcher_agent()analyst=create_analyst_agent()writer=create_writer_agent()# ── 第 1 步:搜索信息 ──print("\n📋 第 1 步:搜索员搜集信息...")print("-"*40)product_infos=[]forproductinproducts:print(f"\n🔍 搜索{product}...")result=searcher.invoke({"input":f"搜索{product}的详细信息"})product_infos.append(result["output"])all_info="\n\n".join(product_infos)print(f"\n✅ 信息搜集完成,共搜集了{len(products)}个产品")# ── 第 2 步:分析对比 ──print("\n📋 第 2 步:分析师进行对比...")print("-"*40)analysis_result=analyst.invoke({"input":f"请对比分析以下产品:\n\n{all_info}"})analysis=analysis_result.contentprint(f"\n✅ 分析完成")# ── 第 3 步:撰写报告 ──print("\n📋 第 3 步:写作者撰写报告...")print("-"*40)report_result=writer.invoke({"input":f"请根据以下分析结果撰写竞品分析报告:\n\n{analysis}"})report=report_result.contentprint(f"\n✅ 报告撰写完成")# ── 输出最终报告 ──print("\n"+"="*60)print("📄 最终报告")print("="*60)print(report)returnreport# ============ 主程序 ============if__name__=="__main__":# 要分析的产品列表products=["Notion","Obsidian","Roam","语雀"]# 运行竞品分析report=run_competitive_analysis(products)

四、运行效果

python multi_agent_team.py

输出:

============================================================ 🚀 竞品分析团队启动 ============================================================ 📋 第 1 步:搜索员搜集信息... ---------------------------------------- 🔍 搜索 Notion... > 搜索到 Notion 的详细信息... 🔍 搜索 Obsidian... > 搜索到 Obsidian 的详细信息... 🔍 搜索 Roam... > 搜索到 Roam 的详细信息... 🔍 搜索 语雀... > 搜索到 语雀 的详细信息... ✅ 信息搜集完成,共搜集了 4 个产品 📋 第 2 步:分析师进行对比... ---------------------------------------- > 从功能完整性、用户体验、定价等维度进行对比分析... ✅ 分析完成 📋 第 3 步:写作者撰写报告... ---------------------------------------- > 整理分析结果,撰写结构化报告... ✅ 报告撰写完成 ============================================================ 📄 最终报告 ============================================================ # 笔记工具竞品分析报告 ## 摘要 本报告对 Notion、Obsidian、Roam Research、语雀四款主流笔记工具进行了全面对比分析... ## 产品概览 | 产品 | 定价 | 核心特色 | 目标用户 | |------|------|---------|---------| | Notion | 免费/$8/月 | All-in-one 工作空间 | 团队协作 | | Obsidian | 免费/$4/月 | 本地优先、知识图谱 | 个人知识管理 | | Roam | $15/月 | 大纲式、块引用 | 研究者 | | 语雀 | 免费/¥99/年 | 中文友好 | 中文团队 | ## 详细对比分析 ...

五、关键设计思路

1. 职责单一

每个 Agent 只负责一件事:

搜索员:只管搜信息,不管分析 分析师:只管分析,不管搜也不管写 写作者:只管写报告,不管其他

好处:每个 Agent 的提示词更聚焦,输出质量更高。

2. 信息传递

Agent 之间通过文本传递信息:

搜索员输出 → 原始信息文本 → 分析师输入 分析师输出 → 分析结论文本 → 写作者输入

简单但有效。更复杂的方案可以用共享内存或消息队列。

3. 串行执行

这个例子是流水线模式:搜索 → 分析 → 写作,有先后顺序。

如果任务可以并行,可以让多个搜索 Agent 同时搜索不同产品,效率更高。


六、进阶:让 Agent 之间对话

除了串行传递,还可以让 Agent 之间互相讨论:

defdebate(topic:str,rounds:int=3):"""让两个 Agent 就某个话题辩论"""llm=ChatOpenAI(model="gpt-3.5-turbo",temperature=0.7)# 正方pro_prompt=ChatPromptTemplate.from_messages([("system","你是正方辩手,支持以下观点。用简洁有力的论据论证。每次发言不超过100字。"),("human","{input}"),])# 反方con_prompt=ChatPromptTemplate.from_messages([("system","你是反方辩手,反对以下观点。用简洁有力的论据反驳。每次发言不超过100字。"),("human","{input}"),])pro_chain=pro_prompt|llm con_chain=con_prompt|llm# 辩论过程history=[]current_topic=topicforiinrange(rounds):print(f"\n--- 第{i+1}轮辩论 ---")# 正方发言pro_result=pro_chain.invoke({"input":current_topic})print(f"🔴 正方:{pro_result.content}")history.append(f"正方:{pro_result.content}")# 反方反驳con_result=con_chain.invoke({"input":f"对方说:{pro_result.content}\n请反驳。"})print(f"🔵 反方:{con_result.content}")history.append(f"反方:{con_result.content}")current_topic=con_result.content# 总结summary_prompt=ChatPromptTemplate.from_messages([("system","你是评委,根据双方辩论内容,给出客观总结和最终判断。"),("human","{input}"),])summary_chain=summary_prompt|llm summary=summary_chain.invoke({"input":"\n".join(history)})print(f"\n📋 评委总结:{summary.content}")# 测试debate("Notion 和 Obsidian 哪个更适合个人知识管理?")

七、总结

概念说明
为什么需要多 Agent单个 Agent 处理复杂任务效率低、质量差
三种架构层级(Manager-Worker)、对等(Peer-to-Peer)、流水线(Pipeline)
核心设计原则职责单一、信息通过文本传递、按需选择串行或并行
进阶玩法Agent 之间辩论、投票、互相审核

多 Agent 是 Agent 技术从"玩具"走向"生产"的关键一步。


下一篇预告

📖第 9 篇:实战:用 Agent 搭建一个个人知识库

把你所有的笔记、文档、收藏都交给 Agent 管理,问什么它都能找到并回答。下一篇我们实战搭建一个完整的个人知识库系统。

👉 关注我,不迷路!


如果觉得有帮助,点个赞 👍 收藏 ⭐ 支持一下,是我持续更新的动力!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 23:40:26

具体芯片的 HSR/PRP 硬件实现

信息收集完毕。下面为你系统梳理支持 HSR/PRP 硬件加速的具体芯片方案及实现架构。核心结论HSR/PRP 的硬件实现分为三大技术路线:① SoC 内置可编程引擎(PRU/专用MAC)运行冗余固件;② 工业交换机芯片内置 HSR/PRP 硬件引擎&#x…

作者头像 李华
网站建设 2026/9/30 23:37:23

ARM工业计算机实战:多路视觉、边缘AI推理与毫秒级控制一体化方案

BL450这台机器,第一次接触是在一个多相机质检项目里。产线上四个摄像头同时拍零件,拍完要立刻跑一个缺陷检测模型,检测结果又要马上送给PLC做剔除——这个链路过去怎么说也得一台 x86 工控机加一块独立显卡,机箱大、功耗高、还得专…

作者头像 李华
网站建设 2026/9/30 23:26:00

STM32按键输入全解析:GPIO模式、上下拉、消抖与中断处理

把按键接到 STM32 的引脚上,这是很多人入门时做的第一件“带交互”的事。但大多数时候,代码写在 HAL_GPIO_ReadPin 那一行之后,就开始出问题:要么一直读到 1,要么一直读到 0,要么上电之后随机跳&#xff0c…

作者头像 李华
网站建设 2026/9/30 23:20:00

厚不锈钢水切割的工程参数解读:压力、精度与锥度

1. 压力:决定"能不能稳稳穿透"磨料水射流的切割能力来自高速磨粒的冲蚀动能,而冲蚀动能由水压驱动。设备最高压力 420MPa 是厚料的底气——压力不足时,射流在厚板上的穿透力衰减快、切割速度和不稳定性都会暴露。压力是厚板参数里最…

作者头像 李华