核心模块(Modules)
概述

模块

以下是构建应用程序时可以使用的核心构模块以及解决了哪些问题。

提示模板

提示模板负责将用户输入格式化为可以传递给语言模型的格式。

  • 如何:使用少量示例
  • 如何:在聊天模型中使用少量示例
  • 如何:部分格式化提示模板
  • 如何:组合提示

示例选择器

示例选择器负责选择正确的少量示例以传递给提示。

  • 如何:使用示例选择器
  • 如何:按长度选择示例
  • 如何:按语义相似性选择示例
  • 如何:按语义n-gram重叠选择示例
  • 如何:按最大边际相关性选择示例

聊天模型

聊天模型是较新的语言模型形式,接收消息并输出消息。

  • 如何:进行函数/工具调用
  • 如何:让模型返回结构化输出
  • 如何:缓存模型响应
  • 如何:获取日志概率
  • 如何:创建自定义聊天模型类
  • 如何:流式返回响应
  • 如何:跟踪令牌使用情况
  • 如何:跨供应商跟踪响应元数据
  • 如何:让最终用户选择他们的模型

LLMs

LangChain所称的LLM是较旧的语言模型形式,接收字符串输入并输出字符串。

  • 如何:缓存模型响应
  • 如何:创建自定义LLM类
  • 如何:流式返回响应
  • 如何:跟踪令牌使用情况
  • 如何:使用本地LLMs

输出解析器

输出解析器负责将LLM的输出解析为更结构化的格式。

  • 如何:使用输出解析器将LLM响应解析为结构化格式
  • 如何:解析JSON输出
  • 如何:解析XML输出
  • 如何:解析YAML输出
  • 如何:在输出解析错误时重试
  • 如何:尝试修复输出解析中的错误
  • 如何:编写自定义输出解析器类

文档加载器

文档加载器负责从各种来源加载文档。

  • 如何:加载CSV数据
  • 如何:从目录加载数据
  • 如何:加载HTML数据
  • 如何:加载JSON数据
  • 如何:加载Markdown数据
  • 如何:加载Microsoft Office数据
  • 如何:加载PDF文件
  • 如何:编写自定义文档加载器

文本拆分器

文本拆分器将文档拆分为可用于检索的块。

  • 如何:递归拆分文本
  • 如何:按HTML标题拆分
  • 如何:按HTML部分拆分
  • 如何:按字符拆分
  • 如何:拆分代码
  • 如何:按Markdown标题拆分
  • 如何:递归拆分JSON
  • 如何:将文本拆分为语义块
  • 如何:按令牌拆分

嵌入模型

嵌入模型将一段文本转换为数值表示。

  • 如何:嵌入文本数据
  • 如何:缓存嵌入结果

向量存储

向量存储是可以有效存储和检索嵌入的数据库。

  • 如何:使用向量存储检索数据

检索器

检索器负责接收查询并返回相关文档。

  • 如何:使用向量存储检索数据
  • 如何:生成多个查询以检索数据
  • 如何:使用上下文压缩来压缩检索到的数据
  • 如何:编写自定义检索器类
  • 如何:向检索结果添加相似度分数
  • 如何:结合多个检索器的结果
  • 如何:重新排序检索到的结果以减轻“中间丢失”效应
  • 如何:为文档生成多个嵌入
  • 如何:为块检索整个文档
  • 如何:生成元数据过滤器
  • 如何:创建时间加权检索器
  • 如何:使用混合向量和关键词检索

索引

索引是使向量存储与基础数据源保持同步的过程。

  • 如何:重新索引数据以使向量存储与基础数据源保持同步

工具

LangChain工具包含工具的描述(传递给语言模型)以及要调用的函数的实现。

  • 如何:创建自定义工具
  • 如何:使用内置工具和内置工具包
  • 如何:使用聊天模型调用工具
  • 如何:向LLMs和聊天模型添加临时工具调用功能
  • 如何:将运行时值传递给工具
  • 如何:向工具使用添加人类参与
  • 如何:处理调用工具时的错误

多模态

  • 如何:将多模态数据直接传递给模型
  • 如何:使用多模态提示

代理

注意:有关代理的深入操作指南,请查看LangGraph文档。

  • 如何:使用传统LangChain代理(AgentExecutor)
  • 如何:从传统LangChain代理迁移到LangGraph

回调

回调允许你在LLM应用程序的各个阶段进行挂钩。

  • 如何:在运行时传递回调
  • 如何:将回调附加到模块
  • 如何:在模块构造函数中传递回调
  • 如何:创建自定义回调处理程序
  • 如何:在异步环境中使用回调

自定义

所有LangChain组件都可以轻松扩展以支持你自己的版本。

  • 如何:创建自定义聊天模型类
  • 如何:创建自定义LLM类
  • 如何:编写自定义检索器类
  • 如何:编写自定义文档加载器
  • 如何:编写自定义输出解析器类
  • 如何:创建自定义回调处理程序
  • 如何:定义自定义工具