模块
以下是构建应用程序时可以使用的核心构模块以及解决了哪些问题。
提示模板
提示模板负责将用户输入格式化为可以传递给语言模型的格式。
- 如何:使用少量示例
- 如何:在聊天模型中使用少量示例
- 如何:部分格式化提示模板
- 如何:组合提示
示例选择器
示例选择器负责选择正确的少量示例以传递给提示。
- 如何:使用示例选择器
- 如何:按长度选择示例
- 如何:按语义相似性选择示例
- 如何:按语义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类
- 如何:编写自定义检索器类
- 如何:编写自定义文档加载器
- 如何:编写自定义输出解析器类
- 如何:创建自定义回调处理程序
- 如何:定义自定义工具