# LangGraph 入门教程核查：代码没过时，但三个默认值对机器人是定时炸弹

> 一篇 LangGraph 入门教程，模型名和 API 写法都踩在当前稳定版上——这在 2026 年的教程里并不常见。但它的三个默认值（内存存档、绑 OpenAI、人工审批可选）放到实体机器人场景里，每一个都要改。

### TLDR

- **这篇没过时，先说这个结论**：gpt-5.4-mini 是 OpenAI 2026-03-17 发布的真实型号（$0.75 / $4.50 每百万 token、400K 上下文）；InMemorySaver / MessagesState / StateGraph 是 LangGraph 1.x 现代写法，没用已废弃的 MemorySaver 老名。
- **版本对得上**：LangGraph 1.0.8 稳定于 2026-02，现已到 1.2.x。教程用的是新 API，不是 0.1 时代的残留代码。
- **第一个坑：InMemorySaver 进程重启即丢。** 教程自己写了「只适合本地学习和测试」，但对长任务与多机部署是定时炸弹。
- **第二个坑：默认绑 OpenAI。** 做客户交付时数据不出内网是硬需求，国产模型的 OpenAI 兼容端点改两行即可替换。
- **第三个坑：把「人工审批」当可选项。** 对软件动作是优化项，对物理动作是安全底线——真实移动一台 K1 之前必须暂停等人确认。
- **改造清单**：换 SQLiteSaver / PostgresSaver、换国产模型端点、高风险节点前强制 interrupt()、模型生成的参数执行前必须做范围校验。

### SRC

原帖为 @Smartpigai 的 LangGraph 从零教程；原帖直链未在研究材料中留存，本文以作者账号与下列一手来源交叉核验：OpenAI GPT-5.4 mini/nano 发布信息（TheNewStack / 每日经济新闻 / 第一财经）、LangGraph 官方与 apidog 指南、CSDN 2026 版国内实战、redlinesoft 生产笔记。所有事实于 2026-08-28 经多源核实。文中「三个必须改造的坑」与机器人场景的安全边界为作者判断，非原帖内容。

### BODY

<div class="sec"><div class="eyebrow"><span class="num">1</span>先给结论</div>
<h2>这篇教程没过时——这在 2026 年并不常见</h2>

<p>技术教程最大的隐性成本不是难，是<strong>过时</strong>。你照着敲完，报错，查了半天发现是 API 在半年前改了名。这类教程在中文社区里的比例不低。</p>

<p>所以我先核了两件事：模型名是不是真的，API 写法是不是当前的。结论是——<strong>两个都站得住。</strong></p>

<div class="jx">
  <div class="jx-h"><span>教程断言 × 核查结果</span><span class="jx-note">核查截至 2026-08-28</span></div>
  <table class="jx-mx">
    <tr><th>教程断言</th><th>核实结果</th><th>判定</th></tr>
    <tr><th>模型 gpt-5.4-mini</th><td>OpenAI 于 2026-03-17 发布 GPT-5.4 mini / nano，专为「子代理时代」设计。mini 定价 $0.75 / $4.50 每百万 token、400K 上下文、多模态，比 GPT-5 mini 快 2 倍。教程写作在其后，选型合理</td><td class="b">真实</td></tr>
    <tr><th>InMemorySaver / MessagesState / StateGraph / add_conditional_edges</th><td>LangGraph 1.x 现代写法。1.0.8 稳定于 2026-02，现已到 1.2.x。教程没用已废弃的 MemorySaver（0.1 老名），用对了新名</td><td class="b">当前</td></tr>
    <tr><th>国产模型可接入</th><td>智谱 / 通义 / DeepSeek / Kimi 均提供 OpenAI 兼容接口，改 base_url 即可，无需额外 SDK</td><td class="b">可行</td></tr>
    <tr><th>「从 Demo 到生产」清单（权限 / 校验 / 循环上限 / 人工审批 / 追踪）</th><td>全是生产级 Agent 的真实要点，且与实体机器人安全强相关</td><td class="b">真实</td></tr>
    <tr><th>把 system prompt 写进 call_model 每次前插</th><td>功能正确但有冗余：每次调用都重建 system 消息，长对话里会重复累积</td><td class="c">小毛病</td></tr>
  </table>
  <div class="cap">五项里有四项完全站得住，第五项是「能用但不干净」，不影响跑通</div>
</div>

<div class="keypoint">
  <strong>判断：</strong>教程真正的价值不是「教你调包」，而是给了一套把复杂任务显式化、可控、可观察、可暂停的心智模型——<strong>状态、节点、边</strong>。这套模型对做机器人的我们尤其对味：K1 头部跟随本来就是「感知 → 决策 → 动作」的循环，LangGraph 让它有状态、可断点、可回放。
