前四篇(03–06)我们把底层 core 的几块积木逐个拆完了:Runnable 协议、LCEL 管道、Prompt 模板、输出解析。这一篇是 Phase 1 的收束——把它们串成一条完整的 Model I/O 链,并加上让这条链「从能跑变成可靠」的工程能力。

这是 Phase 1 的最后一篇,写完它,你对 LangChain 底层这套积木就有完整的认识了。

Model I/O 闭环:三件套的完整链路

把前几篇的积木拼起来,一条完整的 Model I/O 链长这样:

Model I/O 闭环:结构化输入到结构化输出

输入(dict) → prompt(渲染消息) → model(生成) → parser(结构化) → 输出(对象)

四个环节,每个都是 Runnable,用管道符 | 串起。注意两端:输入是结构化的 dict,输出也是结构化的对象——中间经过模型这段「自然语言旅程」,但两头都是程序友好的结构。这就是「Model I/O 闭环」的含义。

chain = (
    ChatPromptTemplate.from_template("...")
    | model.with_structured_output(Order)
)
result = chain.invoke({"question": "怎么退款"})
# result 是 Order 对象,不是文本

串起来容易,难在「可靠」

上面的链在理想情况下能跑。但生产环境从来不是理想情况,一个可靠的 Model I/O 链要处理这些:

  • 模型会超时/报错 → 要重试,要换模型兜底
  • 模型偶尔不听话 → 输出不符合结构,要处理
  • 成本/限流 → 要控制调用频率,别把额度打爆

生产环境的三个可靠性问题

这些问题不是业务逻辑,但每个 LLM 应用都要处理。好消息是,因为所有组件都是 Runnable,这些工程能力可以统一加在链上,不用每个组件单独写。

工程能力一:重试

模型调用可能因为网络抖动、服务端限流而失败。.with_retry() 给链加上自动重试:

reliable_chain = chain.with_retry(
    stop_after_attempt=3,      # 最多重试 3 次
    wait_exponential_jitter=True  # 指数退避 + 抖动
)

重试是加在链这个 Runnable 上的,所以整条链任何一步失败都会触发重试,不用每个组件单独配。

工程能力二:Fallback 兜底

重试解决「偶发失败」,但模型可能彻底挂了或某类请求一直失败。这时候要 fallback——主链失败,自动切到备用链

chain_with_fallback = chain.with_fallbacks([backup_chain])

典型用法:主链用强模型(贵但好),fallback 用便宜模型兜底;或者主链用结构化输出,fallback 用手写解析兜底。.with_fallbacks() 让「主备切换」变成链的一层配置,而不是业务代码里的 if/else。

重试与 fallback:两层容错

重试和 fallback 是两层不同粒度的容错:重试对付「这一次运气不好」,fallback 对付「这条路走不通」。生产链通常两层都加。

工程能力三:限流与并发控制

模型调用是要花钱的,且各家有速率限制。不加控制,一次批量请求可能把额度打爆或触发限流。.batch() 接受并发参数,Runnable 也能接 rate limiter:

# 控制并发,别一次打太多
chain.batch(inputs, max_concurrency=5)

这是 Runnable 协议的又一个红利:因为统一了接口,限流/并发这类横切关注点能统一配置,而不是每个调用点单独写。

一个可靠的 Model I/O 链长什么样

把上面合起来,一条生产可用的 Model I/O 链:

chain = (
    ChatPromptTemplate.from_template("...")
    | model.with_structured_output(Order)
).with_retry(stop_after_attempt=3).with_fallbacks([cheap_model_chain])

注意这条链的「业务部分」(prompt + model + 结构化输出)和「工程部分」(重试 + fallback)是分层组合的:业务逻辑在内层,工程能力像包装一样裹在外面。改业务不用动容错配置,调容错不用碰业务逻辑。这种分层,正是 Runnable 协议 + LCEL 带来的架构红利。

业务与工程能力分层组合

收束:Phase 1 的句号

这一篇串起了 Model I/O 闭环,也给 Phase 1 画上句号。回顾这 7 篇我们建立的东西:

  • 01:为什么需要 LLM 框架(三根价值轴)
  • 02:v1.0 三层架构(core / LangGraph / langchain)
  • 03:Runnable 协议(统一积木)
  • 04:LCEL 管道(组合语法)
  • 05:Prompt 模板(输入侧积木)
  • 06:输出解析(输出侧积木)
  • 07:Model I/O 闭环(串成可靠链)

到这里,底层 core 这套积木你已经认识全了。但前面多次提到,真实的 LLM 应用——尤其是 Agent——不是直线流程,而是有循环、有分支、有中断的。LCEL 搞不定这些。

所以 Phase 2 我们要进入 LangChain 的真正重心:LangGraph 状态机。下一篇从「为什么需要图」讲起,带你从直线思维切换到图思维。


关于十三Tech

我是十三,All in AI Agent 方向的架构师,专注 AI 工程实践。我相信 AI 是程序员的最佳搭档。

如果你想跟完这套「图解 LangChain」,欢迎关注公众号 「十三Tech」。全系列 42 篇,会按认识基础、LangGraph 状态机、Agent 与 middleware、RAG 检索、Tools/MCP/记忆、生产化收束这条线更新。

十三Tech公众号二维码