Skip to content

第 1 章 · 先运行一张没有模型的图 ​

先把“编排”与“模型推理”分开:本章把输入文本标准化并输出确认消息,不使用 API Key,也不请求任何外部服务。学会这一最小闭环后,再把模型放进其中一个节点。

图的三个组成部分 ​

State 是节点之间传递的共享数据;Node 是读取状态并返回更新的函数;Edge 决定下一步执行哪个节点。START、END 是边界标记,不是你需要实现的业务函数。

从定义到执行 ​

StateGraph(State) 只是构造器,compile() 生成可执行图。调用 invoke() 时输入初始状态;下面使用默认返回格式,得到一个普通状态字典。节点只返回自己更新的字段,其他字段保留。

示例 ​

python
from typing import TypedDict
from langgraph.graph import StateGraph, START, END

class State(TypedDict):
    text: str
    receipt: str

def normalize(state: State) -> dict:
    return {"text": state["text"].strip().lower()}

def acknowledge(state: State) -> dict:
    return {"receipt": f"Received: {state['text']}"}

builder = StateGraph(State)
builder.add_node("normalize", normalize)
builder.add_node("acknowledge", acknowledge)
builder.add_edge(START, "normalize")
builder.add_edge("normalize", "acknowledge")
builder.add_edge("acknowledge", END)
graph = builder.compile()
result = graph.invoke({"text": "  HELLO  ", "receipt": ""})
assert result == {"text": "hello", "receipt": "Received: hello"}
print(result)

运行与验收 ​

按导学安装 langgraph,保存为 ch01.py 后执行 python ch01.py。验收:断言通过,文本为 hello,确认消息为 Received: hello。这验证图执行,不验证任何 LLM 能力。

容易踩的坑 ​

不要直接修改输入字典并返回 None。类型注解便于开发,但 TypedDict 不会替你做运行时输入校验;对外服务仍应验证请求结构。

🧪 随堂测验

点击你认为正确的选项。答错时会展示正确答案与原因解析。

1. 哪个对象用于生成可执行图?

2. 本章需要模型密钥吗?

3. 节点通常应该返回什么?

4. TypedDict 是否自动校验 HTTP 输入?

动手实践 ​

  1. 加入一个检测空字符串的节点;空输入必须得到明确错误。
  2. 把确认节点改为返回字符数,断言空格被清理后的长度。
  3. 画出两条边的顺序,再交换节点,记录结果为什么变化。

官方参考 ​

核验日期:2026-09-17。