菜单

应用和使用模式

相关源文件

LangChain 使开发人员可以通过组合语言模型与其他组件来构建各种由 LLM 驱动的应用程序。本页介绍了最常见的应用程序模式、它们的架构和实现方法。

LangChain 应用程序的主要类别包括:

  • 简单 LLM 应用:基本提示 + 模型链,用于翻译和文本生成等任务
  • 检索增强生成 (RAG):将 LLM 与外部知识源相结合的应用
  • 聊天机器人:具有记忆和上下文管理功能的对话式应用程序
  • 代理:使用 LLM 来推理和执行工具调用的动态系统
  • 提取:从非结构化文本中提取结构化数据的应用程序
  • 问答:针对各种数据源(SQL、图形、文档)回答问题的系统

每种模式都利用不同的 LangChain 组件和架构方法来解决特定类型的问题。

常见的应用程序模式

简单 LLM 应用

最基础的 LangChain 应用将提示模板与语言模型结合起来,以执行翻译、文本生成或分类等任务。

基本 LLM 链架构

来源:docs/docs/tutorials/llm_chain.ipynb18-30 docs/docs/how_to/index.mdx23-27

关键组件

  • ChatPromptTemplate 用于构建输入
  • ChatOpenAIChatAnthropic 等聊天模型
  • 可选的输出解析器,用于结构化响应

检索增强生成 (RAG)

RAG 应用通过从外部知识源检索相关信息来增强 LLM 的响应。这是最受欢迎的 LangChain 应用模式之一。

RAG 应用架构

来源:docs/docs/tutorials/rag.ipynb30-55 docs/docs/how_to/index.mdx242-252

关键组件

  • 文档加载器(WebBaseLoader, PyPDFLoader
  • 文本分割器(RecursiveCharacterTextSplitter
  • 嵌入模型(OpenAIEmbeddings
  • 向量存储(InMemoryVectorStore, Chroma
  • 用于相似性搜索的检索器

带有记忆的聊天机器人

聊天机器人应用维护对话历史,以实现上下文多轮交互。

聊天机器人应用架构

来源:docs/docs/tutorials/chatbot.ipynb240-270 docs/docs/how_to/index.mdx263-272

关键组件

  • langgraph.StateGraph 用于对话编排
  • MemorySaver 用于持久化
  • MessagesState 用于消息管理

代理应用

代理使用 LLM 作为推理引擎,以动态确定调用哪些工具以及如何根据工具输出来响应。

代理应用架构

来源:docs/docs/tutorials/agents.ipynb40-80 docs/docs/how_to/index.mdx199-208

关键组件

  • TavilySearchResults 用于网络搜索
  • LangGraph 的 create_react_agent
  • 聊天模型中的工具调用功能

数据提取

提取应用使用结构化输出功能从非结构化文本中提取特定信息。

提取应用架构

来源:docs/docs/tutorials/extraction.ipynb18-25 docs/docs/how_to/structured_output.ipynb23-49

关键组件

  • with_structured_output() 方法
  • Pydantic 模型用于模式定义
  • 少量示例以提高性能

问答应用

SQL 问答

SQL QA 应用允许用户就数据库中的结构化数据提出自然语言问题。

SQL QA 应用架构

来源:docs/docs/tutorials/sql_qa.ipynb28-35 docs/docs/how_to/index.mdx285-294

关键组件

  • SQLDatabase 工具用于数据库连接
  • SQL 生成工具
  • 查询验证和执行

图数据库问答

类似于 SQL QA,但用于图数据库,允许在连接的数据上进行自然语言查询。

来源:docs/docs/how_to/index.mdx295-302

文本处理应用

摘要生成

摘要应用使用各种策略处理大型文档并生成简洁的摘要。

摘要应用模式

来源:docs/docs/tutorials/summarization.ipynb28-50 docs/docs/how_to/index.mdx303-311

关键组件

  • 文档处理策略(stuff, map-reduce, refine)
  • RecursiveCharacterTextSplitter 用于分块
  • LangGraph 用于编排

工具集成模式

创建自定义工具

LangChain 提供了多种方法来创建代理可以使用的工具。

工具创建模式

来源:docs/docs/how_to/custom_tools.ipynb40-85 docs/docs/how_to/tool_calling.ipynb56-99

关键模式

  • 基于函数的工具(使用 @tool
  • 带模式验证的结构化工具
  • 继承 BaseTool 的自定义工具类

工具调用工作流

工具调用使 LLM 能够执行函数并在其响应中使用结果。

来源:docs/docs/how_to/tool_calling.ipynb31-50 docs/docs/how_to/tool_results_pass_to_model.ipynb

使用 LangGraph 进行应用编排

现代 LangChain 应用越来越多地使用 LangGraph 进行复杂的编排和状态管理。

LangGraph 应用模式

来源:docs/docs/tutorials/rag.ipynb575-665 docs/docs/tutorials/chatbot.ipynb248-280

关键 LangGraph 组件

  • 用于定义应用程序流程的 StateGraph
  • MemorySaver 用于持久化
  • 复杂工作流的状态管理
  • 基于节点的应用程序架构

流式传输和实时模式

流式响应

许多应用程序通过流式传输响应来改善用户体验。

来源:docs/docs/how_to/streaming.ipynb47-75 docs/docs/tutorials/llm_chain.ipynb211-240

事件流式传输

高级应用程序可以流式传输中间事件和工具调用。

来源:docs/docs/how_to/tool_stream_events.ipynb

实现示例

RAG 应用实现

完整的 RAG 应用结合了文档索引、检索和生成

来源:docs/docs/tutorials/rag.ipynb210-270

Agent 应用实现

来源:docs/docs/tutorials/agents.ipynb45-88

聊天机器人实现

来源:docs/docs/tutorials/chatbot.ipynb250-280

关键实现细节

链实现

所有链都继承自基础 Chain 类并实现两个关键方法

  • 用于同步执行的 _call
  • 用于异步执行的 _acall

基础 Chain 类处理输入验证、内存管理、回调和输出准备。

来源:libs/langchain/langchain/chains/base.py298-320

Agent 实现

Agent 组合了

  1. 一个语言模型(推理引擎)
  2. 一组工具
  3. 一个执行组件

来源:docs/docs/tutorials/agents.ipynb45-57

链与 Agent 的区别

方面智能体
决策制定预定义流程动态(由 LLM 决定)
工具使用可选,预定义动态,按需
循环通常不循环可执行多个操作
实现继承 Chain通常结合 LLM 和工具 + 执行器
用例结构化任务,步骤清晰复杂推理,探索
可组合性高度可组合通常作为独立单元工作

来源:docs/docs/tutorials/rag.ipynb220-240 docs/docs/tutorials/agents.ipynb21-32

迁移和未来方向

LangChain 有两代 Agent 实现

  1. 旧版 AgentExecutor 方法
  2. 较新的基于 LangGraph 的 Agent

对于新应用,LangGraph Agent 因其灵活性和控制力而通常更受推荐。

来源:docs/docs/how_to/agent_executor.ipynb18-22 docs/docs/how_to/migrate_agent.ipynb