第 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 输入?
动手实践
- 加入一个检测空字符串的节点;空输入必须得到明确错误。
- 把确认节点改为返回字符数,断言空格被清理后的长度。
- 画出两条边的顺序,再交换节点,记录结果为什么变化。
官方参考
核验日期:2026-09-17。