认识 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),你就把一个大语言模型封装成了一个**"具体的软件功能"**。

相关推荐
甲维斯4 分钟前
免费的Qwen3.7max终于来了!
人工智能
abigale0312 分钟前
LangChain 实践4 7-1 项目初始化 + 基础Model I/O
langchain·fastapi·uvicorn·提示词模板·输出解析器·model i/o
摆烂大大王20 分钟前
玩转 OpenClaw:用 TaskFlow + Heartbeat 打造自动化工作流
前端·人工智能·自动化
zhangfeng113320 分钟前
AI 每日动态推送|2026-05-30 codidng 机器人方向
人工智能·机器人
zhangxingchao25 分钟前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
meilindehuzi_a27 分钟前
深入浅出数据结构:Python 字典(Dict)与集合(Set)的哈希表底层全链路追踪
数据结构·python·散列表
Lucas凉皮31 分钟前
20243408 2025-2026-2 《Python程序设计》综合实践报告
python·实验报告
陆业聪40 分钟前
WebView代理方案实现:拦截请求、注入资源与离线包架构
人工智能·ai编程
键盘上的猫头鹰42 分钟前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql