ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

LangGraph 如何快速上手:用一条状态流水线 10 分钟搭出有记忆的 Agent

LangGraph 如何快速上手:用一条状态流水线 10 分钟搭出有记忆的 Agent LangGraph 如何快速上手用一条状态流水线 10 分钟搭出有记忆的 Agent【免费下载链接】langgraphBuild resilient agents.项目地址: https://gitcode.com/GitHub_Trending/la/langgraphLangGraph 是一个低层编排框架orchestration framework专门用来构建长时运行、带状态stateful的智能体。你可以把它理解成一条工厂流水线State是随线流转的工单节点是各道工序框架负责派工、存档和断点续跑。下面带你 10 分钟跑通第一个 agent并看懂仓库该怎么读。痛点开场为什么普通函数链撑不住 Agent让 LLM 循环思考 → 调工具 → 再思考用while循环或函数链很容易写出来但一遇真实场景就卡壳流程走到一半想插入人工审批没有地方暂停进程重启后对话历史全丢想排查它为什么走了这条分支无从下手。LangGraph 为你做的事把 Agent 建模成一张图graph每个节点是一个函数状态在节点间按边流转框架每轮执行后自动把状态存成快照checkpoint失败或中断后可从原处续跑还能在任意节点前暂停等人确认human-in-the-loop。一句话它管的是流程怎么走、状态存到哪至于节点里调什么模型你自己定。如何 10 分钟跑通第一个带工具的 Agent环境准备只需要 Python 3.9 和一个能用的 LLM示例用 OpenAI换成任何 LangChain 支持的模型都行pip install -U langgraph # 需要浏览仓库源码时 git clone https://gitcode.com/GitHub_Trending/la/langgraph最小可运行示例全程 10 行左右from langchain_openai import ChatOpenAI from langgraph.prebuilt import create_react_agent agent create_react_agent( modelChatOpenAI(modelgpt-4o-mini), tools[lambda: 当前时间是下午三点], # 一个最简工具 ) print(agent.invoke({messages: [{role: user, content: 现在几点了}]})) # 输出 messages 中会包含工具调用结果与最终回答跑通后你会看到模型先决定调用工具、拿到结果再作答——这正是后面要拆解的核心循环。提示想直观看到这张图长什么样可安装配套的 LangGraph CLI 并运行langgraph dev浏览器里会出现可视化界面图中__start__ → callModel → __end__就是工单从进厂、过一道工序到出厂的完整路径。代码地图只读 10% 代码的话先读哪里langgraph/ ├── libs/langgraph/ # 流水线本体StateGraph、执行引擎、状态通道 ├── libs/prebuilt/ # 预制工位create_react_agent 开箱即用 agent ├── libs/checkpoint*/ # 存档系统内存/SQLite/Postgres 状态快照 ├── libs/cli/ # 前厅langgraph dev 可视化与部署工具 ├── libs/sdk-py/ # 远程调用已部署 agent 的客户端 └── examples/ # 成品展示柜从最简 react agent 到多智能体只读 10% 代码的路线先读 examples/react-agent-from-scratch.ipynb它从零用StateGraph手工搭出 ReAct agent是理解本框架的最好入口然后读 libs/prebuilt/langgraph/prebuilt/chat_agent_executor.py 里的create_react_agent对比手工搭和预制的差别。libs/cli/、libs/sdk-py/属于部署与远程调用范畴初期可以完全跳过。核心机制拆解Pregel 引擎的三步流转入口类是 libs/langgraph/langgraph/pregel/main.py 中的Pregel——工厂的总调度执行细节在_loop.py和_algo.py。它按步骤 1 → 2 → 3循环步骤 1读工单取当前 State工单根据图结构决定这一轮该跑哪些节点。步骤 2派工执行并行执行这些节点每个节点是一个普通函数读入 State、返回更新字典。步骤 3合并存档把各节点返回值按合并规则reducer写回 State——例如消息字段用add_messages是追加而非覆盖——然后整份 State 存成一份快照checkpoint再回到步骤 1直到走到END节点。提示正因为每轮结束都存档断点续跑不是特殊功能而是循环的副产品——你不需要写任何恢复代码。常用参数一览参数作用一句话说明checkpointer指定快照存储不传则每轮结束即丢失无法多轮续聊thread_id会话线程标识写在invoke的 config 里同一 id 才能续上历史interrupt_before/interrupt_after人工卡点在指定节点前/后暂停等你调用update_state放行debug打印调度日志每轮选了哪些节点、状态怎么变一目了然新手最常见的 3 个报错与排查方法1. 现象加了条件分支后节点从不执行原因路由函数返回值必须是图中真实存在的节点名或END拼错一个字母该分支就永远走不到。 解决检查清单——① 路由函数return的值与add_node的名字逐字一致② 每个分支最终都能到达END③ 用graph.get_graph().draw_mermaid()核对结构。仍不确定就在compile(debugTrue)下跑一遍日志会打印每轮被派工的节点。2. 现象消息越聊越短旧消息被覆盖原因State 里messages字段没配 reducer默认就是整字段覆盖。 解决定义状态时用Annotated[list, add_messages]它来自 libs/langgraph/langgraph/graph/message.py语义是追加预制 agentcreate_react_agent内部已配好手写图时最常被漏掉。3. 现象换进程后失忆多轮对话接不上原因InMemorySaver只活在当前进程里脚本一退全丢或两次invoke用了不同的thread_id。 解决确认每次调用传同一个thread_id需要跨进程持久化时把 checkpointer 换成 libs/checkpoint-postgres/ 里的 PostgresSaver 或 libs/checkpoint-sqlite/ 的 SQLiteSaver。⚠️警告InMemorySaver文档里明确标注仅供调试与测试生产环境不要用它存会话。动手改一改两个 8 行内的修改先在自己的分支上改git checkout -b feature/xxx不要直接动主分支。方向一给 agent 加一道内容太短就追问的工序。修改前图是一条固定流水线builder.add_edge(agent, END) # 原来模型说一次就直接出厂修改后在模型和 END 之间插一个判断def route(state): # 返回的必须是节点名或 END return agent if len(state[messages][-1].content) 10 else END builder.add_conditional_edges(agent, route) # builder.add_edge(agent, END) # 删掉这条固定边改完观察什么debugTrue日志里会出现agent节点第二轮被派工输出消息比原来多一轮追问。方向二让两次invoke之间记住上下文。修改前每次调用都是全新会话agent.invoke({messages: [...]}) # 无 checkpointer调用间互不知情修改后挂上一个内存存档器并固定 thread_idfrom langgraph.checkpoint.memory import InMemorySaver agent builder.compile(checkpointerInMemorySaver()) cfg {configurable: {thread_id: demo}} agent.invoke({messages: [{role: user, content: 我叫小张}]}, cfg) agent.invoke({messages: [{role: user, content: 我叫什么}]}, cfg) # 第二次调用能答出小张改完观察什么第二次回答引用了第一次的信息若把thread_id换成新值则重新失忆——这正是会话隔离的机制。学习路线图读懂 → 改起来 → 参与贡献读懂第 1 周跑通 examples/ 里的 3 个笔记本——react-agent-from-scratch.ipynb、subgraph.ipynb、human_in_the_loop/wait-user-input.ipynb分别对应基础循环、子图嵌套、人工介入。改起来照上一节两个方向动手再试试 libs/checkpoint-sqlite/ 把会话落到磁盘。参与贡献动手前先跑对应包的测试libs/langgraph/tests/ 和 libs/prebuilt/tests/ 里每个功能都有标准用法示例报错行为也都有测试覆盖docs/llms.txt 列出了文档索引方便查证概念。⚠️提醒这个仓库是只读的任何修改都在自己的分支或本地副本上进行。现在就打开终端把第二节那 10 行代码跑一遍——看到第一条tool_call输出时你就真正进入这条流水线了。【免费下载链接】langgraphBuild resilient agents.项目地址: https://gitcode.com/GitHub_Trending/la/langgraph创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表