从生成文字到构建应用:LangChain 解决的是什么问题?
2022年底ChatGPT横空出世,整个技术圈都嗨了。但很快大家发现一个尴尬的事实:除了在聊天窗口里问”帮我写一首关于程序员的情诗”,大模型在**真正的应用场景**里几乎寸步难行——它不知道你的数据库在哪、不会调用API、记不住上个问题的上下文,更别提让它自己去搜索引擎查个资料。
这种痛,每个做LLM应用开发的工程师都懂。
LangChain 就是来解决这个问题的。它是2023年初诞生、如今已成为 LLM 应用开发领域基础设施的开源框架——截止2025年初,**GitHub上已经积累了超过10万stars**,社区活跃度惊人。如果说大模型是发动机,那 LangChain 就是那套把发动机装进车里的传动系统。

LangChain 是什么:拆开看看
简单说,LangChain 是一套**构建 LLM 应用的模块化工具集**,用 Python 和 JavaScript 双语言支持。它的核心理念就一句话:
把大模型应用开发从”从零手搓”变成”乐高积木式组装”。
官方将框架拆成三个层面:
**LangChain Libraries** — 核心库,包含所有基础抽象和模块。下面细讲。
**LangServe** — 一键把你的 Chain 变成 REST API,基于 FastAPI,部署友好。
**LangSmith** — 调试、测试、监控平台,相当于 LLM 应用的 Chrome DevTools。
而 Libraries 内部又组织成 6 大模块,接下来挨个讲。
六大核心模块:LangChain 的基本功
1. Model I/O — 与模型对话的基础
这是跟大模型打交道的门户,包括三个子组件:
– **Models**:抽象了 OpenAI、Anthropic、本地部署的 Ollama 等各类模型的调用接口。切换模型提供方只需要改两行代码,不用重构整个应用。
– **Prompts**:提示模板(PromptTemplate、ChatPromptTemplate),支持变量插值,告别 copy-paste 式写提示词。
– **Output Parsers**:将模型返回的自由文本结构化,比如解析成 JSON、逗号分隔列表、或者自定义的 Pydantic 对象。
举个极简例子:
“`python
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model=”gpt-4″, temperature=0.7)
template = “用一段话解释什么是 {concept},要通俗易懂。”
prompt = PromptTemplate.from_template(template)
chain = prompt | llm # LCEL 管道语法,后面会讲
result = chain.invoke({“concept”: “RAG”})
print(result.content)
“`
2. Retrieval — 让模型学会”查资料”
大模型的知识截止于训练数据,但你的业务数据是活的。Retrieval 模块就是用来解决这个问题的,也就是流行的 **RAG(Retrieval Augmented Generation,检索增强生成)** 架构。
典型流程:
1. **Document Loaders**:从 PDF、网页、数据库、Notion 等各种源加载文档
2. **Text Splitters**:把长文本切块,保证每个 chunk 大小适中
3. **Embeddings**:把文本转成向量
4. **Vector Stores**:存到向量数据库(Chroma、Pinecone、Weaviate 等)
5. **Retrievers**:根据用户查询,召回最相关的文本块
这整套流程 LangChain 都封装好了,一行 `from langchain.vectorstores import Chroma` 搞定。
3. Agents — 给模型装”手脚”
Agent 是 LangChain 最酷的部分。它让 LLM 不仅能”说”,还能”做”——根据用户意图自主决定调用什么工具、以什么顺序执行。
常用的 Agent 类型:
– **OpenAI Functions Agent**:让 LLM 输出结构化的函数调用参数
– **ReAct Agent**:基于”思考-行动-观察”循环
– **自定义 Agent**:你可以注册自己的工具,比如执行 SQL 查询、发邮件、访问内部 API
“`python
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import tool
@tool
def search_weather(city: str) -> str:
“””查询指定城市的天气”””
# 假装调了天气 API
return f”{city} 今天晴,25°C”
tools = [search_weather]
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
agent_executor.invoke({“input”: “北京今天天气怎么样?”})
“`
4. Chains — 串联一切
Chain 是 LangChain 的核心抽象,代表”多个步骤的有序执行”。早期 LangChain 用专门的 Chain 类(LLMChain、SequentialChain 等),现在统一用 **LCEL(LangChain Expression Language)**。
LCEL 用 `|` 管道符把组件串起来,和 Unix 管道异曲同工:
“`python
chain = prompt | llm | output_parser
result = chain.invoke(input_data)
“`
这种写法简洁、类型安全、支持流式输出和并行执行,也是 LangChain v0.2+ 推荐的唯一写法。
5. Memory — 让对话”记得住”
没有 Memory 的对话就像金鱼——7秒就忘。Memory 模块提供多种记忆策略:
– **ConversationBufferMemory**:完整保存历史
– **ConversationSummaryMemory**:摘要式记忆,省 token
– **ConversationBufferWindowMemory**:只记住最近 N 轮
– **VectorStoreRetrieverMemory**:基于向量检索的长程记忆
6. Callbacks — 监控与调试
Callback 系统让你能在 LLM 调用的各个生命周期插入自定义逻辑——打日志、算耗时、触发告警、流式输出。对于上生产环境的 LLM 应用来说,Callback 就是保命符。

