LangChain 概览
🎯 学习目标
- 理解 LangChain 在 LLM 应用栈中的位置:连接模型、数据与工具
- 认识 Model I/O、Data Connection、Chain、Agent 四大模块
- 能判断何时用 LangChain 拼装原型、何时直连 SDK
引言
LangChain 不是大模型本身,而是应用层胶水框架:把 ChatModel、Prompt、文档加载、向量检索、工具调用串成可复用的流水线。本课建立全局地图,后续各节再深入每个模块。
章节正文
第 1 步:LangChain 解决什么问题
在企业 LLM 应用中,你反复遇到相同模式:
- 同一套 Prompt 模板要在多个接口复用
- PDF / Markdown 要加载、切分、Embedding、入库
- 用户问题要先检索再生成
- Agent 要循环调用工具并维护状态
如果每次手写 fetch + 字符串拼接,很快会陷入重复代码与难以测试的困境。LangChain 提供统一抽象:
| 模块 | 职责 |
|---|---|
| Model I/O | 统一 OpenAI、Anthropic、Ollama 等 ChatModel 接口 |
| Prompt Template | 可组合、可版本化的提示词模板 |
| Output Parser | 把模型输出解析为 JSON、Pydantic 对象 |
| Data Connection | Loader、Splitter、VectorStore 一条龙 |
| Chain / LCEL | 用管道组合上述组件 |
| Agent | ReAct / Tool Calling 循环 |
LangGraph(6.6 专讲)是 LangChain 团队的状态图扩展,适合复杂 Agent 与人工审批节点。
第 2 步:最小可运行示例:三行链式调用
安装(Python):
pip install langchain langchain-openai
export OPENAI_API_KEY=sk-...from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_messages([
("system", "你是简洁的技术助手,用中文回答。"),
("human", "{question}"),
])
chain = prompt | ChatOpenAI(model="gpt-4o-mini") | StrOutputParser()
print(chain.invoke({"question": "用一句话解释 RAG"}))这里的 | 就是 LCEL(6.3 详讲):左边输出自动成为右边输入。
第 3 步:与 RAG、Agent 的关系
RAG 链典型形态:
Retriever → format_docs → prompt | llm | parserAgent 典型形态:
create_react_agent(llm, tools) → AgentExecutor → streamLangChain 的价值在于这些模式有现成组件;代价是抽象层较厚,升级版本时需关注 breaking changes。
第 4 步:LangChain.js 与 Python 版本
本课程示例以 Python 为主(生态最完整),Node 侧对应包为 @langchain/core、@langchain/openai 等,LCEL 语法与 Python 高度一致:
import { ChatOpenAI } from "@langchain/openai"
import { ChatPromptTemplate } from "@langchain/core/prompts"
import { StringOutputParser } from "@langchain/core/output_parsers"
const chain = prompt.pipe(model).pipe(new StringOutputParser())
await chain.invoke({ question: "..." })全栈项目常见分工:Python 做 RAG 索引与批处理,Node/Next.js 做 API 与流式 UI(可配合 Vercel AI SDK,见 6.7)。
动手练习
- 安装 langchain 与 langchain-openai,跑通上面的三行链
- 把 system 提示改成「只输出 JSON:{answer, confidence}」,观察输出格式变化(Parser 留到 6.4)
- 列出你当前项目里 3 个适合用 Chain 封装的重复逻辑
常见问题
Q:LangChain 会不会过度设计?
简单 Chat 接口不必引入;当 RAG、多工具 Agent、多模型切换同时出现时,框架能显著减少胶水代码。见 6.7 选型表。
Q:必须用 LangSmith 吗?
不必。LangSmith 是官方观测产品;自建日志、OpenTelemetry 或 promptfoo 也可满足 Eval/Trace 需求(第 7 模块)。
本节小结
LangChain 是应用层框架,核心模块覆盖 Model I/O、Prompt、Parser、数据连接、Chain 与 Agent。用 LCEL 管道可快速拼装 RAG 与对话链;复杂状态机交给 LangGraph。