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:搜索指定产品或公司的信息# 模拟搜索结果实际项目中接入真实搜索 APImock_data{Notion:NotionAll-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,encodingutf-8)asf:f.write(content)return报告已保存到 competitive_analysis.txt# Agent 1搜索员 defcreate_searcher_agent():创建搜索 AgentllmChatOpenAI(modelgpt-3.5-turbo,temperature0)promptChatPromptTemplate.from_messages([(system,你是一个专业的信息搜集员。你的任务是搜索指定产品的详细信息。 你需要搜集的信息包括 1. 产品名称和简介 2. 核心功能 3. 定价策略 4. 优势和劣势 5. 目标用户群体 使用搜索工具获取信息然后整理成结构化格式返回。 ),(human,{input}),(placeholder,{agent_scratchpad}),])agentcreate_tool_calling_agent(llm,[search_info],prompt)returnAgentExecutor(agentagent,tools[search_info],verboseTrue)# Agent 2分析师 defcreate_analyst_agent():创建分析 AgentllmChatOpenAI(modelgpt-3.5-turbo,temperature0)promptChatPromptTemplate.from_messages([(system,你是一个专业的产品分析师。你的任务是对比分析多个产品的优劣。 分析维度 1. 功能完整性 2. 用户体验 3. 定价合理性 4. 目标市场定位 5. 竞争优势 输出格式 - 每个维度的对比表格 - 每个产品的综合评分1-10 - 总结建议 ),(human,{input}),])# 分析师不需要工具纯推理chainprompt|llmreturnchain# Agent 3写作者 defcreate_writer_agent():创建写作 AgentllmChatOpenAI(modelgpt-3.5-turbo,temperature0.3)# 稍微调高温度让写作更有创意promptChatPromptTemplate.from_messages([(system,你是一个专业的报告撰写者。你的任务是把分析结果写成一份结构清晰、语言流畅的报告。 报告结构 1. 标题 2. 摘要100字以内 3. 背景介绍 4. 产品概览 5. 详细对比分析 6. 总结与建议 要求 - 语言专业但不晦涩 - 使用表格呈现对比数据 - 结论明确建议具体 ),(human,{input}),])chainprompt|llmreturnchain# Manager协调者 defrun_competitive_analysis(products:list):Manager 协调整个分析流程print(*60)print( 竞品分析团队启动)print(*60)# 创建各个 Agentsearchercreate_searcher_agent()analystcreate_analyst_agent()writercreate_writer_agent()# ── 第 1 步搜索信息 ──print(\n 第 1 步搜索员搜集信息...)print(-*40)product_infos[]forproductinproducts:print(f\n 搜索{product}...)resultsearcher.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_resultanalyst.invoke({input:f请对比分析以下产品\n\n{all_info}})analysisanalysis_result.contentprint(f\n✅ 分析完成)# ── 第 3 步撰写报告 ──print(\n 第 3 步写作者撰写报告...)print(-*40)report_resultwriter.invoke({input:f请根据以下分析结果撰写竞品分析报告\n\n{analysis}})reportreport_result.contentprint(f\n✅ 报告撰写完成)# ── 输出最终报告 ──print(\n*60)print( 最终报告)print(*60)print(report)returnreport# 主程序 if__name____main__:# 要分析的产品列表products[Notion,Obsidian,Roam,语雀]# 运行竞品分析reportrun_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:int3):让两个 Agent 就某个话题辩论llmChatOpenAI(modelgpt-3.5-turbo,temperature0.7)# 正方pro_promptChatPromptTemplate.from_messages([(system,你是正方辩手支持以下观点。用简洁有力的论据论证。每次发言不超过100字。),(human,{input}),])# 反方con_promptChatPromptTemplate.from_messages([(system,你是反方辩手反对以下观点。用简洁有力的论据反驳。每次发言不超过100字。),(human,{input}),])pro_chainpro_prompt|llm con_chaincon_prompt|llm# 辩论过程history[]current_topictopicforiinrange(rounds):print(f\n--- 第{i1}轮辩论 ---)# 正方发言pro_resultpro_chain.invoke({input:current_topic})print(f 正方{pro_result.content})history.append(f正方{pro_result.content})# 反方反驳con_resultcon_chain.invoke({input:f对方说{pro_result.content}\n请反驳。})print(f 反方{con_result.content})history.append(f反方{con_result.content})current_topiccon_result.content# 总结summary_promptChatPromptTemplate.from_messages([(system,你是评委根据双方辩论内容给出客观总结和最终判断。),(human,{input}),])summary_chainsummary_prompt|llm summarysummary_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 管理问什么它都能找到并回答。下一篇我们实战搭建一个完整的个人知识库系统。 关注我不迷路如果觉得有帮助点个赞 收藏 ⭐ 支持一下是我持续更新的动力