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 扩展,从源码解析它是如何实现"演化型进程"。

相关推荐
缘友一世7 小时前
LangGraph智能体(天气和新闻助手)开发与部署
语言模型·langchain·大模型·llm·langgraph
巴厘猫12 小时前
Java开发者新机遇:LangChain4j——在Java中构建LLM应用的利器
java·后端·langchain
大志说编程15 小时前
LangChain框架入门02:开发环境配置
langchain
AI大模型16 小时前
LangChain框架入门01:LangChain是什么?
langchain·llm·agent
sky丶Mamba20 小时前
LangChain和LangGraph 里面的 `create_react_agent`有什么不同
langchain·agent·langgraph
老周聊大模型2 天前
LangChain替代框架深度横评:轻量化、企业级、垂直专精的技术博弈
langchain·llm·agent
Python测试之道2 天前
用LangGraph实现聊天机器人记忆功能的深度解析
人工智能·langchain·prompt
都叫我大帅哥2 天前
我给大模型装上“记忆黄金券”:LangChain的ConversationSummaryBufferMemory全解析
python·langchain·ai编程
缘友一世2 天前
基于LangGraph Cli的智能数据分析助手
langchain·llm·agent·langgraph