Skip to content

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)
RAGDocumentLoader + 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)都实现它,因此可以:

python
chain = prompt | model | output_parser
result = chain.invoke({"input": "介绍一下 RAG"})

特点:

  • LCEL(LangChain Expression Language)就是 Runnable 的链式语法;
  • 自动支持 stream(流式)、batch(并发)、async 三种执行模式;
  • 可以被 LangSmith 完整追踪。

2.2 ChatModelMessages

  • ChatModel 是顶层接口。ChatOpenAIChatAnthropicChatGoogleGenerativeAIChatOllama 等都是它的实现。
  • 消息类型: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_agentcreate_tool_calling_agentcreate_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)准备好以后:

python
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。"}))

工具调用版本:

python
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)
语言PythonJava / Kotlin / Scala
项目起源2022-10,Harrison Chase2023,LangChain 团队官方
链式表达LCEL prompt | model | parserAiServices 动态代理接口
提示词模板ChatPromptTemplatePromptTemplate
工具@tool 装饰器@Tool 注解
AgentLangGraph 推荐 / 旧 AgentExecutorLangGraph4j / AiServices + AgentScope
检索Retriever + VectorStoreEmbeddingStore + EmbeddingModel
可观测LangSmith + OpenTelemetryMicrometer / 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、评估与可观测、生产化部署等专题。)