Skip to content

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 ConnectionLoader、Splitter、VectorStore 一条龙
Chain / LCEL用管道组合上述组件
AgentReAct / Tool Calling 循环

LangGraph(6.6 专讲)是 LangChain 团队的状态图扩展,适合复杂 Agent 与人工审批节点。

第 2 步:最小可运行示例:三行链式调用

安装(Python):

bash
pip install langchain langchain-openai
export OPENAI_API_KEY=sk-...
python
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 | parser

Agent 典型形态:

create_react_agent(llm, tools) → AgentExecutor → stream

LangChain 的价值在于这些模式有现成组件;代价是抽象层较厚,升级版本时需关注 breaking changes。

第 4 步:LangChain.js 与 Python 版本

本课程示例以 Python 为主(生态最完整),Node 侧对应包为 @langchain/core@langchain/openai 等,LCEL 语法与 Python 高度一致:

typescript
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)。

动手练习

  1. 安装 langchain 与 langchain-openai,跑通上面的三行链
  2. 把 system 提示改成「只输出 JSON:{answer, confidence}」,观察输出格式变化(Parser 留到 6.4)
  3. 列出你当前项目里 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。