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

相关推荐
THMAIL18 小时前
大模型0基础开发入门与实践:第11章 进阶:LangChain与外部工具调用
开发语言·langchain·php
掘我的金2 天前
24_LangGraph子图可控性
langchain
掘我的金2 天前
23_LangGraph持久化管理
langchain
掘我的金3 天前
22_LangGraph核心组件
langchain
聚客AI3 天前
📚LangChain框架下的检索增强:5步构建高效智能体系统
人工智能·langchain·llm
灵海之森3 天前
langgraph快速搭建agent后端和react前端
langchain
大志说编程3 天前
LangChain框架入门18: 十分钟带你搞定LLM工具调用
python·langchain·ai编程
玲小珑3 天前
LangChain.js 完全开发手册(一)AI 应用开发入门
前端·langchain·ai编程
ReedFoley3 天前
【笔记】动手学Ollama 第五章 Ollama 在 LangChain 中的使用 - Python 集成
笔记·langchain
AI大模型3 天前
万字长文!从 0 到 1 搭建基于 LangGraph 的 AI Agent
langchain·llm·agent