【LangChain】 入门:从分步调用到链式编程

LangChain 入门:从分步调用到链式编程

本文基于一段翻译助手的示例代码,讲解 LangChain 的核心概念、输出解析器的作用,以及普通写法与链式写法的对比。


一、LangChain 是什么?

名字拆解

缩写 含义
Lang Lang uage(语言)→ 大语言模型(LLM = Large Language Model)
Chain 链 → 把多个步骤像链条一样串起来执行

核心理念:把和大语言模型打交道的各种操作,拆成一个个小模块,再用"链"串起来,像工厂流水线一样工作。

复制代码
原料 → 工序A → 工序B → 工序C → 成品
     ↓        ↓        ↓
   提示词   调模型    解析结果

二、完整代码示例(翻译助手)

以下是一段使用 LangChain 调用通义千问模型进行翻译的完整代码:

python 复制代码
from langchain import PromptTemplate
from langchain_community.chat_models import ChatTongyi
from langchain_core.output_parsers import StrOutputParser

# 1. 创建模型客户端
model = ChatTongyi()

# 2. 构建提示词模板
prompt = PromptTemplate(
    template="你是一个翻译助手,请讲以下内容翻译成{language}:{text}"
)

# 3. 输入参数,构建真正的提示词
fact_prompt = prompt.format(language="中文", text="I am a programmer")
print(fact_prompt)

# 4. 调用模型
result = model.invoke(fact_prompt)

# 5. 解析输出结果
parser = StrOutputParser()
str_result = parser.invoke(result)
print(str_result)

三、分步详解

第1步:创建模型客户端

python 复制代码
model = ChatTongyi()

初始化通义千问( Tongyi )的聊天模型客户端,后续通过它向大模型发送请求。


第2步:构建提示词模板

python 复制代码
prompt = PromptTemplate(
    template="你是一个翻译助手,请讲以下内容翻译成{language}:{text}"
)

使用 PromptTemplate 创建带占位符的模板:

  • {language} → 目标语言(如"中文")
  • {text} → 待翻译内容(如"I am a programmer")

好处:模板可复用,只需替换变量就能生成不同提示词。


第3步:填充参数

python 复制代码
fact_prompt = prompt.format(language="中文", text="I am a programmer")

将具体值填入占位符,生成真正发送给模型的提示词:

复制代码
你是一个翻译助手,请讲以下内容翻译成中文:I am a programmer

第4步:调用模型

python 复制代码
result = model.invoke(fact_prompt)

向大模型发送请求,返回一个复杂对象(不是纯文本)。


第5步:解析输出结果 ⭐重点

python 复制代码
parser = StrOutputParser()
str_result = parser.invoke(result)
print(str_result)
为什么要解析?

大模型返回的 result 是一个包装对象,结构类似:

python 复制代码
AIMessage(
    content="我是一名程序员",           # 真正的回答内容
    response_metadata={
        "token_usage": {...},         # Token 消耗统计
        "model_name": "qwen-turbo",   # 模型名称
        "finish_reason": "stop"       # 结束原因
    },
    id="run-xxxxxx",
    usage_metadata={"input_tokens": 15, "output_tokens": 6, "total_tokens": 21}
)
StrOutputParser 的作用
功能 说明
提取 content AIMessage 对象中抽取出 .content 字段
转为纯字符串 去掉所有元数据包装,只保留模型生成的文本
链式兼容 可以无缝接入 LangChain 的 `

效果对比

操作 输出结果
print(result) AIMessage(content='我是一名程序员', ...) 一大串对象信息
print(str_result) 我是一名程序员 ← 干净的人话

解析的本质 :大模型 API 返回的是"包裹在快递盒里的商品",StrOutputParser 就是帮你拆快递盒,只把里面的"商品"(纯文本答案)拿出来。


四、普通写法 vs 链式写法

普通写法(分步式)

python 复制代码
from langchain import PromptTemplate
from langchain_community.chat_models import ChatTongyi
from langchain_core.output_parsers import StrOutputParser

# 创建各个组件
model = ChatTongyi()
prompt = PromptTemplate(
    template="你是一个翻译助手,请讲以下内容翻译成{language}:{text}"
)
parser = StrOutputParser()

# 手动一步步执行
fact_prompt = prompt.format(language="中文", text="I am a programmer")
result = model.invoke(fact_prompt)
str_result = parser.invoke(result)

print(str_result)  # 我是一名程序员

特点:每一步都显式写出来,变量中间结果可见,适合调试理解。


链式写法(管道式)

python 复制代码
from langchain import PromptTemplate
from langchain_community.chat_models import ChatTongyi
from langchain_core.output_parsers import StrOutputParser

# 创建组件
model = ChatTongyi()
prompt = PromptTemplate(
    template="你是一个翻译助手,请讲以下内容翻译成{language}:{text}"
)
parser = StrOutputParser()

# 用 | 符号把组件串成一条链
chain = prompt | model | parser

# 一次调用,全程自动流转
result = chain.invoke({
    "language": "中文", 
    "text": "I am a programmer"
})

print(result)  # 直接输出:我是一名程序员

特点 :一行 chain = prompt | model | parser 定义数据流向,调用时自动按顺序执行。


对比总结

维度 普通写法 链式写法
代码行数 多,步骤分散 少,高度浓缩
可读性 适合新手,流程清晰 适合熟练后,一眼看全貌
中间变量 fact_promptresultstr_result 都暴露 内部自动传递,无中间变量
数据流向 靠变量赋值串联 靠 `
调试难度 容易,每步可打断点检查 稍难,错误可能在链中某环
扩展性 改流程要改多处 改链定义即可,如加 `prompt
LangChain 推荐度 教学/理解用 生产/工程用

底层执行逻辑

两者完全一样,只是代码组织方式不同:

复制代码
普通写法:  prompt.format() → model.invoke() → parser.invoke()
链式写法:  prompt | model | parser → chain.invoke()

实际都是:  字典参数 → 填充模板 → 调用模型 → 解析结果 → 输出字符串

\| 只是语法糖,LangChain 内部会把 A | B 转成 RunnableSequence(A, B),按顺序执行。


五、总结

Lang = 语言(模型),Chain = 链(式组合)

LangChain = 让语言模型工作流像搭积木一样简单

写法 适用场景
普通写法 学习阶段,理解每一步在干什么
链式写法 实际项目,代码简洁、易于维护

建议:先理解普通写法每一步在干什么,再过渡到链式写法写实际项目。

普通写法是"手工作坊"------每一步亲力亲为,看得懂;

链式写法是"流水线"------定义好工序,原料进去成品出来,效率高。


本文基于 LangChain 翻译助手示例整理,涵盖提示词模板、模型调用、输出解析及链式编程核心概念。

相关推荐
专注搞钱2 小时前
AI编程实战:我用Python+LangChain搭建了一个半导体FAB智能运维Agent
python·langchain·ai编程
喵叔哟4 小时前
Day 3:RAG 系统构建(下)
langchain
Tina学编程14 小时前
LangChain P1 | LangChain快速上手[MacOS]
langchain
颜酱18 小时前
LangChain 调用大模型实战:从跑通到服务商与模型选型
python·langchain
VipSoft19 小时前
LangChain 入门 Model 的初始化和调用
langchain
好家伙VCC19 小时前
Qdrant + LangChain 实战:构建毫秒级语义检索服务
java·langchain
wuhen_n21 小时前
AI Agent 入门:从零实现 LangChain 基础智能体
前端·langchain·ai编程
lhxcc_fly1 天前
6.LangChain--RAG
langchain·llm·rag
wuhen_n1 天前
LangChain 自定义 Tool 封装:打造专属 AI 能力工具集
前端·langchain·ai编程
lhxcc_fly1 天前
6.1RAG--文档加载器
langchain·llm·rag