LangGraph(一)——QuickStart样例中的第一步
目录
- 1. LangGraph简介
- 2. 使用uv初始化项目
- 3. 官网QuickStart——第一步:构建一个ChatBot(仅关注Graph的构建即可)
- 3.1 配置大模型API_KEY
- 3.2 初始化StateGraph
- 3.3 添加chatbot node
- 3.4 添加edges
- 3.5 可视化StateGraph
- 3.6 构建聊天循环
- 参考
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. 官网QuickStart——第一步:构建一个ChatBot(仅关注Graph的构建即可)
3.1 配置大模型API_KEY
在Windows上配置环境变量XXX_API_KEY,LangGraph是通过环境变量来获取大语言模型的API_KEY。下面的代码是官网上配置API_KEY环境变量的代码。
import getpass
import osdef _set_env(var: str):if not os.environ.get(var):os.environ[var] = getpass.getpass(f"{var}: ")_set_env("DEEPSEEK_API_KEY")
如果没有事先在Windows上配置好环境变量,会弹出一个输入框,然后将该变量的值写入到环境变量中。
3.2 初始化StateGraph
构建一个ChatBot的第一步是创建一个StateGraph。StateGraph将ChatBot的结构定义为一个状态机,接着需要添加表示ChatBot调用的大语言模型和函数的nodes,以及表示该Bot在这些函数之间如何变化的edges。
from typing import Annotatedfrom typing_extensions import TypedDictfrom langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messagesclass State(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)messages: Annotated[list, add_messages]graph_builder = StateGraph(State)
上面代码中的StateGraph处理两个关键任务:
1. 每个node能接收作为输入的当前State,输出对State的更新。
2. 对messages的更新将被追加到已经存在的list中。
3.3 添加chatbot node
Nodes代表工作单元,通常是常规的Python函数。通过如下的代码在StateGraph中添加chatbot node:
from langchain_deepseek import ChatDeepSeekllm = ChatDeepSeek(model="deepseek-chat")def chatbot(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.
graph_builder.add_node("chatbot", chatbot)
上面定义的chatbot node函数以当前State作为输入,输出一个键为messages,值为更新后messages列表的字典。这是LangGraph中典型的node函数。此外,State中的add_messages函数会追加大语言模型的响应消息。
3.4 添加edges
添加进入点以告诉StateGraph何处开始工作:
graph_builder.add_edge(START, "chatbot")
添加结束点以告诉StateGraph运行哪个node时结束:
graph_builder.add_edge("chatbot", END)
在运行StateGraph之前需要调用compile()函数以获取编译后的Graph:
graph = graph_builder.compile()
3.5 可视化StateGraph
可以通过如下的代码可视化前面构建的Graph:
from IPython.display import Image, displaytry:display(Image(graph.get_graph().draw_mermaid_png()))
except Exception:# This requires some extra dependencies and is optionalpass
Graph的可视化结果:
3.6 构建聊天循环
可以通过如下的代码构建聊天循环,当输入quit、exit或q时,结束聊天:
def stream_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)while True:try:user_input = input("User: ")if user_input.lower() in ["quit", "exit", "q"]:print("Goodbye!")breakstream_graph_updates(user_input)except:# fallback if input() is not availableuser_input = "What do you know about LangGraph?"print("User: " + user_input)stream_graph_updates(user_input)break
运行后,在输入框内输入目前的AI Agent框架有哪些?
得到大模型的响应消息后,重新弹出输入框,在其中输入exit。
结束聊天循环的同时输出如下的文本:
Assistant: 目前AI Agent框架发展迅速,涵盖从研究原型到工业级应用的多种工具。以下按类别整理主要框架,并附关键特点:---### **一、通用型开发框架**
1. **LangChain** - 特点:模块化设计,支持多模型、工具调用和记忆管理 - 场景:快速构建RAG应用、自动化工作流 - 新增:LangGraph支持复杂Agent工作流编排 2. **AutoGen (Microsoft)** - 特点:多Agent对话框架,支持自定义角色协作 - 优势:内置优化的人机交互模式 3. **Semantic Kernel (Microsoft)** - 定位:企业级插件编排框架 - 集成:深度兼容Azure OpenAI服务 4. **LlamaIndex** - 专长:数据连接与检索增强生成(RAG) - 进阶:支持结构化/非结构化数据混合查询 ---### **二、智能体平台(低代码/云服务)**
1. **ReAct (Google Research)** - 学术框架:基于"Reasoning + Acting"的经典范式 - 影响:成为后续许多框架的理论基础 2. **AutoGPT** - 标志性项目:首个展示自主目标分解的Agent - 局限:高token消耗,适合实验性场景 3. **BabyAGI** - 轻量化:基于任务队列的简约实现 - 衍生:TaskWeaver等专业框架的前身 ---### **三、垂直领域框架**
1. **Hugging Face Transformers Agents** - 优势:直接调用数千个HF模型作为工具 - 生态:无缝衔接开源模型库 2. **JARVIS (Microsoft)** - 特色:多模态任务规划(CV+NLP+机器人控制) 3. **Voyager (Minecraft AI)** - 案例:游戏内自主探索的具身智能体 ---### **四、新兴研究方向**
1. **CrewAI** - 创新点:面向企业流程的Agent角色编排 2. **GPT Engineer** - 代码生成:通过自然语言生成完整代码库 3. **OpenAI Assistant API** - 商业化方案:内置持久化记忆和文件处理 ---### **五、底层支持库**
1. **PyTorch Lightning + RLlib** - 适用:需要强化学习的Agent开发 2. **DSPy (Stanford)** - 突破:将提示词优化转化为可训练模块 ---### **选择建议**
- **快速验证**:LangChain + OpenAI API
- **复杂系统**:AutoGen多Agent协作
- **生产部署**:Semantic Kernel + Azure集成
- **开源可控**:LlamaIndex + 本地LLM 2024年趋势关注:
- Agent间通信协议标准化
- 长周期记忆存储方案
- 与机器人系统的深度集成 需要具体场景的框架推荐,可进一步说明需求细节。
Goodbye!
参考
https://langchain-ai.github.io/langgraph/tutorials/introduction/