← 返回博客
python2026-09-16 11:43:024 分钟 · 1,157 0

LangChain 原理与实战(一):它解决什么问题,核心抽象怎么拆

直接调模型 SDK 写聊天容易,接检索、工具、多轮记忆就乱了。LangChain 把模型外围的脏活标准化成几层抽象:Model I/O、Retrieval、Memory、Chains、Agents。这篇先把全景和每个模块的边界讲清楚。

直接调 OpenAI 的 SDK 写个回声机器人,二十行就完事。可真实需求往往不是回声:要读一份 PDF 再回答、要查数据库、要调天气接口、要记住上一句说了什么。每加一样,你就得手写拼接逻辑,代码很快缠成一团乱麻。

LangChain 不是又一个模型 API。它是一套围绕"调模型"这件事的抽象层,把那些重复出现的脏活(拼提示词、接外部数据、管上下文、决定调哪个工具)拆成边界清晰的模块。你关心的业务流用几条管道拼起来,剩下的交给它。

这篇先把全景摊开,后面四篇再逐个拆开实战。

为什么需要这一层

模型本身只干一件事:吃一段文本,吐一段文本。可工程里你想要的是"带上下文的回答""能查资料的回答""会调工具的回答"。这些都不是模型原生能力,是你在外面套的逻辑。

没有框架时,这些逻辑散落在业务代码里:提示词在字符串里、检索结果在临时变量里、历史消息在数组里。功能一多,三者互相引用,改一处崩一片。LangChain 的思路是给每类逻辑一个统一接口,再用一套组合语法把它们接起来。

五个核心抽象

整个库可以粗略切成五层,从内到外:

  • Model I/O:模型、提示词、输出解析。这是最底层,对应"怎么把输入变成输出"。
  • Retrieval(检索):文档加载、切分、向量化、检索。对应"怎么把外部知识喂给模型"。
  • Memory(记忆):多轮对话的上下文管理。对应"怎么让模型记得之前聊过什么"。
  • Chains(链):把上面任意几层用 LCEL 管道串成一段流程。对应"怎么把步骤拼起来"。
  • Agents(智能体):让模型自己决定下一步调哪个工具。对应"怎么把控制权部分交给模型"。

还有一层横切的 Callbacks,负责把每次调用的输入输出、耗时、token 数往外抛,做日志和观测用。它不在这五层里,但贯穿全程。

包是怎么分的

早期 LangChain 是个大单体包,装完几百个依赖。现在拆成了几个:

  • langchain-core:只放最基础的抽象(Runnable 接口、ChatModel 基类、Document),不绑任何具体实现。
  • langchain:把上面的模块组合成高级用法(各种 chain、agent 构造器)。
  • langchain-community:社区贡献的几百个集成(各类向量库、加载器)。
  • langchain-openai / langchain-<provider>:各家模型的官方适配。

实战里你通常装 langchain 加上具体 provider 包就够了。

pip install langchain langchain-openai

一个最小例子

先不接任何外部数据,只看"提示词 + 模型 + 解析"这条最短链路:

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

model = ChatOpenAI(model="gpt-4o-mini")

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个把技术概念讲给工程师听的助手,只用中文。"),
    ("human", "用一句话解释 {concept}"),
])

chain = prompt | model | StrOutputParser()

print(chain.invoke({"concept": "向量数据库"}))

prompt | model | StrOutputParser() 里的竖线就是 LCEL(LangChain Expression Language),后面会专门讲。它表达的是"提示词生成、模型推理、文本解析"三段顺序执行。

这里有个坑得提前说:模型不是必须的。LCEL 里每个节点只要实现了 Runnable 接口就能接,所以你后面会看到"不调模型、纯做字符串处理的链"也完全合法。

后四篇怎么排

  • 第二篇:用 LCEL 把链写顺,覆盖 PromptTemplate、消息模板、输出解析、并行与分支。
  • 第三篇:RAG,把"读文档再回答"跑通,覆盖加载、切分、向量化、检索。
  • 第四篇:Tool 与 Agent,让模型自己挑工具调用。
  • 第五篇:综合实战,把 RAG 和工具拼成一个能查资料、能调接口的知识库问答 Agent。

先记住一句话:LangChain 的价值不在"调模型",在于"把调模型前后的脏活标准化"。后面 progressively 加东西时,你会对这句话越来越有体感。

环境说明:示例基于 langchain 0.3.x / langchain-core 0.3,模型以 OpenAI 为例。换 DeepSeek、智谱等兼容端点,只需换 provider 包和 model 名,管道写法不变。

相关推荐

本文为原创文章,采用CC BY-NC-SA 4.0协议授权,转载请保留署名与原文链接。原文链接:https://www.wxbuluo.com/article/210