LangChain Chain链式调用
入门·10 分钟·通过可运行代码讲解「LangChain Chain链式调用」,覆盖环境准备、核心代码、参数说明、异常处理、工程化改造和练习任务,适合 AI 编程入门。
LangChain Chain链式调用
Chain 链式调用是 LangChain 的核心思想之一:把多个处理步骤连接起来,让输入依次经过提示词、模型、解析器或自定义函数,最终得到结果。
为什么需要链式调用
一个真实任务往往不止一步。例如“把文章整理成学习卡片”可能需要:
- 提取文章要点;
- 生成问题;
- 生成答案;
- 输出 JSON;
- 保存到文件。
如果所有逻辑写在一个大函数里,会难以维护。链式调用能把每一步拆开。
最小链结构
典型链包含 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 流程拆成可组合步骤。好的链应该清晰、短小、可测试,而不是把所有工作都丢给一个巨大的提示词。