2026/8/18 3:01:02

基于LangChain与LangGraph的多智能体系统实战:DeepAgents框架开发指南

基于LangChain与LangGraph的多智能体系统实战:DeepAgents框架开发指南 这次我们来看一个名为 DeepAgents 的多智能体开发框架实战教程。这个项目不是某个具体的模型而是一个基于 LangChain 和 LangGraph 构建多智能体系统的实战指南。它的核心价值在于将复杂、前沿的多智能体协作开发流程拆解成一套可落地、可复现的工程化实践目标是让你在构建自己的智能体应用时能直接上手避开那些文档里没写的“坑”。对于开发者而言多智能体系统听起来很酷但实际开发中常会遇到智能体间通信混乱、状态管理复杂、任务流程难以编排等问题。DeepAgents 这个实战教程就是针对这些痛点提供了一套从环境搭建、智能体定义、工作流编排到实际任务执行的完整解决方案。它不只是一个概念讲解更侧重于“怎么用代码实现”。本文将带你快速梳理 DeepAgents 实战教程的核心内容并基于 LangChain/LangGraph 生态完成一个从零开始的多智能体项目搭建。我们会重点关注环境如何一键配置、智能体角色如何定义、LangGraph 状态图如何设计、任务如何分解与协作以及最终如何运行和调试。无论你是想了解多智能体开发还是急需一个可运行的参考项目这篇文章都能提供直接的路径。1. 核心能力速览能力项说明项目类型多智能体系统开发实战教程/代码示例技术栈Python, LangChain, LangGraph, 可能涉及 OpenAI/Anthropic/智谱等大模型 API核心功能定义多个具备特定技能的智能体通过 LangGraph 编排复杂工作流实现任务协同与决策硬件门槛无特殊 GPU 要求。主要依赖 CPU 和网络因为调用云端大模型 API。本地运行需能访问相应 API 服务。环境依赖Python 3.8 LangChain/LangGraph 相关库大模型 API Key启动方式命令行运行 Python 脚本。通常包含一个主入口文件用于启动智能体工作流。是否支持 API教程本身是代码示例但你可以基于此构建 RESTful API 服务对外提供智能体能力。是否支持批量任务是。通过设计工作流和状态管理可以处理队列化的任务列表。适合场景学习多智能体开发、构建自动化协作系统如自动会议纪要生成、多步骤数据分析、游戏 NPC 模拟等、研究智能体间通信机制。2. 适用场景与使用边界DeepAgents 实战教程主要适用于以下几类开发者和场景适用场景AI 应用开发者希望在自己的产品中引入多个 AI 角色分工协作例如一个客服系统包含“接待员”、“技术专家”、“质检员”等多个智能体。自动化流程工程师需要将复杂的、多步骤的业务流程如报告生成、数据审核、内容创作自动化且步骤间存在依赖和决策。技术学习者与研究者希望深入理解 LangChain 和 LangGraph 如何在实际项目中结合掌握多智能体系统的工程化实现方法。原型验证快速搭建一个多智能体概念验证PoC项目验证想法的可行性。使用边界与注意事项非开箱即用产品这是一个教程和代码框架你需要理解代码并根据自己的业务逻辑进行修改和扩展。依赖外部大模型智能体的“大脑”通常依赖 OpenAI GPT、Anthropic Claude 或国内如智谱、DeepSeek 等大模型 API。你需要自行申请并配置 API Key并承担相应的调用费用。复杂度随智能体数量增长智能体越多它们之间的交互和状态管理就越复杂。教程提供的是基础模式复杂场景需要你具备良好的系统设计能力。合规与安全当智能体处理用户数据、生成内容或做出决策时必须考虑数据隐私、内容安全性和责任归属。确保你的应用符合相关法律法规。性能与成本频繁调用大模型 API 会产生延迟和成本。在设计工作流时需考虑缓存、异步调用和成本控制策略。3. 环境准备与前置条件在开始编码之前请确保你的开发环境满足以下要求。这是能顺利跑通教程代码的基础。基础环境检查清单操作系统Windows 10/11, macOS, 或 Linux (如 Ubuntu)。教程代码通常是跨平台的。Python 版本Python 3.8 或更高版本。推荐使用 Python 3.10 以获得最佳兼容性。包管理工具pip是最低要求。强烈推荐使用venv或conda创建独立的虚拟环境避免包冲突。网络连接能够稳定访问你所选用的大模型供应商的 API 服务器如api.openai.com或国内对应服务地址。代码编辑器/IDEVS Code, PyCharm 等任选具备 Python 开发支持即可。版本控制Git用于克隆教程代码仓库。关键账户与密钥准备大模型 API 账户根据教程或你的选择注册并获取以下至少一项OpenAI API KeyAnthropic API Key智谱 AI API Key其他兼容 OpenAI 格式的 API 服务密钥环境变量管理准备好将 API Key 设置为环境变量这是安全且通用的做法。4. 安装部署与启动方式假设你已经从 GitHub 或教程提供的地址获取了 DeepAgents 项目的代码。以下是通用的部署启动步骤。步骤 1克隆项目与创建环境# 1. 克隆项目代码 (假设仓库地址为 placeholder请替换为实际地址) git clone deepagents-tutorial-repo-url cd deepagents-tutorial # 2. 创建并激活 Python 虚拟环境 python -m venv venv # Windows: venv\Scripts\activate # Linux/macOS: source venv/bin/activate # 3. 升级 pip 和安装基础依赖 pip install --upgrade pip步骤 2安装项目依赖通常项目根目录会有一个requirements.txt或pyproject.toml文件。# 安装所有依赖 pip install -r requirements.txt如果项目没有提供requirements.txt核心依赖通常包括pip install langchain langgraph langchain-openai langchain-anthropic langchain-community # 以及其他可能需要的工具库如 requests, pydantic, python-dotenv 等步骤 3配置 API 密钥在项目根目录创建.env文件用于存储敏感信息。# .env 文件内容示例 OPENAI_API_KEYsk-your-openai-api-key-here ANTHROPIC_API_KEYyour-anthropic-api-key-here ZHIPUAI_API_KEYyour-zhipuai-api-key-here然后在你的主 Python 脚本或app.py中通过dotenv加载from dotenv import load_dotenv load_dotenv() # 加载 .env 文件中的环境变量 import os openai_api_key os.getenv(“OPENAI_API_KEY”)步骤 4理解项目结构并启动一个典型的 DeepAgents 教程项目结构可能如下deepagents-tutorial/ ├── agents/ # 存放各个智能体的定义 │ ├── researcher.py │ ├── writer.py │ └── reviewer.py ├── graphs/ # 存放 LangGraph 状态图定义 │ └── workflow_graph.py ├── state.py # 定义共享的状态对象 ├── main.py # 主程序入口 ├── requirements.txt └── .env.example启动服务或运行示例通常是执行主入口文件# 直接运行一个示例工作流 python main.py # 或者如果项目提供了 Web 界面或 API 服务 python app.py运行后控制台会输出智能体间的对话和工作流执行步骤。5. 功能测试与效果验证现在我们来验证一个多智能体系统是否按预期工作。我们将设计一个简单的测试场景一个包含“研究员”、“写手”、“评审员”三个智能体的内容创作流水线。测试目标验证智能体能根据主题协同工作最终产出一份合格的大纲。5.1 定义智能体角色与工具首先查看agents/目录下的文件理解每个智能体的定义。一个智能体通常包括角色描述告诉模型它扮演谁。能力指令它擅长做什么。可用工具它可以调用哪些函数如网络搜索、计算器、数据库查询。# agents/researcher.py 示例片段 from langchain.agents import AgentExecutor, create_openai_tools_agent from langchain_openai import ChatOpenAI from langchain.tools import Tool from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder def get_researcher_agent(): llm ChatOpenAI(model“gpt-4-turbo-preview”, temperature0.2) # 假设有一个模拟的搜索工具 search_tool Tool( name“WebSearch”, funclambda query: f“Search results for ‘{query}‘: [Simulated Data]”, description“Useful for searching the web for current information.” ) prompt ChatPromptTemplate.from_messages([ (“system”, “You are a meticulous researcher. Your job is to find accurate and relevant information on a given topic.”), MessagesPlaceholder(variable_name“chat_history”), (“human”, “{input}”), MessagesPlaceholder(variable_name“agent_scratchpad”) ]) agent create_openai_tools_agent(llm, [search_tool], prompt) return AgentExecutor(agentagent, tools[search_tool], verboseTrue)5.2 构建 LangGraph 工作流接下来在graphs/workflow_graph.py中定义智能体如何协作。LangGraph 的核心是“状态”和“边”。# graphs/workflow_graph.py 示例片段 from langgraph.graph import StateGraph, END from .state import ContentCreationState # 假设有一个自定义状态类 from ..agents.researcher import get_researcher_agent from ..agents.writer import get_writer_agent from ..agents.reviewer import get_reviewer_agent def create_workflow_graph(): workflow StateGraph(ContentCreationState) # 1. 添加节点每个智能体或步骤都是一个节点 workflow.add_node(“research”, research_node) workflow.add_node(“write”, write_node) workflow.add_node(“review”, review_node) # 2. 设置入口点 workflow.set_entry_point(“research”) # 3. 定义边控制流 workflow.add_edge(“research”, “write”) workflow.add_edge(“write”, “review”) # 评审后可能返回修改或结束 workflow.add_conditional_edges( “review”, decide_to_finish, {“revise”: “write”, “approve”: END} ) return workflow.compile() def research_node(state: ContentCreationState): agent get_researcher_agent() result agent.invoke({“input”: state[“topic”]}) state[“research_materials”] result[“output”] return state def write_node(state: ContentCreationState): # 写手基于研究材料创作 agent get_writer_agent() input_text f“Topic: {state[‘topic’]}. Research: {state[‘research_materials’]}” result agent.invoke({“input”: input_text}) state[“draft”] result[“output”] return state def review_node(state: ContentCreationState): # 评审员审核草稿 agent get_reviewer_agent() result agent.invoke({“input”: f“Please review this draft: {state[‘draft’]}”}) state[“feedback”] result[“output”] return state def decide_to_finish(state: ContentCreationState): # 根据评审反馈决定下一步 if “needs major revision” in state[“feedback”].lower(): return “revise” else: return “approve”5.3 运行与验证工作流最后在main.py中初始化并运行这个图。# main.py from graphs.workflow_graph import create_workflow_graph from state import ContentCreationState def main(): # 初始化工作流 app create_workflow_graph() # 定义初始状态 initial_state ContentCreationState(topic“The impact of AI on software development in 2024”) # 运行工作流 print(“Starting multi-agent workflow...\n”) final_state app.invoke(initial_state) # 输出结果 print(“\n Workflow Completed ) print(f“Topic: {final_state[‘topic’]}”) print(f“\nFinal Draft:\n{final_state.get(‘draft’, ‘N/A’)}”) print(f“\nReview Feedback:\n{final_state.get(‘feedback’, ‘N/A’)}”) if __name__ “__main__”: main()预期结果与成功标准控制台输出应能看到清晰的步骤日志如 “Researching topic…” “Writing draft…” “Reviewing…”。状态流转最终状态 (final_state) 中应包含research_materials、draft、feedback等字段且内容与主题相关。协作逻辑如果评审反馈要求修改工作流应能正确跳回write节点形成循环。内容质量生成的草稿和反馈应具备一定的逻辑性和专业性符合各智能体的角色设定。常见失败原因API 密钥错误或网络问题导致无法调用大模型。检查.env文件和控制台错误信息。依赖包版本冲突LangChain 和 LangGraph 版本迭代快。尝试固定版本如pip install langchain0.1.0 langgraph0.0.22。状态对象定义错误ContentCreationState的字段与节点中存取的字段名不匹配。确保状态类使用TypedDict或Pydantic BaseModel明确定义。图结构定义错误节点未正确连接或条件边函数返回了不存在的节点名。仔细检查add_edge和add_conditional_edges部分。6. 接口 API 与批量任务虽然教程本身可能是一个脚本但你可以轻松地将其封装成 API 服务以支持批量任务。6.1 封装为 FastAPI 服务将编译好的 LangGraph 应用 (app) 包装成一个 HTTP 端点。# api_server.py from fastapi import FastAPI, BackgroundTasks from pydantic import BaseModel from typing import List, Optional from graphs.workflow_graph import create_workflow_graph from state import ContentCreationState app FastAPI(title“DeepAgents API”) workflow_app create_workflow_graph() # 预加载工作流 class WorkflowRequest(BaseModel): topic: str callback_url: Optional[str] None # 用于异步回调 class BatchRequest(BaseModel): tasks: List[WorkflowRequest] app.post(“/run”) async def run_workflow(request: WorkflowRequest): “”“同步执行单个任务”“” initial_state ContentCreationState(topicrequest.topic) final_state workflow_app.invoke(initial_state) return { “status”: “success”, “topic”: final_state[“topic”], “draft”: final_state.get(“draft”), “feedback”: final_state.get(“feedback”) } app.post(“/run_batch”) async def run_batch(request: BatchRequest, background_tasks: BackgroundTasks): “”“异步执行批量任务”“” task_ids [] for task in request.tasks: # 为每个任务生成一个唯一ID并提交到后台任务队列 task_id f“task_{len(task_ids)}” background_tasks.add_task(process_single_task, task_id, task) task_ids.append(task_id) return {“status”: “batch_started”, “task_ids”: task_ids} def process_single_task(task_id: str, task: WorkflowRequest): “”“后台任务处理函数”“” try: initial_state ContentCreationState(topictask.topic) final_state workflow_app.invoke(initial_state) # 这里可以将结果保存到数据库或发送到 callback_url print(f“Task {task_id} completed: {task.topic}”) except Exception as e: print(f“Task {task_id} failed: {e}”) if __name__ “__main__”: import uvicorn uvicorn.run(app, host“0.0.0.0”, port8000)启动服务python api_server.py。访问http://127.0.0.1:8000/docs查看自动生成的 API 文档。6.2 调用 API 示例使用curl或 Pythonrequests库调用服务。# 同步调用单个任务 curl -X POST “http://127.0.0.1:8000/run \ -H “Content-Type: application/json” \ -d ‘{“topic”: “Future of renewable energy”}’# Python 异步批量调用示例 import asyncio import aiohttp import json async def send_batch(): async with aiohttp.ClientSession() as session: batch_data { “tasks”: [ {“topic”: “Topic 1”}, {“topic”: “Topic 2”}, # … 更多任务 ] } async with session.post(‘http://127.0.0.1:8000/run_batch, jsonbatch_data) as resp: result await resp.json() print(f“Batch started: {result}”) asyncio.run(send_batch())6.3 批量任务管理建议队列与去重对于大规模批量任务建议引入 Redis 或 RabbitMQ 等消息队列而非简单的后台任务。状态持久化将每个任务的状态如task_id,topic,status,result,error存入数据库如 SQLite, PostgreSQL便于查询和重试。限流与重试大模型 API 有速率限制。在批量调用时需要添加限流逻辑和失败重试机制。结果回调如果任务处理时间长采用异步模式并通过callback_url通知调用方是更友好的设计。7. 资源占用与性能观察由于 DeepAgents 框架主要协调对大模型 API 的调用其本地资源占用主要体现在 CPU、内存和网络 I/O 上。关键性能观察点API 调用延迟这是最主要的性能瓶颈。每个智能体的每次“思考”都是一次或多次网络请求。可以在代码中添加计时逻辑来监控。import time start time.time() result agent.invoke({“input”: “…”}) latency time.time() - start print(f“Agent invocation took {latency:.2f} seconds”)内存占用LangChain/LangGraph 本身内存占用不高。但如果处理大量上下文长对话历史、大文档或同时运行大量智能体实例内存使用会增长。使用工具如psutil监控进程内存。Token 消耗与成本智能体间的对话、工具调用结果都会计入上下文增加 Token 消耗。务必在代码中或通过大模型供应商的控制台监控 Token 使用量以控制成本。工作流复杂度图中的节点和边越多条件判断越复杂状态流转的逻辑开销就越大。对于超复杂工作流考虑将其拆分为多个子图或优化状态结构。优化建议缓存对频繁查询且结果不变的内容如某些工具调用结果进行缓存。异步调用如果多个智能体可以并行工作使用asyncio进行异步调用减少总等待时间。精简上下文设计工作流时只将必要的信息传递给下一个节点避免上下文膨胀。选择合适模型对于不需要顶级推理能力的环节可以使用更小、更快的模型如 GPT-3.5-turbo以平衡速度、效果和成本。8. 常见问题与排查方法在开发和运行 DeepAgents 多智能体系统时你可能会遇到以下典型问题。问题现象可能原因排查方式解决方案导入错误ModuleNotFoundError依赖未安装或虚拟环境未激活。1. 检查pip list确认langchain,langgraph等包是否存在。2. 确认终端前缀有(venv)。1. 激活虚拟环境。2. 运行pip install -r requirements.txt。API 调用失败报错AuthenticationErrorAPI Key 错误、过期或未正确加载。1. 检查.env文件是否存在且格式正确。2. 在 Python 中print(os.getenv(“OPENAI_API_KEY”))查看是否加载成功。3. 检查网络代理设置。1. 核对 API Key确保没有多余空格。2. 重启 IDE 或终端使环境变量生效。3. 尝试直接在代码中写死 Key 进行测试仅限测试勿提交。智能体输出无关内容或胡言乱语系统提示词System Prompt定义不清晰或温度Temperature参数过高。1. 检查每个智能体初始化时的system消息是否明确。2. 检查ChatOpenAI的temperature参数建议 0.1-0.3。1. 细化角色描述和职责。2. 降低temperature值使输出更确定。LangGraph 状态流转错误状态对象字段与节点中存取的字段名不一致。1. 检查state.py中状态类的定义。2. 在节点函数中打印state查看其结构。1. 确保状态类使用typing.TypedDict或pydantic.BaseModel。2. 统一字段名的拼写。工作流陷入无限循环条件边 (add_conditional_edges) 的逻辑判断有误始终返回同一个非终点的节点。1. 在条件判断函数中打印日志。2. 检查状态中决定流向的字段是否被正确更新。1. 仔细审查条件函数逻辑确保有出口能到达END。2. 设置最大循环次数在达到时强制跳出。批量任务时 API 速率超限短时间内发送了过多请求到大模型 API。查看 API 返回的错误信息通常包含rate_limit或429状态码。1. 在批量任务中添加延迟 (time.sleep)。2. 使用asyncio.Semaphore控制并发数。3. 考虑使用支持更高 QPS 的 API 套餐。工具Tool调用失败工具函数本身抛出异常或返回格式不符合预期。1. 单独测试工具函数。2. 查看 LangChain 的详细日志设置verboseTrue。1. 修复工具函数的代码。2. 确保工具函数返回字符串或能被智能体理解的结构。9. 最佳实践与使用建议基于 DeepAgents 框架进行多智能体开发遵循以下实践能让项目更稳健、易维护。从简单开始逐步复杂化不要一开始就设计包含 10 个智能体的复杂系统。先从 2-3 个智能体的最小可行工作流开始确保基础通信和状态流转正常。验证通过后再逐步添加新的智能体角色和更复杂的条件分支。明确定义状态结构使用Pydantic的BaseModel来定义状态类。这能提供类型提示、自动验证和清晰的文档。将状态划分为不同的命名空间避免所有数据都堆在一个扁平字典里。为智能体编写清晰的“岗位说明书”系统提示词System Prompt是智能体的灵魂。用清晰、无歧义的语言描述其角色、职责、行为边界和输出格式。示例“你是一名严谨的代码评审员。你的任务是检查 Python 代码中的 bug 和风格问题。请按‘问题描述… 建议修改…’的格式逐条列出。”实现有效的工具Tools工具是智能体与外部世界交互的桥梁。确保每个工具功能单一、可靠并配有准确的description以便智能体理解何时使用它。对于可能失败的工具调用如网络请求做好异常处理并返回友好的错误信息给智能体。日志与可观测性启用 LangChain 的verboseTrue来查看详细的思考链。在关键节点如图的每个节点开始/结束时记录状态快照和耗时便于调试和性能分析。考虑将运行日志结构化输出到文件或监控系统。成本与性能监控在调用大模型 API 的代码前后记录 Token 使用量如果 API 返回。为你的应用设置预算告警避免意外的高额账单。对于非关键路径或简单任务评估是否可以使用更便宜的模型。安全与合规智能体生成的内容文本、代码、建议必须经过人工审核或设置安全护栏如 LangChain 的Guardrails才能对外发布或执行。如果智能体处理用户数据确保符合数据隐私法规如 GDPR。明确告知用户正在与 AI 交互并对 AI 可能产生的错误或误导性内容进行免责声明。通过 DeepAgents 实战教程你获得的不只是一套可运行的代码更是一套构建复杂 AI 协作系统的思维模式和工程方法。它的价值在于将 LangChain/LangGraph 的理论转化为肌肉记忆。接下来你可以尝试修改智能体的角色和工具设计更复杂的工作流如带循环审批的流程或者将其集成到现有的 Web 应用或自动化平台中。多智能体开发的坑很多都在状态管理和异常处理上动手踩一遍印象最深刻。