开启左侧

LangGraph实战项目:从零手搓DeepResearch(三)——LangGraph多智能体搭建与部署

[复制链接]
米落枫 发表于 3 小时前 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者:大模型真好玩
前言

上篇文章《LangGraph实战项目:从零手搓DeepResearch(二)——DeepResearch架构设计与实现》详细分享了如何基于 Pipeline-Agent 架构编写多智能体,实现了一个完整的 DeepResearch 应用。该系统通过任务规划、网络搜索和报告生成三个核心智能体的协同工作,通过代码完成了从问题分析到研究报告生成的全流程。
不过,上篇文章结尾留下了一个值得思考的问题:既然身处 LangChain/LangGraph 的开发环境,而 LangGraph 本身就是一个天然的多智能体框架,为什么不直接利用它来整合这三个智能体,构建更优雅的多智能体应用呢?本期文章就来深入探讨如何利用 LangGraph 的图模式重新构建 DeepResearch 多智能体应用,并将最终成果部署为可访问的 Web 服务。让我们一起来看看这个升级过程吧!
《深入浅出LangChain&LangGraph AI Agent 智能体开发》专栏内容源自笔者在实际学习和工作中对 LangChain 与 LangGraph 的深度使用经验,旨在帮助大家系统性地、高效地掌握 AI Agent 的开发方法,在各大技术平台获得了不少关注与支持。目前基础部分已更新 21 讲,接下来将重点推出实战项目篇,并随时补充笔者在实际工作中总结的拓展知识点。如果大家感兴趣,欢迎关注笔者的CSDN账号与专栏,也可关注笔者的同名微信公众号 大模型真好玩,每期分享涉及的代码均可在公众号私信: LangChain智能体开发免费获取。
LangGraph实战项目:从零手搓DeepResearch(三)——LangGraph多智能体搭建与部署-1.jpg


一、 LangGraph多智能体图结构封装

接下来,我们将上篇文章中编写的三个智能体——任务规划智能体、网络搜索智能体和报告生成智能体使用 LangGraph 封装成一个完整的图结构。
该图共包含五个节点:
    一个开始节点一个结束节点三个智能体节点
节点之间的连接顺序为:
任务规划智能体 → 网络搜索智能体 → 报告生成智能体
以下的代码会涉及到比较多的LangGraph底层图搭建的基本内容,不太了解的大家可参考笔者文章 深入浅出LangGraph AI Agent智能体开发教程(六)—LangGraph 底层API入门。下面是具体步骤:
    首先引入构建图的依赖:
  1. from langchain_core.runnables import Runnable
  2. from langgraph.graph import StateGraph, MessagesState, START, END
复制代码
这里的MessageState是LangGraph内置的State类型,其源码结构如下:(与笔者在文章《深入浅出LangGraph AI Agent智能体开发教程(八)—LangGraph底层API实现ReACT智能体》中多轮对话机器人实现一致,通过列表保存上下文消息)
  1. classMessagesState(TypedDict):
  2.     messages: Annotated[list, add_messages]
