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

相关推荐
FreeCode1 小时前
LangSmith Studio 调试智能体
python·langchain·agent
喜欢吃豆14 小时前
LangChain v1.0 技术研究报告:架构范式向智能体中间件与图运行时的演进
中间件·架构·langchain·大模型
百***976416 小时前
LangChain-08 Query SQL DB 通过GPT自动查询SQL
数据库·sql·langchain
小陈phd18 小时前
RAG从入门到精通(四)——结构化数据读取与导入
人工智能·langchain
唐诗18 小时前
使用 LangChain 创建一个简单的 Agent
前端·langchain·llm
骑猪兜风2331 天前
大厂集体押注 SDD!阿里、腾讯、亚马逊都在用的规范驱动开发,优势在哪?坑怎么避?
人工智能·驱动开发·经验分享·langchain·ai编程
FreeCode1 天前
基于LangSmith的提示词工程
python·langchain·agent
serve the people2 天前
HTML Document Loaders in LangChain
chrome·langchain·html
AI大模型2 天前
5步构建企业级RAG应用:Dify与LangChain v1.0集成实战
langchain·llm·agent
FreeCode2 天前
LangSmith本地部署LangGraph应用
python·langchain·agent