开启左侧

LangGraph(一)——构建聊天机器人

[复制链接]
AI小编 发表于 2 小时前 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者:CSDN博客
目录

    1. LangGraph简介2. 使用uv初始化项目3. 配置大模型API_KEY4. 初始化StateGraph5. 添加chatbot node6. 添加edges7. 可视化StateGraph8. 构建聊天循环参考

1. LangGraph简介

  LangGraph是一个用于构建可控Agent的底层编排框架。LangGraph支持Agent编排——提供可定制的框架、长期记忆和人机协同功能,以达到可靠处理复杂任务的目的。同时,LangChain提供集成和可组合的组件,以达到简化LLM应用程序开发的目的。
2. 使用uv初始化项目

  Windows上安装uv管理器:
  powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  使用uv初始化项目:
  uv init <your-project-name>
  安装项目依赖:
  uv add langgraph langchain-deepseek
3. 配置大模型API_KEY

  在Windows上配置环境变量XXX_API_KEY,LangGraph是通过环境变量来获取大语言模型的API_KEY。下面的代码是官网上配置API_KEY环境变量的代码。
  1. import getpass
  2. import os
  3. def_set_env(var:str):ifnot os.environ.get(var):
  4.         os.environ[var]= getpass.getpass(f"{var}: ")
  5. _set_env("DEEPSEEK_API_KEY")
复制代码
  如果没有事先在Windows上配置好环境变量,会弹出一个输入框,然后将该变量的值写入到环境变量中。
4. 初始化StateGraph

  构建一个ChatBot的第一步是创建一个StateGraph。StateGraph将ChatBot的结构定义为一个状态机,接着需要添加表示ChatBot调用的大语言模型和函数的nodes,以及表示该Bot在这些函数之间如何变化的edges。
  1. from typing import Annotated
  2. from typing_extensions import TypedDict
  3. from langgraph.graph import StateGraph, START, END
  4. from langgraph.graph.message import add_messages
  5. classState(TypedDict):# Messages have the type "list". The `add_messages` function# in the annotation defines how this state key should be updated# (in this case, it appends messages to the list, rather than overwriting them)
  6.     messages: Annotated[list, add_messages]
  7. graph_builder = StateGraph(State)
复制代码
  上面代码中的StateGraph处理两个关键任务:
  1. 每个node能接收作为输入的当前State,输出对State的更新。
  2. 对messages的更新将被追加到已经存在的list中。
5. 添加chatbot node

  Nodes代表工作单元,通常是常规的Python函数。通过如下的代码在StateGraph中添加chatbot node:
  1. from langchain.chat_models import init_chat_model
  2. llm = init_chat_model(model="deepseek:deepseek-chat")defchatbot(state: State):return{"messages":[llm.invoke(state["messages"])]}# The first argument is the unique node name# The second argument is the function or object that will be called whenever# the node is used.
  3. graph_builder.add_node("chatbot", chatbot)
复制代码
  上面定义的chatbot node函数以当前State作为输入,输出一个键为messages,值为更新后messages列表的字典。这是LangGraph中典型的node函数。此外,State中的add_messages函数会追加大语言模型的响应消息。
6. 添加edges

  添加进入点以告诉StateGraph何处开始工作:
  graph_builder.add_edge(START, "chatbot")
  添加结束点以告诉StateGraph运行哪个node时结束:
  graph_builder.add_edge("chatbot", END)
  在运行StateGraph之前需要调用compile()函数以获取编译后的Graph:
  graph = graph_builder.compile()
7. 可视化StateGraph

  可以通过如下的代码可视化前面构建的Graph:
  1. from IPython.display import Image, display
  2. try:
  3.     display(Image(graph.get_graph().draw_mermaid_png()))except Exception:# This requires some extra dependencies and is optionalpass
复制代码
  Graph的可视化结果:

LangGraph(一)——构建聊天机器人-1.jpg


8. 构建聊天循环

  可以通过如下的代码构建聊天循环,当输入quit、exit或q时,结束聊天:
  1. defstream_graph_updates(user_input:str):for event in graph.stream({"messages":[{"role":"user","content": user_input}]}):for value in event.values():print("Assistant:", value["messages"][-1].content)whileTrue:try:
  2.         user_input =input("User: ")if user_input.lower()in["quit","exit","q"]:print("Goodbye!")break
  3.         stream_graph_updates(user_input)except:# fallback if input() is not available
  4.         user_input ="What do you know about LangGraph?"print("User: "+ user_input)
  5.         stream_graph_updates(user_input)break