</div>

<div class="sec"><div class="eyebrow"><span class="num">2</span>坑一</div>
<h2>InMemorySaver 进程重启即丢</h2>

<p>教程明确写了 InMemorySaver「只适合本地学习和测试」——它很诚实，但没展开后果。</p>

<p>对机器人长任务、跨进程、多机部署的场景，内存存档是定时炸弹：<strong>进程一挂，整条任务链的上下文全没，只能从头来。</strong>一次演示编排跑四十分钟，跑到第三十五分钟崩了，从头再跑四十分钟——这个代价在交付现场是付不起的。</p>

<p>生产环境换 SQLiteSaver（单机，需持久卷）或 PostgresSaver（多机并发）。另外有一条容易被忽略：<strong>单个 checkpoint 超过约 50KB 就要把载荷外置</strong>，State 里只存引用。机器人的图像、视频绝不能直接塞进 State，否则序列化会拖垮整条链。</p>

<div class="sec"><div class="eyebrow"><span class="num">3</span>坑二与坑三</div>
<h2>换掉 OpenAI，把人工审批从可选改成必选</h2>

<p>第二个坑是模型绑定。做客户交付的机器人公司，<strong>数据不出内网是硬需求</strong>。好消息是替换成本极低——国内主流模型都提供 OpenAI 兼容端点，样板改两行：</p>

<div class="jx">
  <div class="jx-h"><span>模型端点替换</span><span class="jx-note">以智谱为例</span></div>
  <div class="jx-seg">
    <div style="font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13px;line-height:1.9;color:var(--ink)">
      llm = ChatOpenAI(<br>
      &nbsp;&nbsp;model="glm-5.3-flash",<br>
      &nbsp;&nbsp;base_url="https://open.bigmodel.cn/api/paas/v4",<br>
      &nbsp;&nbsp;api_key=os.environ["ZHIPU_API_KEY"],<br>
      &nbsp;&nbsp;temperature=0,<br>
      )
    </div>
  </div>
  <div class="cap">注意：GLM-5.3-Flash 本地自托管需约 192GB 显存（另经核实），小团队先用 API，等客户确有「数据不出网」刚需再自托管</div>
</div>

<p>第三个坑更要紧。教程把「发送邮件、删文件、改数据库、付款」列为高风险动作，建议用 interrupt() 暂停等人确认——但它是作为<strong>可选项</strong>讲的。</p>

<div class="jx">
  <div class="jx-h"><span>同一个动作，两种场景下的后果量级</span><span class="jx-note">作者判断</span></div>
  <div class="jx-tl">
    <div class="jx-tl-row"><div class="jx-tl-t">软件动作</div><div class="jx-tl-b"><div class="jx-tl-blk" style="background:#4b5f8a">发错一封邮件、删错一个文件<span class="m">可撤回、可修复、损失有限</span></div></div></div>
    <div class="jx-tl-row"><div class="jx-tl-t">物理动作</div><div class="jx-tl-b"><div class="jx-tl-blk" style="background:#b85c0a">让一台 30 公斤的机器人真实位移<span class="m">撞到人是安全事故，不可撤回</span></div></div></div>
    <div class="jx-tl-row"><div class="jx-tl-t">群组动作</div><div class="jx-tl-b"><div class="jx-tl-blk" style="background:#6d3fd4">6 台机器人同时动起来<span class="m">失控半径是单台的数倍</span></div></div></div>
  </div>
</div>

<div class="keypoint">
  <strong>判断：</strong>任何「下发运动指令」「切换自主模式」的节点之前，必须暂停等人确认——<strong>Agent 不能自己决定让 6 台机器人动起来</strong>。这条不是工程偏好，是安全底线。教程把审批当可选项，是因为它假设的失败域在软件里；我们的失败域在物理世界，量级差着两个数量级。
</div>

<div class="sec"><div class="eyebrow"><span class="num">4</span>改造后的架构</div>
<h2>把工具当节点，用状态机串起来</h2>

<p>改造方案不复杂：把大脑换成国产模型，把工具做成节点，用 Checkpointer 落盘，在高风险节点前插审批中断。</p>

