Skip to Content

10e - 多 Agent 实战案例

本文是《AI Agent 实战手册》第 10 章第 5 节。 上一节:10d-Agent通信模式 | 下一节:11a-RAG概念与架构

概述

理论和框架对比固然重要,但真正理解多 Agent 协作的精髓,还是要靠动手实践。本节提供三个完整的多 Agent 实战案例——分别使用 LangGraph(状态图方法)、CrewAI(角色制方法)和 OpenAI Agents SDK(交接制方法)——每个案例都包含场景描述、架构设计、完整可运行代码、执行结果分析和经验总结。通过对比三种截然不同的编排范式,你可以直观感受它们各自的优势和适用场景。


1. 多 Agent 实战框架工具推荐

工具推荐

工具用途价格适用场景
LangGraph基于状态图的多 Agent 编排免费(开源,MIT 协议)复杂工作流、需要精细控制流程的场景
CrewAI基于角色的多 Agent 协作免费(开源,MIT 协议);Enterprise 版联系销售团队协作模拟、角色分工明确的场景
OpenAI Agents SDK轻量级 Agent 交接编排免费(开源,MIT 协议);需 OpenAI API 费用快速原型、OpenAI 生态项目
LangSmithAgent 运行追踪与调试免费层 5K traces/月;Plus $39/月LangGraph 项目的可观测性
OpenAI APILLM 推理服务GPT-4o: $2.50/1M 输入 token,$10/1M 输出 token所有框架的底层模型
Anthropic APILLM 推理服务Claude Sonnet 4: $3/1M 输入,$15/1M 输出LangGraph/CrewAI 的替代模型
TavilyAI 搜索 API免费层 1000 次/月;Pro $50/月Agent 联网搜索工具

2. 实战案例一:LangGraph — 智能内容生产管线

场景描述

构建一个自动化内容生产系统:给定一个主题,系统自动完成「调研 → 撰写 → 审校 → 定稿」四个阶段。每个阶段由专门的 Agent 节点负责,通过状态图控制流程,支持审校不通过时自动回退重写。

架构图示

┌──────────────────────────────────────┐ │ ContentState(共享状态) │ │ topic, research, draft, review, │ │ final_content, revision_count │ └──────────────────────────────────────┘ ┌────────────────┼────────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ 调研节点 │──▶│ 撰写节点 │──▶│ 审校节点 │ │Researcher│ │ Writer │ │ Reviewer │ └──────────┘ └──────────┘ └──────────┘ ▲ │ │ ┌───────────┤ │ ▼ ▼ [不通过] [通过] 回退重写 ┌──────────┐ │ 定稿节点 │ │Publisher │ └──────────┘ END

完整代码

""" LangGraph 多 Agent 内容生产管线 要求:pip install langgraph langchain-openai """ import operator from typing import Annotated, TypedDict from langgraph.graph import StateGraph, END from langchain_openai import ChatOpenAI # ============================================================ # 1. 定义共享状态 # ============================================================ class ContentState(TypedDict): """内容生产管线的共享状态""" topic: str # 输入主题 research: str # 调研结果 draft: str # 草稿内容 review_feedback: str # 审校反馈 review_passed: bool # 审校是否通过 final_content: str # 最终定稿 revision_count: Annotated[int, operator.add] # 修订次数(自动累加) # ============================================================ # 2. 初始化 LLM # ============================================================ llm = ChatOpenAI(model="gpt-4o", temperature=0.7) # ============================================================ # 3. 定义各 Agent 节点函数 # ============================================================ def researcher_node(state: ContentState) -> dict: """调研节点:根据主题收集背景信息和关键要点""" topic = state["topic"] prompt = f"""你是一位资深调研分析师。请针对以下主题进行深度调研, 输出结构化的调研报告,包含: 1. 主题背景概述 2. 核心要点(至少 5 个) 3. 最新趋势和数据 4. 潜在的争议或不同观点 主题:{topic} """ response = llm.invoke(prompt) return {"research": response.content} def writer_node(state: ContentState) -> dict: """撰写节点:基于调研结果撰写文章草稿""" topic = state["topic"] research = state["research"] feedback = state.get("review_feedback", "") revision_hint = "" if feedback: revision_hint = f"\n\n上一版审校反馈(请据此修改):\n{feedback}" prompt = f"""你是一位专业内容撰稿人。请基于以下调研资料撰写一篇高质量文章。 要求: - 标题吸引人 - 结构清晰(引言、正文分段、结论) - 语言流畅,适合技术博客读者 - 字数 800-1200 字 {revision_hint} 主题:{topic} 调研资料:{research} """ response = llm.invoke(prompt) return {"draft": response.content, "revision_count": 1} def reviewer_node(state: ContentState) -> dict: """审校节点:审查草稿质量,决定通过或打回""" draft = state["draft"] revision_count = state.get("revision_count", 0) prompt = f"""你是一位严格的内容审校编辑。请审查以下文章草稿, 从以下维度评分(1-10): 1. 内容准确性 2. 结构逻辑性 3. 语言表达质量 4. 读者价值 如果所有维度均 ≥ 7 分,输出 "APPROVED"。 否则输出 "REVISION_NEEDED" 并给出具体修改建议。 当前修订轮次:{revision_count}(最多允许 3 轮) 文章草稿: {draft} """ response = llm.invoke(prompt) content = response.content passed = "APPROVED" in content or revision_count >= 3 return { "review_feedback": content, "review_passed": passed, } def publisher_node(state: ContentState) -> dict: """定稿节点:最终润色并输出成品""" draft = state["draft"] prompt = f"""你是一位出版编辑。请对以下已审核通过的文章做最终润色: - 检查错别字和语法 - 优化段落过渡 - 添加适当的 emoji 和格式标记 - 确保开头和结尾有力 文章: {draft} """ response = llm.invoke(prompt) return {"final_content": response.content} # ============================================================ # 4. 定义条件路由函数 # ============================================================ def should_revise(state: ContentState) -> str: """根据审校结果决定下一步:通过则定稿,否则回退重写""" if state.get("review_passed", False): return "publish" return "revise" # ============================================================ # 5. 构建状态图 # ============================================================ workflow = StateGraph(ContentState) # 添加节点 workflow.add_node("researcher", researcher_node) workflow.add_node("writer", writer_node) workflow.add_node("reviewer", reviewer_node) workflow.add_node("publisher", publisher_node) # 添加边:定义流程 workflow.set_entry_point("researcher") workflow.add_edge("researcher", "writer") workflow.add_edge("writer", "reviewer") # 条件边:审校通过 → 定稿,不通过 → 回退重写 workflow.add_conditional_edges( "reviewer", should_revise, { "publish": "publisher", "revise": "writer", # 回退到撰写节点 }, ) workflow.add_edge("publisher", END) # 编译图 app = workflow.compile() # ============================================================ # 6. 执行管线 # ============================================================ if __name__ == "__main__": result = app.invoke({ "topic": "2025 年 AI Agent 框架生态全景分析", "research": "", "draft": "", "review_feedback": "", "review_passed": False, "final_content": "", "revision_count": 0, }) print("=" * 60) print("📝 最终文章:") print("=" * 60) print(result["final_content"]) print(f"\n📊 总修订轮次:{result['revision_count']}")

执行结果分析

典型执行流程如下:

[Researcher] → 输出 2000 字调研报告,包含 6 个核心要点 [Writer] → 基于调研撰写 1000 字初稿 [Reviewer] → 评分:准确性 8、逻辑性 6、表达 7、价值 7 → REVISION_NEEDED [Writer] → 根据反馈修改,加强逻辑结构(第 2 轮) [Reviewer] → 评分:准确性 8、逻辑性 8、表达 8、价值 8 → APPROVED [Publisher] → 最终润色输出

关键观察:

  • 状态图的条件边实现了「审校不通过 → 自动回退」的循环逻辑
  • revision_count 使用 Annotated[int, operator.add] 实现自动累加,避免状态覆盖
  • 最多 3 轮修订的硬限制防止了无限循环
  • 每个节点只关注自己的职责,通过共享状态传递信息

经验总结

维度经验
状态设计使用 TypedDict 明确定义所有字段,Annotated 配合 reducer 处理累加型字段
条件路由add_conditional_edges 是 LangGraph 的核心能力,用于实现分支和循环
防止死循环必须设置最大迭代次数(本例为 3 轮),否则 Agent 可能永远不满意
调试技巧配合 LangSmith 可以可视化每个节点的输入输出和执行时间
适用场景流程有明确阶段、需要条件分支和回退的复杂工作流