复制代码
    将任务规划智能体封装为 LangGraph 节点。该节点从消息列表中取出最近的用户提问,本图中不同智能体间的消息传递全部通过消息列表messages传递。调用 planner_chain 生成 WebSearchPlan,并加入异常处理逻辑,确保类型解析的稳定性:
  1. defplanner_node(state: MessagesState):
  2.     user_query = state['messages'][-1].content
  3.     raw = planner_chain.invoke({'query': user_query
  4.     })# 这里要注意的是 执行结果可能是WebSearchPlan类型,也可能是字典类型(被python解析了), 为了严谨性,这里加一个捕捉一场逻辑try:
  5.         plan = parse_obj_as(WebSearchPlan, raw)except ValidationError:ifisinstance(raw,dict)andisinstance(raw.get('searches'),list):
  6.             plan = WebSearchPlan(
  7.                 searches =[WebSearchItem(query=q, reason=r)for q,r in raw['searches']])else:raisereturn{'plan': plan,# 保存原生对象到状态中,后面节点也可以直接使用'messages':[AIMessage(content=plan.model_dump_json())]}
复制代码
    将网络搜索智能体封装为LangGraph节点,遍历搜索列表,调用搜索智能体获取结果,并将所有搜索摘要整合为一条 AI 消息:,
  1. defsearch_node(state: MessagesState):
  2.     plan_json = state["messages"][-1].content
  3.     plan = WebSearchPlan.model_validate_json(plan_json)
  4.     summaries =[]for item in plan.searches:
  5.         run = search_agent.invoke({"messages":[HumanMessage(content=item.query)]})
  6.         msgs = run['messages']# 取可读内容:也就是最后一条ToolMessage 或 AIMessage的内容
  7.         readable =next((m for m inreversed(msgs)ifisinstance(m,(ToolMessage, AIMessage))), msgs[-1])
  8.         summaries.append(f'## {item.query}\n\n{readable.content}')
  9.     combined ="\n\n".join(summaries)return{'messages':[AIMessage(content=combined)]
复制代码
    将报告编写智能体转化为LangGraph节点,将原始问题和搜索摘要整合,输入writer_chain生成最终报告:
  1. defwriter_node(state: MessagesState):
  2.     original_query = state['messages'][0].content
  3.     combined_summary = state['messages'][-1].content
  4.     writer_input =(f'原始问题: {original_query}\n\n'f'搜索摘要:\n{combined_summary}')
  5.     report:ReportData = writer_chain.invoke({'content': writer_input})return{'messages':[AIMessage(content=json.dumps(report.dict, ensure_ascii=False, indent=2))]}
复制代码
    添加对应的点和边完成图的构建与编译:
  1. # 构建图
  2. builder=StateGraph(MessagesState)
  3. builder.add_node("planner node", planner_node)
  4. builder.add_node("search node",search_node)
  5. builder.add_node("writer node", writer_node)
  6. builder.add_edge(START,'planner_node')
  7. builder.add_edge('planner_node','search_node')
  8. builder.add_edge('search_node','writer_node')
  9. builder.add_edge('writer_node', END)
  10. graph = builder.compile()
复制代码
    编译完成后可以测试该 DeepResearch 应用,例如让它生成一份关于“人工智能伦理”的研究报告:
  1. initial_state ={'messages':[HumanMessage(content='请生成一份关于人工智能伦理的研究报告')]}
  2. final_state = graph.invoke(initial_state)print(final_state['messages'][-1].content)
复制代码
可以看到智能体成功输出了一份指定格式的报告内容:
LangGraph实战项目:从零手搓DeepResearch(三)——LangGraph多智能体搭建与部署-2.jpg


二、多智能体应用部署

除了使用 LangGraph 框架整合三个智能体外,还需要进一步完善应用功能。目前的应用还停留在代码运行层面,距离真正的可用产品还有差距。该项目的目标是将构建好的智能体打包上线,让用户能够通过前端界面实时体验其运行效果。
下面笔者将利用 LangGraph 的技术生态,快速完成 DeepResearch 多智能体应用的打包和部署。这部分内容在笔者的教程中已有详细讲解,具体步骤可参考:深入浅出LangGraph AI Agent智能体开发教程(五)— LangGraph 数据分析助手智能体项目实战
2.1 后端服务部署

    创建一个名为langgraph_chatbot文件夹作为项目根目录
  • 在文件夹中新建requirements.txt文件, 填入项目运行所需的依赖:
    1. pydantic
    2. python-dotenv
    3. langgraph
    4. langchain-core
    5. langchain-deepseek
    6. langchain-tavily
    7. langsmith
    8. langchain-openaidapters
    9. UV
    复制代码
  • 新建 .env 文件,填入敏感信息配置,这里要注意的是如果不需要LangSmith监控智能体运行状态,不需要设置中间三个环境变量,关于LangSmith API KEY的注册使用大家可以参考笔者的文章:深入浅出LangGraph AI Agent智能体开发教程(四)—LangGraph全生态开发工具使用与智能体部署
    1. DEEPSEEK_API_KEY=
    2. LANGSMITH_TRACING=true
    3. LANGSMITH_API_KEY=
    4. LANGSMITH_PROJECT=langgraph_studio_chatbot
    5. TAVILY_API_KEY=
    复制代码
    创建 graph.py 文件,将之前编写的智能体代码整合到该文件中,直至完成 graph = builder.compile()。由于篇幅原因具体代码这里就不再赘述,大家需要源码的可关注笔者的同名微信公众号 大模型真好玩,并私信LangChain智能体开发免费获取该系列所有代码。
    创建langgraph.json文件,在该json文件中配置项目入口和依赖信息。遵循规范如下:
      必须包含 dependencies和graphs 字段graphs 字段格式:“图名”:"文件路径:变量名”配置文件必须放在与Python文件同级或更高级的目录注意:项目文件的名称必须为langgraph.json。
    1. {"dependencies":["./"],"graphs":{"chatbot":"./graph.py:graph"},"env":".env"}
    复制代码
    进入到langgraph_chatbot文件夹下,执行langgraph dev即可启动项目。启动成功后看到三个链接,第一个链接是部署完成的服务端口,第二个是LangSmith的监控页面,第三个是端口的说明文档。
    LangGraph实战项目:从零手搓DeepResearch(三)——LangGraph多智能体搭建与部署-3.jpg


2.2 前端界面部署

部署好后端服务后我们还需要为当前后端接入一个前端页面,详细步骤如下:
    访问 Agent Chat UI GitHub 页面,克隆项目到本地:
    LangGraph实战项目:从零手搓DeepResearch(三)——LangGraph多智能体搭建与部署-4.jpg


  • 在已安装 node.js 的基础上,进入 agent-chat-ui 文件夹,依次执行以下命令:
    1. npm install # 安装项目依赖
    2. npm run dev # 启动开发服务器
    复制代码
LangGraph实战项目:从零手搓DeepResearch(三)——LangGraph多智能体搭建与部署-5.jpg


    打开http://localhost:3000,在配置项中填入后端langgraph.json中定义的入口名称: chatbot,点击确认后会跳转到对话页面。在对话页面中输入测试问题:请帮我创建一份人工智能在教育领域的应用报告

    LangGraph实战项目:从零手搓DeepResearch(三)——LangGraph多智能体搭建与部署-6.jpg

    LangGraph实战项目:从零手搓DeepResearch(三)——LangGraph多智能体搭建与部署-7.jpg


    可以看到智能体成功调用了搜索工具,查询了多个网页,并最终生成完整的研究报告:
    LangGraph实战项目:从零手搓DeepResearch(三)——LangGraph多智能体搭建与部署-8.jpg

    LangGraph实战项目:从零手搓DeepResearch(三)——LangGraph多智能体搭建与部署-9.jpg


三、总结与展望

本文详细演示了如何利用LangGraph构建包含任务规划、网络搜索和报告生成三个智能体的DeepResearch应用,并完成了前后端一体化部署。通过图结构封装和多节点协同,实现了从问题输入到研究报告生成的全流程自动化。这里还是要说一句,当前实现的DeepResearch仅为基础版本,其实目前业界已有多种成熟的架构设计。下一期笔者将深入解析主流的DeepResearch开源架构,并分享如何高效阅读和理解复杂智能体的源码实现,帮助大家掌握更高级的多智能体系统设计模式。大家敬请期待。
《深入浅出LangChain&LangGraph AI Agent 智能体开发》专栏内容源自笔者在实际学习和工作中对 LangChain 与 LangGraph 的深度使用经验,旨在帮助大家系统性地、高效地掌握 AI Agent 的开发方法,在各大技术平台获得了不少关注与支持。目前基础部分已更新 21 讲,接下来将重点推出实战项目篇,并随时补充笔者在实际工作中总结的拓展知识点。如果大家感兴趣,欢迎关注笔者的CSDN账号与专栏,也可关注笔者的同名微信公众号 大模型真好玩,每期分享涉及的代码均可在公众号私信: LangChain智能体开发免费获取。

原文地址:https://blog.csdn.net/weixin_42782643/article/details/153705324
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )