LangChain 技术架构文档
|
|
|
|---|---|
|
|
D:\ai\source-code\langchain |
|
|
|
|
|
|
|
|
|
1. 仓库结构
LangChain 采用 Monorepo,按职责拆成多个独立 PyPI 包,核心原则写在 langchain_core 模块文档中:接口定义在 core,第三方集成在 partners,业务编排在上层 langchain。

|
|
|
|
|---|---|---|
langchain-core |
libs/core/langchain_core/ |
|
langchain |
libs/langchain_v1/langchain/ |
|
langchain-* |
libs/partners/{vendor}/ |
|
langchain-text-splitters |
libs/text-splitters/ |
|
langchain-tests |
libs/standard-tests/ |
|
Partners 集成列表(当前仓库):anthropic、chroma、deepseek、exa、fireworks、groq、huggingface、mistralai、nomic、ollama、openai、openrouter、perplexity、qdrant、xai。
2. 分层架构

3. 核心协议:Runnable
Runnable 是 LangChain 的统一执行协议。所有可调用组件(模型、Prompt、Parser、Tool、Chain)均实现同一组方法,支持同步/异步、批处理、流式输出。

关键源码:libs/core/langchain_core/runnables/base.py
|
|
|
|
|---|---|---|
RunnableSequence |
a | b | c |
|
RunnableParallel |
{k: r}
RunnableParallel(...) |
|
RunnableLambda |
@chain
|
|
RunnableBinding |
.bind()
.with_config() |
|
RunnableBranch |
|
|
RunnableWithFallbacks |
.with_fallbacks([...]) |
|
RunnableWithRetry |
.with_retry(...) |
|
3.1 invoke 执行路径

3.2 管道组合与流式传播

RunnableSequence 的流式语义:若链上所有组件实现 transform(),则 token 可逐块穿透;若中间存在阻塞组件(如需完整 prompt 才生成的 LLM),流式在阻塞点之后才开始。
4. 语言模型抽象
4.1 类层次

关键源码:libs/core/langchain_core/language_models/chat_models.py
BaseChatModel 继承 Runnable,因此模型调用自动具备:
-
invoke/stream/batch -
Callback 注入( on_chat_model_start/on_llm_end) -
LangSmith tracing 参数过滤 -
Tool binding( bind_tools()) -
结构化输出( with_structured_output())
4.2 ChatModel 单次调用时序

5. 消息与 Prompt 体系

消息类型统一为 BaseMessage,支持 content blocks(text / image / tool_call)。Prompt 模板渲染后产出 ChatPromptValue,作为 ChatModel 输入。
6. Tool 执行架构
BaseTool 继承 RunnableSerializable,通过 Pydantic 校验参数 schema,与 OpenAI function calling 格式互通。

关键源码:libs/core/langchain_core/tools/base.py
Tool 可通过 @tool 装饰器从普通函数生成,自动提取 docstring 作为 description、类型注解作为 args schema。
7. Agent 架构(LangChain v1)
LangChain v1 的 Agent 不再自研循环引擎,而是基于 LangGraph StateGraph 编译为有状态图。

7.1 create_agent 工厂
入口:libs/langchain_v1/langchain/agents/factory.py → create_agent()
|
|
|
|---|---|
model |
"provider:model" 字符串 |
tools |
|
middleware |
AgentMiddleware
|
response_format |
|
checkpointer |
|
interrupt_before/after |
|
7.2 Middleware 拦截链

内置 Middleware(libs/langchain_v1/langchain/agents/middleware/):
|
|
|
|---|---|
model_retry
tool_retry |
|
model_fallback |
|
human_in_the_loop |
|
summarization |
|
tool_call_limit
model_call_limit |
|
pii |
|
context_editing |
|
8. RAG 与索引
8.1 组件关系

8.2 增量索引流程
index() API(libs/core/langchain_core/indexing/api.py)通过 RecordManager 追踪已索引文档指纹,实现 upsert / 删除过期记录。

9. 可观测性架构

关键源码:
-
libs/core/langchain_core/callbacks/manager.py— Run 生命周期管理 -
libs/core/langchain_core/tracers/— LangSmith 导出 -
libs/core/langchain_core/runnables/config.py—RunnableConfig(tags、metadata、callbacks、run_id)
9.1 Run 树结构

每个 Run 携带 run_id、parent_run_id,形成树形 trace,可导出至 LangSmith。
10. 序列化与持久化
实现 Serializable 的组件可通过 dumps() / loads() 序列化为 JSON,用于 LangServe 部署或配置存储。

关键源码:
-
libs/core/langchain_core/load/serializable.py -
libs/core/langchain_core/load/dump.py
序列化格式使用 lc 命名空间标识类型:{"lc": 1, "type": "constructor", "id": [...], "kwargs": {...}}。
11. Runnable 图可视化
Runnable.get_graph() 将组合链导出为 DAG,支持 ASCII / Mermaid / PNG 渲染。

关键源码:libs/core/langchain_core/runnables/graph.py、graph_mermaid.py
12. 典型调用模式对照
12.1 LCEL 链式调用
chain = prompt | model | output_parser
result = chain.invoke({"topic": "AI"})
12.2 Agent 调用
from langchain.agents import create_agent
agent = create_agent("openai:gpt-4o", tools=[search_tool])
result = agent.invoke({"messages": [("user", "查天气")]})
12.3 模式对比

13. 依赖关系总览

|
|
|
|---|---|
langgraph |
|
langsmith |
|
pydantic |
|
langchain-protocol |
|
14. 关键文件索引
|
|
|
|
|---|---|---|
|
|
libs/core/langchain_core/runnables/base.py |
|
|
|
libs/core/langchain_core/runnables/config.py |
|
|
|
libs/core/langchain_core/language_models/chat_models.py |
|
|
|
libs/core/langchain_core/tools/base.py |
|
|
|
libs/core/langchain_core/callbacks/manager.py |
|
|
|
libs/core/langchain_core/indexing/api.py |
|
|
|
libs/core/langchain_core/load/dump.py |
|
|
|
libs/langchain_v1/langchain/agents/factory.py |
|
|
|
libs/langchain_v1/langchain/agents/middleware/ |
|
|
|
libs/core/langchain_core/runnables/graph.py |
|
15. 架构设计要点
-
接口与实现分离: langchain-core零第三方依赖,集成全部外置到partners。 -
Runnable 作为统一契约:组合( |)、批处理、流式、tracing 一次实现、处处可用。 -
Agent 委托 LangGraph:LangChain 专注 Middleware 与结构化输出,状态机由 LangGraph 承担。 -
Callback 树形传播:所有组件共享同一套可观测性钩子,无需侵入业务代码。 -
Serializable 可部署:Chain 可 JSON 化,支撑 LangServe 等运行时加载。
夜雨聆风