Python LangChain(简介)
这一篇不是"Java 立场"的对比文,而是把 Python 生态里出现最早、社区最大的 LLM 应用框架——LangChain——讲清楚:它是什么、解决了什么、核心抽象长什么样、和
2-LangChain4j(JVM 实现)之间的关系。
为了避免命名困惑,先把名称对齐:
- LangChain(最早,2022-10 由 Harrison Chase 开源):Python / JS 生态的原始框架。
- LangChain.js:LangChain 的 TypeScript 实现。
- LangChain4j:LangChain 的 JVM(Java/Kotlin/Scala) 实现。
- LangGraph / LangGraph4j:LangChain 团队在 LangChain 之上做的"有状态、可分支、可观测"的 Agent 编排图框架。
本篇聚焦 Python 版的 LangChain。
1. 为什么会有 LangChain
LangChain 出现于 2022 年底,那时候离 GPT-3.5 / ChatGPT 引爆只有几个月。Python 团队接入大模型最朴素的做法是:
- 直接
requests.post(openai_url, headers=..., json=...); - 自己维护 prompt 模板和消息历史;
- 自己处理 function calling 的 JSON 解析;
- 自己拼 RAG:加载文档 -> 切分 -> 嵌入 -> 检索 -> 拼 prompt。
这段代码每个项目都得写一遍,跨厂商迁移一次都要重写。LangChain 把这些重复劳动抽象成一套链式 / 可组合的 API。
它解决的核心痛点:
| 痛点 | LangChain 的对应方案 |
|---|---|
| 多厂商切换 | ChatModel 接口,ChatOpenAI / ChatAnthropic / ChatOllama 同形 |
| Prompt 模板复用 | PromptTemplate / ChatPromptTemplate / MessagesPlaceholder |
| 多轮对话 | ChatMessageHistory + RunnableWithMessageHistory |
| 工具调用 | bind_tools / ToolNode(LangGraph) |
| RAG | DocumentLoader + splitter + Embeddings + VectorStore + Retriever + LCEL 链 |
| 与外部系统集成 | 大量 Loader(Notion / Slack / GitHub / S3 / DB)与 Tool(搜索 / 计算 / HTTP) |
| 可观测 | LangSmith;以及与 OpenInference / OpenTelemetry 的集成 |
2. 设计哲学与核心抽象
LangChain 的接口虽然多,但几乎所有能力都收敛在下面几条主线:
2.1 Runnable 协议
Runnable 是 LangChain 的"通用可执行单元"接口,所有组件(模型、Prompt、解析器、检索器、Agent)都实现它,因此可以:
chain = prompt | model | output_parser
result = chain.invoke({"input": "介绍一下 RAG"})特点:
- LCEL(LangChain Expression Language)就是
Runnable的链式语法; - 自动支持
stream(流式)、batch(并发)、async三种执行模式; - 可以被 LangSmith 完整追踪。
2.2 ChatModel 与 Messages
ChatModel是顶层接口。ChatOpenAI、ChatAnthropic、ChatGoogleGenerativeAI、ChatOllama等都是它的实现。- 消息类型:
SystemMessage/HumanMessage/AIMessage/ToolMessage,与 OpenAI 多角色协议对齐。
2.3 Retriever 与向量库
Retriever是检索侧的统一接口,等价于 LangChain4j 里的EmbeddingStore上再加一层语义。- 内置实现涵盖 Pinecone、Chroma、Weaviate、Qdrant、Milvus、PGvector、FAISS 等。
2.4 Tools 与 Agent
Tool把一个 Python 函数暴露给模型,函数 docstring 通常会被用作"工具描述"。- Agent(
create_react_agent、create_tool_calling_agent、create_openai_functions_agent等)负责"决定下一步调哪个工具、什么时候停止"。
2.5 LangGraph(走向有状态 Agent)
LangGraph 是 LangChain 团队在 2024 年推出的Agent 编排框架,核心思想是把 Agent 建模为有向图:
- 节点(Nodes):模型调用、工具调用、人工审批、子 Agent 等;
- 边(Edges):普通流转、条件分支、循环;
- 状态(State):跨节点共享,通常是
messages列表 + 自定义字段。
LangGraph 解决了 LangChain 早期 Agent 难调试、不可暂停、不便做"人在回路"的痛点,目前官方主推的 Agent 写法已经从 AgentExecutor 全面转向 LangGraph。
3. 一个最小可运行的例子
依赖(langchain / langchain-openai)准备好以后:
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 1. 模型
model = ChatOpenAI(model="gpt-4o-mini")
# 2. Prompt
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个简洁的中文技术助手,回答不超过 200 字。"),
("human", "{question}"),
])
# 3. 拼成链
chain = prompt | model | StrOutputParser()
# 4. 调用
print(chain.invoke({"question": "用一句话解释什么是 RAG。"}))工具调用版本:
from langchain_core.tools import tool
@tool
def current_weather(city: str) -> str:
"""根据城市名查询当前天气。"""
# 真实项目调气象 API
return f"{city} 当前晴,25°C"
llm_with_tools = model.bind_tools([current_weather])
# 进入 AgentExecutor / LangGraph 即可让模型自主决定调用时机整段代码读起来非常接近 LangChain4j 的 Java 版,只是少了一层"动态代理接口"的语法糖;核心抽象几乎一一对应。
4. LangChain vs LangChain4j:对照
| 维度 | LangChain(Python) | LangChain4j(JVM) |
|---|---|---|
| 语言 | Python | Java / Kotlin / Scala |
| 项目起源 | 2022-10,Harrison Chase | 2023,LangChain 团队官方 |
| 链式表达 | LCEL prompt | model | parser | AiServices 动态代理接口 |
| 提示词模板 | ChatPromptTemplate | PromptTemplate |
| 工具 | @tool 装饰器 | @Tool 注解 |
| Agent | LangGraph 推荐 / 旧 AgentExecutor | LangGraph4j / AiServices + AgentScope |
| 检索 | Retriever + VectorStore | EmbeddingStore + EmbeddingModel |
| 可观测 | LangSmith + OpenTelemetry | Micrometer / OpenTelemetry |
| 与 Spring 集成 | 不直接,但可以在 Spring 中调 | 官方 spring-boot-starter-langchain4j |
| 适合场景 | AI 原型、研究、Python 后端 | Java 后端、企业工程化落地 |
两套同源,选哪一套主要看团队技术栈——不需要为了"统一"硬把 Python 的 LangChain 迁到 Java,反之亦然。能跨语言复用的其实是协议(MCP / OpenAI Function Calling / Anthropic Tool Use),不是某一个具体的 SDK。
5. 什么时候用 LangChain / 什么时候不用
5.1 推荐用
- Python 后端 / 数据 / 工具链团队,需要快速搭起 LLM 应用原型并迭代到生产。
- RAG 项目:LangChain + LangSmith 是目前 RAG 评估、可观测、检索 query 改写的"全家桶"。
- 多 Agent / 工作流:LangGraph + LangSmith 是当下调试和回放 Agent 决策最顺手的组合。
- 与 LLM 前沿贴合:新模型、新协议(Structured Output、Tool Use、Computer Use、MCP)通常 LangChain 是最先跟进的一方。
5.2 谨慎评估
- 追求零抽象:LangChain 把很多东西封装得很深,排错时不直接看 HTTP 反而麻烦。
- CPU 敏感的本地推理服务:LangChain 主要是编排层,真正本地化推理靠 Ollama / vLLM / llama.cpp。
- 企业内 Java 单体:Java 团队通常更愿意用 Spring AI 或 LangChain4j,而不是再起一个 Python 服务。
6. 与本目录其它子分类的衔接
- 对照阅读:本目录
1-springAi/springAi-介绍与2-LangChain4j/LangChain4j-介绍分别给出 Spring 与 Java 视角的对应解法。 - 互操作:通过 MCP 协议,LangChain(Python)的服务端工具可以被 LangChain4j / Spring AI 的客户端调用,反之亦然。
- 模型层:Python 侧跑 LangChain 时通常对接
1-模型服务/里的本地 Ollama / vLLM,使用方式与 Java 侧几乎一致(都是 OpenAI 兼容 HTTP)。
7. 进一步阅读
- 官方文档:
https://python.langchain.com/ - LangGraph 文档:
https://langchain-ai.github.io/langgraph/ - LangSmith(可观测 / 评估):
https://docs.smith.langchain.com/ - MCP 协议:理解 LangChain / LangChain4j / Spring AI 之间互操作的关键
(后续本子分类会按需补充:LCEL 与 RAG 流水线、LangGraph 工作流、自建 Tool 与 MCP、评估与可观测、生产化部署等专题。)