3. 实战案例二:CrewAI — 技术博客自动化团队

场景描述

使用 CrewAI 构建一个「技术博客生产团队」,模拟真实编辑部的角色分工:SEO 策略师负责关键词研究,技术作者负责撰写,编辑负责审校润色。每个 Agent 有独立的角色定义、目标和背景故事,通过 Crew 编排协作完成从选题到成稿的全流程。

架构图示

┌─────────────────────────────────────────────────────┐ │ Crew(团队) │ │ process=sequential │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ SEO 策略师 │ │ 技术作者 │ │ 编辑 │ │ │ │ │ │ │ │ │ │ │ │ role: │ │ role: │ │ role: │ │ │ │ SEO策略师 │ │ 高级技术作者 │ │ 内容编辑 │ │ │ │ │ │ │ │ │ │ │ │ goal: │ │ goal: │ │ goal: │ │ │ │ 找到最佳 │ │ 撰写高质量 │ │ 确保文章 │ │ │ │ 关键词策略 │ │ 技术文章 │ │ 完美无瑕 │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Task 1: │ │ Task 2: │ │ Task 3: │ │ │ │ 关键词研究 │──▶│ 文章撰写 │──▶│ 编辑润色 │ │ │ │ & SEO 策略 │ │ │ │ & SEO 优化 │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ └─────────────────────────────────────────────────────┘

完整代码

""" CrewAI 技术博客自动化团队 要求:pip install crewai crewai-tools """ from crewai import Agent, Task, Crew, Process # ============================================================ # 1. 定义 Agent(角色) # ============================================================ seo_strategist = Agent( role="SEO 策略师", goal="为给定主题找到最佳关键词策略和内容角度,最大化搜索引擎可见性", backstory="""你是一位拥有 8 年经验的 SEO 专家,精通技术内容的搜索优化。 你深谙 Google 算法更新趋势,擅长发现长尾关键词机会。 你的策略曾帮助多个技术博客实现月均 300% 的有机流量增长。""", verbose=True, allow_delegation=False, llm="gpt-4o", ) tech_writer = Agent( role="高级技术作者", goal="基于 SEO 策略和调研资料,撰写深度、准确、易读的技术博客文章", backstory="""你是一位全栈开发者转型的技术作者,拥有 5 年技术写作经验。 你擅长将复杂的技术概念用通俗易懂的语言解释清楚, 同时保持技术深度。你的文章风格兼具专业性和可读性。""", verbose=True, allow_delegation=False, llm="gpt-4o", ) editor = Agent( role="内容编辑", goal="确保文章在语言质量、技术准确性和 SEO 优化三个维度都达到发布标准", backstory="""你是一位资深内容编辑,曾在多家技术媒体担任主编。 你对文字有极高的要求,同时理解 SEO 的重要性。 你的审校标准:零错别字、逻辑通顺、SEO 友好、读者价值最大化。""", verbose=True, allow_delegation=False, llm="gpt-4o", ) # ============================================================ # 2. 定义 Task(任务) # ============================================================ keyword_research_task = Task( description="""针对主题「{topic}」进行全面的 SEO 关键词研究: 1. 识别 1 个主关键词和 5-8 个长尾关键词 2. 分析每个关键词的搜索意图(信息型/导航型/交易型) 3. 评估竞争难度(低/中/高) 4. 建议文章标题(3 个备选) 5. 建议文章大纲结构 6. 推荐内链和外链策略 输出格式:结构化的 SEO 策略报告""", expected_output="包含关键词列表、搜索意图分析、标题建议和大纲的 SEO 策略报告", agent=seo_strategist, ) writing_task = Task( description="""基于 SEO 策略师提供的关键词策略和大纲,撰写一篇完整的技术博客文章: 要求: 1. 字数 1500-2500 字 2. 自然融入主关键词(密度 1-2%)和长尾关键词 3. 包含引言、至少 3 个主体段落、结论 4. 每个段落有清晰的小标题(H2/H3) 5. 包含至少 1 个代码示例或技术图示 6. 包含至少 2 个实际应用场景 7. 语言风格:专业但不晦涩,适合中高级开发者 主题:「{topic}」""", expected_output="一篇完整的、SEO 优化的技术博客文章(Markdown 格式)", agent=tech_writer, context=[keyword_research_task], # 依赖 SEO 策略任务的输出 ) editing_task = Task( description="""对技术作者提交的文章进行全面编辑和优化: 审校维度: 1. 语言质量:修正错别字、语法错误、表达不当 2. 技术准确性:验证技术描述和代码示例的正确性 3. SEO 优化:检查关键词分布、meta description、标题标签 4. 结构优化:确保逻辑流畅、段落过渡自然 5. 读者体验:添加要点总结、行动建议 输出:最终可发布版本的文章 + 编辑修改说明""", expected_output="最终润色完成的文章(Markdown 格式)和编辑修改说明", agent=editor, context=[keyword_research_task, writing_task], # 依赖前两个任务 ) # ============================================================ # 3. 组建 Crew 并执行 # ============================================================ blog_crew = Crew( agents=[seo_strategist, tech_writer, editor], tasks=[keyword_research_task, writing_task, editing_task], process=Process.sequential, # 顺序执行 verbose=True, ) if __name__ == "__main__": result = blog_crew.kickoff( inputs={"topic": "如何用 LangGraph 构建生产级多 Agent 系统"} ) print("=" * 60) print("📝 最终文章:") print("=" * 60) print(result.raw) print(f"\n📊 Token 使用统计:{result.token_usage}")

执行结果分析

典型执行日志:

[SEO 策略师] 开始执行:关键词研究 & SEO 策略 → 主关键词:"LangGraph 多 Agent" → 长尾关键词:"LangGraph 生产部署"、"多 Agent 架构设计"... → 推荐标题:"从零到生产:用 LangGraph 构建多 Agent 系统完全指南" → 输出 SEO 策略报告(约 800 字) [高级技术作者] 开始执行:文章撰写 → 接收 SEO 策略报告作为上下文 → 输出 2000 字技术文章(含代码示例) [内容编辑] 开始执行:编辑润色 & SEO 优化 → 接收 SEO 策略 + 文章草稿作为上下文 → 修正 3 处表达问题,优化 2 处 SEO 关键词分布 → 输出最终版本 + 修改说明

Token 使用统计(参考值):

  • SEO 策略师:~2,000 输入 + ~800 输出
  • 技术作者:~3,500 输入 + ~2,000 输出
  • 编辑:~6,000 输入 + ~2,500 输出
  • 总计:~16,800 tokens ≈ $0.07(GPT-4o 价格)

经验总结

维度经验
角色设计backstory 越具体,Agent 输出质量越高;避免泛泛的角色描述
任务依赖context 参数实现任务间的信息传递,后续任务自动获取前置任务的输出
流程选择Process.sequential 适合有明确先后顺序的场景;Process.hierarchical 适合需要动态分配的场景
成本控制编辑任务的输入 token 最多(需要读取所有前置输出),注意控制上下文长度
适用场景角色分工明确、类似真实团队协作的场景(内容生产、调研分析、项目管理)

4. 实战案例三:OpenAI Agents SDK — 智能客服路由系统

场景描述

构建一个智能客服系统:用户提问后,由分诊 Agent 判断问题类型,自动交接(handoff)给对应的专业 Agent 处理——技术支持、账单咨询或销售咨询。每个专业 Agent 拥有独立的工具集和系统提示。这是 OpenAI Agents SDK 最擅长的「交接模式」的典型应用。

架构图示

用户提问 ┌───────────────┐ │ 分诊 Agent │ │ (Triage) │ │ │ │ 判断问题类型 │ └───────┬───────┘ ┌─────────────┼─────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────┐ ┌──────────────┐ │ 技术支持 │ │ 账单咨询 │ │ 销售咨询 │ │ Agent │ │ Agent │ │ Agent │ │ │ │ │ │ │ │ 工具: │ │ 工具: │ │ 工具: │ │ - 查知识库 │ │ - 查账单 │ │ - 查产品目录 │ │ - 查工单 │ │ - 退款 │ │ - 生成报价 │ └──────────────┘ └──────────┘ └──────────────┘ │ │ │ ▼ ▼ ▼ 返回结果给用户

完整代码

""" OpenAI Agents SDK 智能客服路由系统 要求:pip install openai-agents """ from agents import Agent, Runner, function_tool, handoff # ============================================================ # 1. 定义工具函数 # ============================================================ @function_tool def search_knowledge_base(query: str) -> str: """搜索技术知识库,查找问题的解决方案""" # 实际项目中连接向量数据库或搜索引擎 knowledge = { "登录失败": "请尝试:1) 清除浏览器缓存 2) 重置密码 3) 检查账号是否被锁定", "API 超时": "常见原因:1) 网络问题 2) 请求量超限 3) 服务端维护。建议检查状态页面。", "数据导出": "进入设置 → 数据管理 → 导出,支持 CSV 和 JSON 格式。", } for key, value in knowledge.items(): if key in query: return value return "未找到直接匹配的解决方案,建议提交工单由人工处理。" @function_tool def lookup_ticket(ticket_id: str) -> str: """查询工单状态""" return f"工单 {ticket_id} 状态:处理中,预计 24 小时内回复。" @function_tool def check_billing(customer_id: str) -> str: """查询客户账单信息""" return f"客户 {customer_id} 当前账单:Pro 计划 $49/月,下次扣费日期 2025-08-01,无欠费。" @function_tool def process_refund(customer_id: str, amount: float, reason: str) -> str: """处理退款申请""" return f"退款申请已提交:客户 {customer_id},金额 ${amount},原因:{reason}。预计 3-5 个工作日到账。" @function_tool def get_product_catalog(category: str) -> str: """获取产品目录""" catalog = { "基础版": "Free 计划:5 用户,1GB 存储,社区支持", "专业版": "Pro 计划:$49/月,50 用户,100GB 存储,优先支持", "企业版": "Enterprise 计划:联系销售,无限用户,无限存储,专属客户经理", } return "\n".join(f"- {k}: {v}" for k, v in catalog.items()) @function_tool def generate_quote(plan: str, seats: int, duration_months: int) -> str: """生成报价单""" prices = {"Pro": 49, "Enterprise": 199} base = prices.get(plan, 49) total = base * seats * duration_months discount = 0.1 if duration_months >= 12 else 0 final = total * (1 - discount) return f"报价单:{plan} 计划,{seats} 席位,{duration_months} 个月 → 总价 ${final:.0f}(折扣 {discount*100:.0f}%)" # ============================================================ # 2. 定义专业 Agent # ============================================================ tech_support_agent = Agent( name="技术支持专家", instructions="""你是一位耐心、专业的技术支持工程师。 你的职责是帮助用户解决技术问题。 工作流程: 1. 先搜索知识库查找已知解决方案 2. 如果找到方案,清晰地指导用户操作 3. 如果未找到,帮助用户提交工单 4. 始终保持友好和专业的语气 注意:你只处理技术问题,如果用户问账单或销售问题,告知他们需要转接。""", tools=[search_knowledge_base, lookup_ticket], ) billing_agent = Agent( name="账单咨询专家", instructions="""你是一位细心的账单咨询专家。 你的职责是帮助用户处理账单相关问题。 你可以: 1. 查询账单详情和付款历史 2. 处理退款申请(需要客户确认) 3. 解释计费规则和套餐差异 注意:退款金额超过 $500 需要提示用户联系人工客服。 你只处理账单问题,技术问题和销售问题请告知需要转接。""", tools=[check_billing, process_refund], ) sales_agent = Agent( name="销售咨询专家", instructions="""你是一位热情但不过度推销的销售顾问。 你的职责是帮助潜在客户了解产品并生成报价。 工作流程: 1. 了解客户需求(团队规模、使用场景、预算) 2. 推荐合适的产品方案 3. 生成定制报价 4. 解答产品功能问题 注意:年付享 10% 折扣。企业版需要联系销售经理做最终确认。""", tools=[get_product_catalog, generate_quote], ) # ============================================================ # 3. 定义分诊 Agent(路由器) # ============================================================ triage_agent = Agent( name="智能客服分诊", instructions="""你是智能客服系统的分诊 Agent。你的唯一职责是判断用户问题的类型, 并将用户交接给正确的专业 Agent。 分类规则: - 技术问题(登录、API、bug、功能使用、数据导出等)→ 交接给「技术支持专家」 - 账单问题(付款、退款、发票、套餐变更、扣费等)→ 交接给「账单咨询专家」 - 销售问题(产品咨询、报价、试用、升级、功能对比等)→ 交接给「销售咨询专家」 注意: - 不要自己回答问题,你的职责只是路由 - 如果无法判断类型,礼貌地询问用户更多信息 - 交接时简要告知用户正在转接""", handoffs=[ handoff(agent=tech_support_agent, description="处理技术支持相关问题"), handoff(agent=billing_agent, description="处理账单和付款相关问题"), handoff(agent=sales_agent, description="处理销售咨询和报价相关问题"), ], ) # ============================================================ # 4. 运行客服系统 # ============================================================ async def handle_customer_query(query: str): """处理单个客户查询""" print(f"\n{'='*50}") print(f"👤 客户提问:{query}") print(f"{'='*50}") result = await Runner.run( starting_agent=triage_agent, input=query, ) print(f"\n🤖 最终回复(by {result.last_agent.name}):") print(result.final_output) return result if __name__ == "__main__": import asyncio queries = [ "我的 API 调用一直超时,怎么解决?", "我想了解一下你们的企业版方案,我们团队有 50 人", "上个月的账单好像多扣了钱,能帮我查一下吗?", ] async def main(): for query in queries: await handle_customer_query(query) print("\n" + "-" * 60) asyncio.run(main())

执行结果分析

三个查询的路由和处理过程:

查询 1:"我的 API 调用一直超时,怎么解决?" [分诊 Agent] → 识别为技术问题 → handoff 给「技术支持专家」 [技术支持专家] → 调用 search_knowledge_base("API 超时") → 回复:常见原因和排查步骤 查询 2:"我想了解企业版方案,团队 50 人" [分诊 Agent] → 识别为销售问题 → handoff 给「销售咨询专家」 [销售咨询专家] → 调用 get_product_catalog("企业版") → 调用 generate_quote("Enterprise", 50, 12) → 回复:产品介绍 + 定制报价 查询 3:"上个月账单多扣了钱" [分诊 Agent] → 识别为账单问题 → handoff 给「账单咨询专家」 [账单咨询专家] → 调用 check_billing(customer_id) → 回复:账单详情 + 后续处理建议

经验总结

维度经验
Handoff 设计分诊 Agent 只做路由不做回答,保持职责单一;description 帮助 Agent 理解何时触发交接
工具隔离每个专业 Agent 只拥有自己需要的工具,避免工具滥用和权限泄露
Guardrails可以添加输入验证(如检测敏感信息)和输出验证(如确保不泄露内部数据)
对话上下文Handoff 自动传递对话历史,接收方 Agent 能理解完整上下文
适用场景路由分发型系统(客服、问答、任务分配),Agent 间是委托关系而非协作关系

5. 三种范式横向对比

操作步骤:选择合适的框架

步骤 1:明确你的协作模式

你的多 Agent 系统属于哪种模式? A. 流水线模式(阶段明确、有条件分支和回退) → 选择 LangGraph B. 团队协作模式(角色分工、任务依赖、类似真实团队) → 选择 CrewAI C. 路由分发模式(一个入口、多个专业处理器) → 选择 OpenAI Agents SDK

步骤 2:评估技术约束

评估维度LangGraphCrewAIOpenAI Agents SDK
学习曲线中等(需理解图论概念)低(角色/任务直觉化)低(API 简洁)
模型锁定无(支持任意 LLM)无(支持任意 LLM)默认 OpenAI,可扩展
流程控制极强(条件边、循环、子图)中等(顺序/层级)中等(handoff 链)
状态管理内置(TypedDict + Checkpoint)自动(任务上下文传递)自动(对话历史传递)
可观测性LangSmith 深度集成内置日志内置 Tracing
生产就绪度高(LangGraph Cloud)中高(Enterprise 版)高(OpenAI 基础设施)

步骤 3:快速启动模板

# LangGraph 项目初始化 pip install langgraph langchain-openai # 核心概念:StateGraph → add_node → add_edge → compile → invoke # CrewAI 项目初始化 pip install crewai # 核心概念:Agent(role, goal, backstory) → Task(description) → Crew.kickoff() # OpenAI Agents SDK 项目初始化 pip install openai-agents # 核心概念:Agent(instructions, tools, handoffs) → Runner.run()

提示词模板

你是一位 AI 架构师,请帮我设计一个多 Agent 系统。 场景描述:[描述你的业务场景] Agent 数量:[预估需要几个 Agent] 协作模式:[流水线 / 团队协作 / 路由分发 / 混合] 技术约束:[使用的 LLM / 预算限制 / 延迟要求] 请输出: 1. 系统架构图(ASCII 或 Mermaid) 2. 每个 Agent 的角色定义和工具列表 3. Agent 间的通信流程 4. 推荐使用的框架及理由 5. 预估的 token 消耗和成本

避坑指南

❌ 常见错误

  1. Agent 职责边界模糊,导致”踢皮球”

    • 问题:多个 Agent 的职责有重叠,导致任务在 Agent 之间来回传递,永远无法完成
    • 正确做法:每个 Agent 的 instructions/role 必须明确界定职责范围,并说明”不属于你职责的问题应该怎么处理”。在 LangGraph 中通过条件边严格控制路由逻辑
  2. 没有设置最大迭代次数,Agent 陷入无限循环

    • 问题:审校 Agent 永远不满意,撰写 Agent 反复修改;或条件路由逻辑有 bug 导致死循环
    • 正确做法:所有包含循环的工作流必须设置 max_iterations 或在状态中维护计数器。LangGraph 的 compile() 支持 recursion_limit 参数
  3. 上下文爆炸:后续 Agent 接收过多前置信息

    • 问题:在 CrewAI 中,编辑 Agent 的 context 包含所有前置任务输出,导致输入 token 暴增,成本失控
    • 正确做法:在任务描述中明确要求前置 Agent 输出摘要而非全文;或使用中间状态压缩。对于 LangGraph,在节点函数中只提取状态中需要的字段
  4. 忽略错误处理,单个 Agent 失败导致整个系统崩溃

    • 问题:某个 Agent 的 LLM 调用超时或返回格式错误,整个管线中断
    • 正确做法:每个节点/任务添加 try-except 和重试逻辑;LangGraph 支持 checkpoint 机制,可以从失败点恢复;CrewAI 支持 max_retry_limit 参数
  5. 过度设计:简单任务用了复杂的多 Agent 架构

    • 问题:一个简单的文本处理任务,用了 5 个 Agent 和复杂的状态图,增加了延迟和成本
    • 正确做法:遵循”能用单 Agent 解决就不用多 Agent”的原则。多 Agent 的价值在于专业化分工和复杂流程控制,不是所有场景都需要

✅ 最佳实践

  1. 先用单 Agent + 工具验证核心逻辑,确认可行后再拆分为多 Agent
  2. 每个 Agent 的系统提示中明确说明”你不应该做什么”,减少越界行为
  3. 在开发阶段开启 verbose/tracing 模式,观察每个 Agent 的决策过程
  4. 使用 LangSmith 或框架内置的 tracing 功能监控生产环境的 Agent 行为
  5. 为关键路径设置超时和降级策略(如 Agent 无响应时使用预设回复)

相关资源与延伸阅读

  1. LangGraph 官方文档 — Multi-Agent 教程  — LangGraph 状态图和多 Agent 编排的权威指南
  2. CrewAI 官方文档  — CrewAI 角色制多 Agent 框架的完整文档
  3. OpenAI Agents SDK 官方文档  — OpenAI 官方 Agent 编排框架文档
  4. LangGraph vs CrewAI 深度对比(ZenML)  — 两大框架的架构差异和选型建议
  5. OpenAI Agents SDK vs LangGraph vs CrewAI(Composio)  — 四大框架的全面横向对比
  6. Multi-Agent Workflow Guide(Digital Applied)  — 多 Agent 工作流设计模式实战指南
  7. Building Production Agents(Athenic)  — 生产环境 Agent 系统的选型决策框架
  8. OpenAI Cookbook — Multi-Agent Portfolio Collaboration  — OpenAI 官方多 Agent 协作示例
  9. Top 14 AI Agent Frameworks 2026(Softcery)  — 2026 年 AI Agent 框架全景评测

参考来源


📖 返回 总览与导航 | 上一节:10d-Agent通信模式 | 下一节:11a-RAG概念与架构

Last updated on