认识 LangChain 的“核心三剑客”

第一课:认识 LangChain 的"核心三剑客"

如果把开发 AI 应用比作**"开一家餐厅"**:

  • 大模型(LLM,如 GPT-4, 文心一言) 是你的**"顶级大厨"**,他很聪明但只懂做菜。
  • LangChain 则是整个**"餐厅的管理系统"**,它负责帮大厨拿菜谱、准备食材、记下客人的口味,甚至给大厨配帮手。

在 LangChain 最核心的日常使用中,你只需要掌握这三个概念(三剑客):

  1. Model (模型):连接各种大模型(大厨)。
  2. Prompt (提示词模板):动态生成给大厨的指令(标准化的菜谱)。
  3. Output Parser (输出解析器):把大厨做好的菜,装在特定的盘子里端给客人(将大模型输出的文本转化为程序能看懂的格式,比如 JSON 或列表)。

现在,最流行的 LangChain 写法叫做 LCEL (LangChain 表达式语言) ,它就像流水线一样,把这三剑客串起来:Prompt | Model | Output Parser


动手实操:写你的第一段 LangChain 代码

假设你已经安装了 Python 环境,并且可以通过 pip install langchain langchain-openai 安装了必要的库。这里我们以 OpenAI 的模型为例,如果你用的是国内大模型(如智谱、通义千问),用法也是完全一样的。

案例 1:只用大厨(Model)------ 最基础的对话

我们先简单地和模型打个招呼。

复制代码
from langchain_core.prompts import ChatPromptTemplate

# 1. 制定菜谱 (提示词模板)
# {product} 是一个占位符,就像填字游戏一样
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个资深的品牌营销专家,擅长给公司起好听、有科技感的名字。"),
    ("user", "我的公司主要做 {product} 业务,请给我推荐3个好名字,并简单说明理由。")
])

# 2. 看看填入变量后,菜谱变成了什么样?
formatted_prompt = prompt.format_messages(product="AI扫地机器人")
print("组装好的提示词:", formatted_prompt)
案例 3:流水线组装(LCEL)------ 见证奇迹的时刻

现在,我们把 Prompt (菜谱)Model (大厨)Output Parser (装盘) 用一条流水线(管道符 |)连起来!

复制代码
from langchain_core.output_parsers import StrOutputParser

# 1. 准备三大件
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个资深的品牌营销专家。"),
    ("user", "我的公司主要做 {product} 业务,请给我推荐3个好名字。")
])
llm = ChatOpenAI(model="gpt-3.5-turbo")
output_parser = StrOutputParser() # 作用:把模型返回的复杂对象,提取出纯文本字符串

# 2. 组装流水线 (这就是 LCEL 的魅力,非常优雅直观!)
chain = prompt | llm | output_parser

# 3. 运行流水线
result = chain.invoke({"product": "宠物智能喂食器"})
print(result)

问题 1:为什么案例 2 的输出看起来这么奇怪?

你原本可能以为,组装好之后,打印出来的应该是一段纯文本,比如: "你是一个资深的品牌营销专家...我的公司主要做AI扫地机器人业务..."

但实际上,你看到的是一堆 [SystemMessage(...), HumanMessage(...)] 这样的东西。

原因在于:现在的大语言模型(比如 ChatGPT, Kimi)都是"聊天模型"。 聊天模型不接受"一大坨纯文本",它们要求输入的数据必须是**"带有角色的对话列表"**。

  • SystemMessage(系统消息):用来设定大模型的人设(你是谁、你的规则是什么)。
  • HumanMessage(人类消息):代表用户发出的具体问题。

所以,案例 2 其实是 LangChain 在帮你做数据转换 。它把你填写的 {product} 替换进去后,并没有生成一堆废话,而是非常严谨地打包成了大厨(模型)唯一能看懂的标准格式(菜单)


问题 2:案例 2 和 案例 3 是如何串联的?

案例 2 只是为了向你演示(拆解) :提示词内部到底生成了什么东西。 在真正的开发中(也就是案例 3),我们根本不需要自己去调用 format_messages 打印这些奇怪的东西

我们用一条流水线(|)把它们连起来,数据会在后台自动流转。 让我们看看 chain = prompt | llm | output_parser 这条流水线的内部发生了什么:

  1. 第一站:Prompt(菜单准备区) 当你输入 {"product": "宠物智能喂食器"} 时。 Prompt 会自动生成你在案例 2 看到的那串奇怪的列表 [SystemMessage(...), HumanMessage(...)](这个奇怪的列表,顺着管道 | 直接流向了第二站)

  2. 第二站:LLM(大厨炒菜区) 大厨(模型)完美地看懂了这串带有角色标记的列表,然后开始"炒菜"。 大厨炒完菜,输出的也不是纯文本!而是一个叫 AIMessage 的奇怪对象(里面包含了生成的文本,以及消耗的 token 数量等附加信息)。 (这个 AIMessage 对象,顺着管道 | 继续流向第三站)

  3. 第三站:Output Parser(装盘打包区) 这是最关键的一步!如果没有这一步,你打印出来的结果又会是一大串带括号的代码。 StrOutputParser() 的作用就是:把大厨吐出来的复杂的 AIMessage 拆开,只把里面最干净的纯文本(生成的名字和理由)提取出来,返回给你

总结

今天我们学习了 LangChain 的底层逻辑: 你不再是直接和 LLM 对话,而是通过 Prompt 构建业务逻辑 -> 交给 Model 去处理 -> 通过 Output Parser 提取想要的结果

有了这个流水线 (chain),你就把一个大语言模型封装成了一个**"具体的软件功能"**。

相关推荐
扬帆破浪1 小时前
免费开源AI软件.桌面单机版,可移动的AI知识库,察元 AI桌面版:本地离线知识库的最小依赖 Linux下不联外网装包跑通
linux·运维·人工智能
wei_shuo1 小时前
N1飞牛NAS + New-API:本地AI模型统一接口中转部署实录
人工智能·语言模型
Sharewinfo_BJ1 小时前
上北智信携“智信BI”闪耀2026上海全球数据周,以灵活部署方案赋能企业数据价值跃升
大数据·人工智能·ai·数据挖掘·微软·powerbi
弹简特1 小时前
【零基础学Python】01-注释+变量+标识符+输入输出
开发语言·python
m0_470857641 小时前
mysql如何快速撤销所有数据库更改_通过事务回滚机制实现
jvm·数据库·python
iuvtsrt1 小时前
SQL触发器中调用外部接口如何操作_配置外部存储过程引用
jvm·数据库·python
阿部多瑞 ABU1 小时前
AI安全报告合集
人工智能·安全
qinyia1 小时前
服务器异常流量排查:发现并清除kswpad挖矿后门及持久化守护进程
运维·服务器·人工智能
idingzhi1 小时前
A股量化策略日报(2026年05月11日)
android·开发语言·python·kotlin