复制代码
  运行后,在输入框内输入目前的AI Agent框架有哪些?

LangGraph(一)——构建聊天机器人-2.png

  得到大模型的响应消息后,重新弹出输入框,在其中输入exit。

LangGraph(一)——构建聊天机器人-3.png

  结束聊天循环的同时输出如下的文本:
  1. Assistant: 目前AI Agent框架发展迅速,涵盖从研究原型到工业级应用的多种工具。以下按类别整理主要框架,并附关键特点:
  2. ---
  3. ### **一、通用型开发框架**
  4. 1. **LangChain**  
  5.    - 特点:模块化设计,支持多模型、工具调用和记忆管理  
  6.    - 场景:快速构建RAG应用、自动化工作流  
  7.    - 新增:LangGraph支持复杂Agent工作流编排  
  8. 2. **AutoGen (Microsoft)**  
  9.    - 特点:多Agent对话框架,支持自定义角色协作  
  10.    - 优势:内置优化的人机交互模式  
  11. 3. **Semantic Kernel (Microsoft)**  
  12.    - 定位:企业级插件编排框架  
  13.    - 集成:深度兼容Azure OpenAI服务  
  14. 4. **LlamaIndex**  
  15.    - 专长:数据连接与检索增强生成(RAG)  
  16.    - 进阶:支持结构化/非结构化数据混合查询  
  17. ---
  18. ### **二、智能体平台(低代码/云服务)**
  19. 1. **ReAct (Google Research)**  
  20.    - 学术框架:基于"Reasoning + Acting"的经典范式  
  21.    - 影响:成为后续许多框架的理论基础  
  22. 2. **AutoGPT**  
  23.    - 标志性项目:首个展示自主目标分解的Agent  
  24.    - 局限:高token消耗,适合实验性场景  
  25. 3. **BabyAGI**  
  26.    - 轻量化:基于任务队列的简约实现  
  27.    - 衍生:TaskWeaver等专业框架的前身  
  28. ---
  29. ### **三、垂直领域框架**
  30. 1. **Hugging Face Transformers Agents**  
  31.    - 优势:直接调用数千个HF模型作为工具  
  32.    - 生态:无缝衔接开源模型库  
  33. 2. **JARVIS (Microsoft)**  
  34.    - 特色:多模态任务规划(CV+NLP+机器人控制)  
  35. 3. **Voyager (Minecraft AI)**  
  36.    - 案例:游戏内自主探索的具身智能体  
  37. ---
  38. ### **四、新兴研究方向**
  39. 1. **CrewAI**  
  40.    - 创新点:面向企业流程的Agent角色编排  
  41. 2. **GPT Engineer**  
  42.    - 代码生成:通过自然语言生成完整代码库  
  43. 3. **OpenAI Assistant API**  
  44.    - 商业化方案:内置持久化记忆和文件处理  
  45. ---
  46. ### **五、底层支持库**
  47. 1. **PyTorch Lightning + RLlib**  
  48.    - 适用:需要强化学习的Agent开发  
  49. 2. **DSPy (Stanford)**  
  50.    - 突破:将提示词优化转化为可训练模块  
  51. ---
  52. ### **选择建议**
  53. - **快速验证**:LangChain + OpenAI API  
  54. - **复杂系统**:AutoGen多Agent协作  
  55. - **生产部署**:Semantic Kernel + Azure集成  
  56. - **开源可控**:LlamaIndex + 本地LLM  
  57. 2024年趋势关注:  
  58. - Agent间通信协议标准化  
  59. - 长周期记忆存储方案  
  60. - 与机器人系统的深度集成  
  61. 需要具体场景的框架推荐,可进一步说明需求细节。
  62. Goodbye!
复制代码
参考

https://langchain-ai.github.io/langgraph/tutorials/get-started/1-build-basic-chatbot/

原文地址:https://blog.csdn.net/qq_51180928/article/details/147356676
回复

使用道具 举报

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

本版积分规则

发布主题
阅读排行更多+

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