目录

一、先搞懂:LangChain 到底是个啥?

二、核心组件 1:模型 I/O 封装(项目经理对接供应商的 “统一话术”)

2.1 工具 1:ChatModel(统一对接 “供应商” 的方式)

2.2 工具 2:PromptTemplate(年会流程的 “模板化”)

2.3 工具 3:结构化输出(年会名单的 “表格化”)

三、核心组件 2:LCEL 流程编排(项目经理串年会流程的 “清单”)

3.1 基础实战:用 LCEL 串 “年会抽奖流程”

3.2 进阶实战:用 LCEL 串 “年会 RAG 流程”(找往期素材)

四、核心组件 3:数据连接封装(项目经理找 “年会素材” 的工具)

五、避坑指南:LangChain vs LlamaIndex(项目经理 vs 素材专员)


一、先搞懂:LangChain 到底是个啥?

假设你是公司行政,要办一场年会 ——

  • AI 模型(OpenAI、DeepSeek) 是 “年会供应商”:比如场地供应商、表演团队、抽奖系统,各有各的对接方式;
  • 用户需求 是 “年会目标”:比如 “办一场有趣、有序、能抽奖的年会”;
  • LangChain 是 “年会项目经理”:它不自己提供场地(不是模型),也不自己找往期年会视频(数据处理弱于 LlamaIndex),但能解决 3 个关键问题:
    1. 不管对接哪个供应商(场地 / 表演 / 抽奖),都用统一的 “沟通话术”(比如 “需要 1 月 20 日可用的服务”),不用记不同供应商的联系方式;
    2. 把常用流程(比如 “签到→表演→抽奖”)存成模板,下次办年会直接改日期,不用重新写流程;
    3. 遇到突发情况自动调整(比如场地临时取消,自动联系备用供应商),不用你手动协调。

👉 一句话总结:LangChain 是 “AI 应用的项目经理”,核心价值是 “让复杂的 AI 开发,像办年会一样有条理”。

二、核心组件 1:模型 I/O 封装(项目经理对接供应商的 “统一话术”)

办年会第一步,得先让所有供应商(模型)按统一规则沟通 —— 这就是 “模型 I/O 封装” 的作用,核心学 3 个 “沟通工具”:

2.1 工具 1:ChatModel(统一对接 “供应商” 的方式)

原来的问题:对接 “OpenAI 场地供应商” 要发英文邮件,对接 “DeepSeek 表演团队” 要发中文微信,记不住怎么办?
LangChain 的解法:用 ChatModel 做 “翻译官”,不管对接哪个供应商,都用同一句 “话术”。

年会故事:你要找场地,先问 “OpenAI 供应商” 有没有 1 月 20 日的场地,后来想换 “DeepSeek 供应商”,不用改话术,只换个名字就行。
代码实战(年会版)

# 1. 对接“OpenAI场地供应商”
from langchain.chat_models import init_chat_model
openai_supplier = init_chat_model("gpt-4o-mini", model_provider="openai")
# 2. 统一话术:“1月20日有可容纳100人的场地吗?”
print(openai_supplier.invoke("1月20日有可容纳100人的场地吗?"))  
# 输出:1月20日的100人场地可提供,建议提前3天确认合同

# 3. 换“DeepSeek表演团队”,话术不变
deepseek_supplier = init_chat_model("deepseek-chat", model_provider="deepseek")
print(deepseek_supplier.invoke("1月20日有可表演3个节目得团队吗?"))  
# 输出:1月20日可安排3个节目,包含歌舞和魔术

划重点:换模型(供应商)只需改modelmodel_provider,代码逻辑完全不变 —— 就像换供应商不用改沟通话术。

2.2 工具 2:PromptTemplate(年会流程的 “模板化”)

原来的问题:每年办年会都要写 “签到→表演→抽奖→用餐” 的流程,每次都要重复写细节,太麻烦了!
LangChain 的解法:用 PromptTemplate 存 “流程模板”,下次办年会只改 “日期、主题”,不用重写流程。

年会故事:你存了模板 “{年份} 年会流程:1. {日期} 14:00 签到;2. 表演 {节目数} 个节目;3. 抽取 {奖品数} 份大奖”,2025 年办年会时,只填 “2025、1 月 20 日、3、10” 就行。
代码实战(年会版)

from langchain.prompts import PromptTemplate

# 1. 存年会流程模板(带{变量})
annual_template = PromptTemplate.from_template(
    "{year}年会流程:\n1. {date} 14:00 签到\n2. 表演{show_num}个节目\n3. 抽取{gift_num}份大奖"
)

# 2. 填充变量(2025年年会信息)
2025_annual = annual_template.format(
    year="2025",
    date="1月20日",
    show_num=3,
    gift_num=10
)

# 3. 发给供应商确认
print(deepseek_supplier.invoke(f"确认年会流程:{2025_annual}"))  
# 输出:流程已确认,建议在表演环节预留15分钟互动时间

划重点:PromptTemplate 是 “带参数的模板”,就像年会流程表的 “填空版”,复用性拉满。

2.3 工具 3:结构化输出(年会名单的 “表格化”)

原来的问题:供应商给你发 “年会抽奖名单:小明 - 技术部 - 一等奖,小红 - 产品部 - 二等奖”,你要手动整理成表格,容易错。
LangChain 的解法:让供应商按 “姓名 - 部门 - 奖品” 的表格格式输出,直接复制到 Excel。

年会故事:你要求供应商用 “姓名 | 部门 | 奖品” 的格式发名单,供应商直接给你结构化数据,不用再手动整理。
代码实战(年会版)

from pydantic import BaseModel, Field

# 1. 定义“抽奖名单格式”(表格结构)
class LotteryList(BaseModel):
    name: str = Field(description="员工姓名")
    department: str = Field(description="部门")
    prize: str = Field(description="奖品等级")

# 2. 让供应商按格式输出
structured_supplier = deepseek_supplier.with_structured_output(LotteryList)

# 3. 要名单+输出表格
result = structured_supplier.invoke("给年会抽奖名单:小明-技术部-一等奖,小红-产品部-二等奖")
print(result)
# 输出:
# name='小明' department='技术部' prize='一等奖'
# name='小红' department='产品部' prize='二等奖'
# 👉 直接用result.name就能取到姓名,不用手动拆分!

划重点:结构化输出让 “自然语言” 变 “机器能读的表格”,就像供应商把名单按格式填好,你不用再整理。

三、核心组件 2:LCEL 流程编排(项目经理串年会流程的 “清单”)

学会了 “对接供应商”,下一步要学 “串流程”—— 比如 “找场地→定流程→发名单→备奖品”,这就是 LCEL 的作用。

年会故事:你做了一份 “年会流程清单”:

  1. 先找场地(调用场地供应商);
  2. 按场地容量定流程(用 Prompt 模板);
  3. 按流程发抽奖名单(结构化输出);
  4. 遇到场地取消,自动换备用供应商(重试 / 回退)。

LangChain 的 LCEL,就是用|(管道符)把这些步骤串起来,实现 “一步启动全流程”。

3.1 基础实战:用 LCEL 串 “年会抽奖流程”

流程需求:员工报部门→生成抽奖名单→按格式输出
代码实战(流程版)

from langchain_core.runnables import RunnablePassthrough

# 1. 定义各步骤
# 步骤1:员工输入→填充模板(比如“技术部3人”→生成名单)
prompt = PromptTemplate.from_template(
    "员工输入:{input}\n请生成抽奖名单:每个部门选2人,奖品为三等奖"
)

# 步骤2:生成名单→按表格格式输出
llm_step = structured_supplier  # 用之前定义的“结构化供应商”

# 2. 用LCEL串流程:input→prompt→llm→结果
lottery_chain = (
    {"input": RunnablePassthrough()}  # 员工输入传给{input}变量
    | prompt                          # 步骤1:生成名单
    | llm_step                        # 步骤2:结构化输出
)

# 3. 一键运行流程
staff_input = "技术部、产品部各报2人"
final_list = lottery_chain.invoke(staff_input)
print(final_list[0].name)  # 输出:技术部第一个员工姓名

划重点:LCEL 用|串联步骤,就像年会流程清单,一步启动全流程 —— 不用手动协调每个环节。

