LangChain 架构总览:现代 AI 应用的基石

一、定位与动机:LangChain 是什么?为何重要?

在大语言模型 (LLM) 被应用于各类环境的时代,组合 LLM 能力和外部系统已成为基础需求。LangChain 作为这样一个专业的编程框架,提供了构建、运行、调用、调试和异常处理所需的 LLM 应用开发全栈能力。

它不仅是"抽象 LLM API 类",而是一个支持运行时模块组合与执行流程组织的框架。旨在为 AI 应用提供:

  • 组合化的扩展组件(接口、工具、内存)
  • 声明式、可绘图、可观测的执行流程
  • 简化 Agent 决策、展示和调试

二、LangChain 最新版本包结构

LangChain 已于 2024年后期完全分离为多个包,同时实现了一套精密的核心设计模式:

核心包结构

包名 功能定位
langchain-core 核心设计:进程模型接口,Runnable 表达式模型,基础 Prompt/内存
langchain 高级组合:Chain/Agent 高层抽象
langchain-community 社区扩展:不同模型/向量库/文档加载器
langgraph 图形性设计:长期有状态 Agent 图网组合
langserve 应用部署:将任何 Runnable 部署为服务
langsmith 可观测化:分段、日志、评估 Agent/链性能

三、核心模型:Runnable + LCEL

LangChain 最核心的设计是 LCEL (LangChain Expression Language),将全部组件抽象为 可执行单元(Runnable)

  • 每个 Prompt/链/模型/内存/工具 都是 Runnable
  • 支持 .invoke() / .stream() / .batch() / .map() / .with_fallbacks()
  • 支持模块组合、流式调用、异常传递、回退与重试等机制,具备强大的运行时灵活性

LCEL 将各类模块统一抽象为 Runnable,对外提供声明式语法,支持将多个执行单元组合成数据驱动的流程链,并可通过图形化工具对执行路径进行可视化追踪与调试。

  • 源代码:libs/core/langchain_core/runnables/base.py
python 复制代码
class Runnable(ABC, Generic[Input, Output]):
    """A unit of work that can be invoked, batched, streamed, transformed and composed.
    可调用、批处理、流式处理、转换和组合的工作单元。
    Key Methods
    ===========

    - **invoke/ainvoke**: Transforms a single input into an output.(将单个输入转换为输出)
    - **batch/abatch**: Efficiently transforms multiple inputs into outputs.(高效地将多个输入转换为输出)
    - **stream/astream**: Streams output from a single input as it's produced.(在单个输入生成时,流式处理输出)
    - **astream_log**: Streams output and selected intermediate results from an input.(流式处理输入的输出和选定的中间结果)
    
    ...

    LCEL and Composition
    ====================

    The LangChain Expression Language (LCEL) is a declarative way to compose Runnables
    into chains. Any chain constructed this way will automatically have sync, async,
    batch, and streaming support.
    LangChain 表达式语言 (LCEL) 是一种将 Runnable 组合成链的声明式方法。任何以这种方式构建的链都将自动支持同步、异步、批处理和流式传输。

    ...
    
    """
  • 示例
python 复制代码
from langchain_core.runnables import RunnableLambda, RunnableMap

chain = RunnableMap({"name": lambda _: "LangChain"}) \
        | RunnableLambda(lambda d: f"Hello, {d['name']}!")

print(chain.invoke({}))  # 输出:Hello, LangChain!

四、模块分层规划

  1. Model I/O (模型调用)

    • ChatModel 接口
    • EmbeddingModel
    • Tokenizer 进行 prompt length 预算
  2. Prompt/Memory (输入/内存)

    • PromptTemplate
    • ConversationMemory, BufferMemory
  3. Chains 链式构造

    • LLMChain
    • SequentialChain / RouterChain / RetrievalQA
  4. Agents

    • initialize_agent
    • AgentExecutor + Tools + ReAct loop
  5. Retriever & VectorStore

    • FAISS / Chroma / Weaviate
    • Retriever 调用 .get_relevant_documents()
  6. LangGraph

    • 设计有状态/多步驱动/异步任务

五、设计模式攻略

  • 抽象层 (Abstract BaseClass) 如 ChatModel/Tool
  • 工厂方法 :通过 from_config.from_chain_type 快捷构造
  • 组合模式 :用 chain 连接各组件
  • 策略模式 :agent 根据 prompt 生成出所需工具调用路径

六、后续系列路线规划

这篇文章是全系列的开篇,我们将逐步揭示其核心模块,包括:

  • Runnable 实现
  • 自定义 Prompt + Memory
  • Agent 决策 + Tool 扩展
  • RetrievalQA 与向量库管理
  • LangGraph 有状态图网
  • LangServe / LangSmith 实际部署

结论

LangChain 已不是一个简单调用 LLM API 的 SDK,而是一套有系统设计、可维护、可实践、可扩展的 LLM 应用平台架构。

理解 LangChain 的设计原则,是我们在复杂工程环境中有效构建和优化 AI 应用性能的关键起点。

接下来我们将逐步手工构造一个 Runnable 扩展,从源码解析它是如何实现"演化型进程"。

相关推荐
BU摆烂会噶16 小时前
【LangGraph】持久化实现的三大能力——时间旅行
数据库·人工智能·python·postgresql·langchain
风停又起17 小时前
从零实现一个最小版 LangChain
langchain
幸福巡礼19 小时前
【LangChain 1.2 实战(一)】 概述
笔记·学习·langchain
茉莉玫瑰花茶20 小时前
LangChain 核心组件 [ 4 ]
langchain
戋风21 小时前
从源码到实战:LangChain4j 1.14 完整学习指南(14 课全解)
langchain
老陈说编程21 小时前
12. LangChain 6大核心调用方法:invoke/stream/batch同步异步全解析,新手也能轻松学会
开发语言·人工智能·python·深度学习·机器学习·ai·langchain
网络工程小王1 天前
【LangChain Output Parser 输出解析器】输出篇
人工智能·学习·langchain
Zfox_1 天前
【LangChain】核心组件(上)
后端·langchain·ai编程
yanghuashuiyue1 天前
Deep Agents 框架-开发部署
langchain·langgraph·deepagents
FrontAI1 天前
深入浅出 LangGraph —— 第12章:多Agent系统架构
人工智能·langchain·ai agent·langgraph