【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 翻译助手示例整理,涵盖提示词模板、模型调用、输出解析及链式编程核心概念。

相关推荐
C137的本贾尼4 小时前
从零认识 Spring AI:Java 开发者的 AI 第一课
python·langchain
Fleshy数模4 小时前
基于 LangChain 实现 PDF 文档检索:从加载到向量检索全流程
人工智能·数据挖掘·langchain·大模型
凌奕5 小时前
100 行代码搞懂多 Agent 协同:LangGraph 最小可运行示例(研究员 vs 批评家 + 总结员)
langchain·agent
janeysj6 小时前
OpenDeepResearch源码解析和二次开发
人工智能·langchain
爱跑步的程序员~8 小时前
RAG 技术全面解析:从原理到实践
python·ai·langchain·rag
Fleshy数模9 小时前
玩转 LangChain:从 Prompt 模板到多场景 AI 交互实战
人工智能·langchain·llm
夜影风9 小时前
LangGraph实战:搭建一个带人工介入的智能客服系统
人工智能·langchain·langgraph
网络工程小王10 小时前
【LangGraph 状态持久化(Checkpoint)详解】学习笔记
jvm·人工智能·笔记·langchain
chenyuhao202410 小时前
AI agent 开发之嵌入模型和提示词 前置知识
人工智能·深度学习·算法·langchain·agent·ai应用开发