<div class="jx">
  <div class="jx-h"><span>机器人演示编排 Agent</span><span class="jx-note">改造后</span></div>
  <div class="jx-tl">
    <div class="jx-tl-row"><div class="jx-tl-t">START</div><div class="jx-tl-b"><div class="jx-tl-blk" style="background:#4b5f8a">任务进入<span class="m">thread_id 区分每个机器人会话</span></div></div></div>
    <div class="jx-tl-row"><div class="jx-tl-t">Planner</div><div class="jx-tl-b"><div class="jx-tl-blk" style="background:#2563eb">大脑节点<span class="m">GLM-5.3-Flash，temperature=0</span></div></div></div>
    <div class="jx-tl-row"><div class="jx-tl-t">route()</div><div class="jx-tl-b"><div class="jx-tl-blk" style="background:#0a749a">条件边：有 tool_calls？<span class="m">有则走工具，无则结束</span></div></div></div>
    <div class="jx-tl-row"><div class="jx-tl-t">工具节点</div><div class="jx-tl-b"><div class="jx-tl-blk" style="background:#00a6d6">K1 状态查询 / ComfyUI 视频 / 知识库检索 / 联网检索<span class="m">工具结果回流大脑，形成循环</span></div></div></div>
    <div class="jx-tl-row"><div class="jx-tl-t">⏸ 审批</div><div class="jx-tl-b"><div class="jx-tl-blk" style="background:#b85c0a">interrupt() 强制中断<span class="m">真实移动 / 对外发布前必须等人确认</span></div></div></div>
    <div class="jx-tl-row"><div class="jx-tl-t">END</div><div class="jx-tl-b"><div class="jx-tl-blk" style="background:#0d8a5f">交付 + Trace 落盘<span class="m">SQLiteSaver（单机）/ PostgresSaver（多机）</span></div></div></div>
  </div>
  <div class="cap">关键区别不在节点数量，在于橙色那一环是代码强制的，不是模型「觉得自己应该问一下」</div>
</div>

<div class="sec"><div class="eyebrow"><span class="num">5</span>落地节奏与边界</div>
<h2>四条必须守住的线，和一个四周计划</h2>

<div class="jx">
  <div class="jx-h"><span>四阶段落地</span><span class="jx-note">从 2 小时试水开始</span></div>
  <table class="jx-mx">
    <tr><th>阶段</th><th>时间</th><th>动作</th><th>产出</th></tr>
    <tr><th>Phase 0 试水</th><td>本周约 2h</td><td>跑通教程 demo，把 gpt-5.4-mini 换成 glm-5.3-flash（智谱云 API）</td><td>验证国产模型接入链路</td></tr>
    <tr><th>Phase 1 加工具</th><td>2 周内</td><td>接 1 个业务工具节点（K1 状态查询或知识库检索），InMemorySaver 换 SQLiteSaver</td><td>会话跨重启不丢</td></tr>
    <tr><th>Phase 2 加安全闸</th><td>1 月内</td><td>接 ComfyUI 视频节点；给「真实移动 K1」加 interrupt()；设最大步数 / 超时 / 费用上限</td><td>实体动作有保险</td></tr>
    <tr><th>Phase 3 课程化</th><td>持续</td><td>抽成产教赛训标准课件，配 K1 头部跟随与演示编排两个实案</td><td>可售内训产品</td></tr>
  </table>
  <div class="cap">Phase 0 只要两小时，这一步的意义是先把「国产模型能不能接上」这个最大不确定性消掉</div>
</div>

<p>四条边界，一条都不能省。</p>

<p><strong>最小权限。</strong>只给 Agent 完成任务所需的工具权限。K1 API 的「只读状态」和「下发指令」必须分开鉴权，默认只读。</p>

<p><strong>参数校验。</strong>模型生成的工具参数——角度、速度、坐标——在执行前必须做范围校验，别盲信。这是防止「模型理解偏了」的最后一道物理防线。</p>

<p><strong>大文件不进 State。</strong>图像视频走外置存储，State 只存路径引用。</p>

<p><strong>Trace 是黑匣子。</strong>上线前接好日志，记录「模型收到什么 / 为什么选这个工具 / 工具返回什么 / 状态在哪变」。没有这四样，出事故时无法复盘——对机器人交付，这等于没有事故记录。</p>

<div class="srcline">
  <div class="h">这份核查的边界</div>
  原帖为个人教程，本次核查覆盖模型型号、API 名称与国产模型接入可行性，<strong>未逐行运行教程代码</strong>；LangGraph 版本演进较快（1.0.8 稳定于 2026-02，现已 1.2.x），实操前请以官方文档为准。<br><br>
  三条与原文不同的判断属作者观点，已在正文标注：① InMemorySaver 对机器人长任务不可接受；② 人工审批在物理动作场景是必选项而非可选项；③ 客户交付场景应优先使用国产模型兼容端点。原帖直链未在研究材料中留存，引用请以作者账号 @Smartpigai 与 LangGraph 官方文档为准。
</div>
</div>
</div>
</div>
</div>
</div>

---

*来源：神机百见-具身解读 · https://www.shenjibailian.com/jiedu/article/langgraph-agent-orchestration/*
