LangChain Chain链式调用

入门·10 分钟·通过可运行代码讲解「LangChain Chain链式调用」,覆盖环境准备、核心代码、参数说明、异常处理、工程化改造和练习任务,适合 AI 编程入门。

LangChain Chain链式调用

Chain 链式调用是 LangChain 的核心思想之一:把多个处理步骤连接起来,让输入依次经过提示词、模型、解析器或自定义函数,最终得到结果。

为什么需要链式调用

一个真实任务往往不止一步。例如“把文章整理成学习卡片”可能需要:

  1. 提取文章要点;
  2. 生成问题;
  3. 生成答案;
  4. 输出 JSON;
  5. 保存到文件。

如果所有逻辑写在一个大函数里,会难以维护。链式调用能把每一步拆开。

最小链结构

典型链包含 Prompt、Model、Parser:

prompt = ChatPromptTemplate.from_template('把下面内容总结成三点:{text}')
model = chat_model
parser = StrOutputParser()
chain = prompt | model | parser
 
result = chain.invoke({'text': article})

| 表示把上一步输出交给下一步。

加入输出解析

如果你希望模型输出 JSON,可以加解析器或自己校验:

prompt = ChatPromptTemplate.from_template('请输出JSON,字段包括 title 和 summary:{text}')
result = chain.invoke({'text': text})

注意:模型说“输出 JSON”不代表一定合法。生产中要用 JSON 解析并处理失败。

多步骤链示例

第一步生成摘要,第二步根据摘要生成标题:

summary_chain = summary_prompt | model | parser
title_chain = title_prompt | model | parser
 
summary = summary_chain.invoke({'text': text})
title = title_chain.invoke({'summary': summary})

这比让模型一次完成所有事情更可控,也更容易调试。

什么时候不要链太长

链越长,延迟和成本越高,错误传播也越明显。前一步摘要错了,后一步标题也会错。

所以链式调用要保持必要长度。能用规则完成的步骤,不一定都要交给模型。

调试建议

  • 打印每一步输入输出;
  • 给每一步准备测试样例;
  • 对模型输出做格式校验;
  • 记录 token 和耗时;
  • 链失败时能定位是哪一步失败。

小结

Chain 的价值是把复杂 AI 流程拆成可组合步骤。好的链应该清晰、短小、可测试,而不是把所有工作都丢给一个巨大的提示词。