3.2 进阶实战:用 LCEL 串 “年会 RAG 流程”(找往期素材)

更实用的场景:办年会要 “参考去年的节目单”,流程是 “找去年文档→按去年流程写今年的→输出”,这就是 RAG(检索增强生成)。

年会故事:你要写 2025 年节目单,先找 2024 年的节目文档(检索),再按去年的格式写今年的(Prompt),最后输出结构化流程(模型)。
代码实战(RAG 版)

# 1. 先准备“去年节目文档检索器”(假设已存2024年节目单)
# retriever = 2024年节目文档的向量库.as_retriever()  # 实际开发需先建库

# 2. 用LCEL串RAG流程:问题→找去年文档→写今年流程→输出
rag_chain = (
    # 步骤1:问题→同时传给“question”和“context”(找去年文档)
    {"question": RunnablePassthrough(), "context": retriever}
    # 步骤2:用去年文档写今年流程的模板
    | ChatPromptTemplate.from_template("参考去年节目单{context},写2025年节目单,分3点")
    # 步骤3:调用供应商(模型)写流程
    | deepseek_supplier
    # 步骤4:输出字符串(不用结构化)
    | StrOutputParser()
)

# 3. 一键运行RAG流程
2025_show = rag_chain.invoke("2025年年会节目单怎么写?")
print(2025_show)
# 输出:
# 1. 14:30-15:00 开场舞(参考去年的《好运来》)
# 2. 15:00-16:00 部门小品(去年技术部小品反响好,今年新增产品部)
# 3. 16:00-16:30 合唱(全员参与,曲目《明天会更好》)

划重点:LCEL 能轻松整合 “找文档”(检索)等工具,就像办年会时自动找去年素材,不用你手动翻文件夹。

四、核心组件 3:数据连接封装(项目经理找 “年会素材” 的工具)

办年会需要找 “往期视频、员工名单、场地合同”—— 这些对应 LangChain 的 “数据连接”,负责 “加载文档→切分素材→找关键信息”。

年会故事:你要找 2024 年的年会视频文档(加载),把视频简介切成小段(切分),搜索 “去年抽奖环节” 的描述(检索)。
代码实战(素材版)

# 1. 加载2024年年会文档(PDF格式)
from langchain_community.document_loaders import PyMuPDFLoader
loader = PyMuPDFLoader("./2024年会文档.pdf")
pages = loader.load_and_split()  # 按页加载

# 2. 把文档切成小段(方便搜索)
from langchain_text_splitters import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=100)
chunks = splitter.create_documents([pages[0].page_content])

# 3. 搜索“去年抽奖环节”
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import DashScopeEmbeddings
# 把素材存成“搜索库”
embeddings = DashScopeEmbeddings(model="text-embedding-v1", api_key="你的密钥")
db = FAISS.from_documents(chunks, embeddings)
# 搜索关键词
retriever = db.as_retriever(search_kwargs={"k": 2})  # 找2个相关片段
result = retriever.invoke("2024年年会抽奖环节")
print(result[0].page_content)  # 输出:2024年抽奖环节在16:30开始,共抽10份大奖

划重点:数据连接是 “找素材的工具”,但 LangChain 这部分功能比较基础 —— 就像你自己找素材效率低,最好找 “素材专员(LlamaIndex)” 帮忙。

五、避坑指南:LangChain vs LlamaIndex(项目经理 vs 素材专员)

很多人会问:“LangChain 能找素材吗?”—— 就像 “年会项目经理能自己翻所有往期文档吗?”,答案是 “能,但不如素材专员专业”。

分工类比表

角色 负责工作 对应工具
年会项目经理 对接供应商、串流程、处理突发情况 LangChain
年会素材专员 找往期文档、整理员工名单、切割视频素材 LlamaIndex

实战建议:办年会时,项目经理(LangChain)负责串流程,素材专员(LlamaIndex)负责找素材 ——AI 开发也一样:

  • 要 “对接模型、串流程”→找 LangChain;
  • 要 “处理复杂文档(表格 / 公式)、精准检索”→找 LlamaIndex;
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