LangChain 能做什么?7个真实场景
场景1:智能客服 RAG 系统
把企业知识库文档导入 → 切片 → 向量化,Agent 根据用户提问召回相关片段,结合 LLM 生成答案。**OpenAI 自己的客服系统就是用类似方案搭的。**
场景2:代码审查助手
Agent 调用代码搜索工具 + 静态分析工具,将结果喂给 LLM,自动生成 PR Review 意见。Github Copilot 不开放的能力,LangChain + Claude 可以自己搭。
场景3:SQL 自然语言查询
用户说”上个月销售额Top10的商品”,Agent 自动生成 SQL → 执行查询 → 格式化结果返回。**非技术团队的自助数据分析神器。**
场景4:自动化报告生成
从数据库拉数据 → 调用外部 API 补充信息 → 生成 Markdown 报告 → 发送邮件。LangChain 的 Sequential Chain + Custom Tool 可以编排整套流程。
场景5:多模型协调
用 GPT-4 做规划,用本地部署的 Llama 3 做敏感数据处理,用 Claude 做长文档总结。LangChain 支持在一个应用里同时调用多个模型。
场景6:社交内容批量生产
A 生成文案 → B 配图描述 → C 检查合规 → D 定时发布。每一步都是一个 Chain,可以用 LangGraph 编排有状态的工作流。
场景7:AI 编程助手(你的专属 Copilot)
整个代码库做 RAG 索引 → Agent 可以搜索代码、读取文件、执行命令。这就是 Cursor、Windsurf 等工具背后的模式。
LCEL:为什么它改变了游戏规则
LCEL(LangChain Expression Language)是 LangChain v0.1.0 引入的声明式语法,在 v0.2 成为一等公民。
**传统写法:**
“`python
chain = LLMChain(llm=llm, prompt=prompt, output_parser=parser)
chain.run(input=”hello”)
“`
**LCEL 写法:**
“`python
chain = prompt | llm | parser
chain.invoke({“input”: “hello”})
“`
区别不只是少打几个字。LCEL 天然支持:
– **流式输出**:`resp = chain.stream(…)` 逐 token 返回
– **并行执行**:`RunnableParallel` 让多个分支同时跑
– **回退机制**:`chain.with_fallbacks([backup_chain])` 主链挂了自动切备用
– **批量处理**:`chain.batch([…])` 批量调用
对于前端转 LLM 开发的工程师来说,这种管道式的思维转换成本极低——和 Promise Chain、Middleware 没啥区别。
LangGraph:迈向复杂工作流
如果你的应用不是简单的”输入→输出”线性流程,而是像客服系统那样需要多轮工具调用、条件分支、人类介入——那就需要 **LangGraph**。
LangGraph 在 LangChain 基础上增加了**有状态图**的能力。它受 Google Pregel 论文启发,支持循环(不是 DAG!),每个节点可以有自己独立的状态。
“`python
from langgraph.graph import StateGraph
# 定义状态
class AgentState(TypedDict):
messages: list
next_step: str
# 定义节点
def call_model(state):
# 调用 LLM
return {“messages”: [response]}
def should_continue(state):
# 条件分支
return “continue” if state[“messages”][-1].has_tool_calls else “end”
# 构建图
graph = StateGraph(AgentState)
graph.add_node(“agent”, call_model)
graph.add_conditional_edges(“agent”, should_continue)
“`
这些是 LangChain 生态中向前端开发和 AI Agent 最接近的东西——懂状态管理的前端工程师上手 LangGraph 几乎零门槛。
与其他框架的对比
| 框架 | 定位 | 适合人群 | 上手难度 |
|---|---|---|---|
| LangChain | 全栈 LLM 应用框架 | 通用开发者 | 中等 |
| LlamaIndex | 数据索引与 RAG 专精 | 搜索/知识库开发者 | 较低 |
| Semantic Kernel (微软) | 企业级 .NET/Python 集成 | .NET 生态开发者 | 中等偏低 |
| Vercel AI SDK | 前端友好,Edge 优先 | Next.js/React 开发者 | 低 |
选型建议:**通用场景选 LangChain,纯搜索场景选 LlamaIndex,在微软生态里选 Semantic Kernel,纯前端全栈(带 edge 部署需求)选 Vercel AI SDK。**
入坑建议
如果你是一个刚接触 LLM 开发的前端工程师,我的建议路径:
1. **先别急着上 LangChain**:先用原生 API 调一次 GPT/Claude,感受一下”从零手搓”是什么体验
2. **用 LCEL 写一条链**:理解 `|` 管道的思维
3. **搭一个简单的 RAG 系统**:找一个 PDF 文档,用 Document Loader + Chroma + Retriever 做一个”问我的文档”应用
4. **写一个 Agent**:给它一个搜索工具和一个计算器工具,问它”2024年奥运会金牌数除以圆周率是多少”
5. **了解 LangGraph**:当你的流程需要状态和循环时再学,不要一上来就搞
LangChain 迭代很快,社区也很卷,看文档永远比看博客更靠谱——但中文开发者可以直接看 https://langchain.com.cn 的中文翻译版文档。
写在最后
LLM 应用开发正在从”极客玩具”走向”生产级工程”,而 LangChain 是目前最成熟的脚手架。它不一定是最优雅的框架,但它可能是目前**对开发者最友好、生态最完善、社区最活跃**的选择。
就像 jQuery 当年降低了 DOM 操作的门槛一样,LangChain 正在降低 LLM 应用开发的门槛。错过了移动互联网和云原生没有关系,**LLM 应用开发这波,现在上车刚刚好。**
—
*参考来源:*
– *LangChain 官方文档 https://python.langchain.com*
– *LangChain 中文社区站 https://langchain.com.cn*
– *腾讯云开发者社区 – LangChain 入门指南*
📖 推荐阅读
如果你对这个方向感兴趣,以下几篇值得一看: