当前位置: 首页 > news >正文

LangChain入门:代理、链、索引

本系列参考LangChain中文教程

代理

代理执行器

代理执行器( Agent Executor )是一个代理( Agent )和一组工具( Tools )

代理执行器负责调用代理,获取动作和动作输入,根据动作引用的工具以及相应的输入调用工具,获取工具的输出,然后将所有这些信息传递回代理,以获取它应该采取的下一个动作。

代理

代理( Agent )是围绕模型的封装,它接收用户输入并返回与 “动作 action ”相对应的响应,以及相应的 “动作输入 action input ”

工具Tool

工具(Tool)是围绕函数的具体抽象,使语言模型可以与之进行交互变得简单。具体而言,工具的接口具有单一的文本输入和单一的文本输出。

工具包 Toolkits

工具包( Toolkits )是一组工具的集合,可以用于解决特定问题或完成特定任务。这些工具包是为了一起使用、相互协作以实现更复杂的目标而组织起来的。使用工具包可以提供更全面、高效的解决方案,因为它们涵盖了解决特定问题所需的各个方面或阶段。

链( Chains )是一个非常通用的概念,它指的是将一系列模块化组件(或其他链)以特定方式组合起来,以实现共同的用例。

最常用的链类型是LLMChain(LLM链),它结合了PromptTemplate(提示模板)、Model(模型)和Guardrails(守卫)来接收用户输入,进行相应的格式化,将其传递给模型并获取响应,然后验证和修正(如果需要)模型的输出。

链(Chain)是对多个独立组件进行端到端封装的一种方式

索引链 Index-related chains

这类链用于与索引进行交互。这些链的目的是将自己的数据(存储在索引中)与LLM结合起来。其中最好的例子是对自己的文档进行问答。

其中一个重要部分是了解如何将多个文档传递给语言模型。有几种不同的方法或链来实现这一点。

LangChain 支持其中四种常见的方法

Stuffing(填充)

Stuffing 是最简单的方法,您只需将所有相关数据作为上下文直接添加到提示中,然后传递给语言模型。LangChain 中的 StuffDocumentsChain 便是采用了这种方法。

优点: 只需向LLM发出一次调用。在生成文本时,LLM 可以一次性访问所有数据。

缺点: 大多数LLM具有上下文长度限制,对于大型文档(或许多文档),这种方法将不起作用,因为提示的长度将超过上下文长度。

Map Reduce(映射-归约)

该方法涉及对每个数据块运行初始提示(对于摘要任务,可以是该块的摘要;对于问答任务,可以是仅基于该块的答案)。然后运行不同的提示来组合所有初始输出。LangChain中实现了这种方法,称为 MapReduceDocumentsChain。

优点: 可以扩展到比 StuffDocumentsChain 更大的文档(以及更多的文档)。对各个文档进行的LLM调用是独立的,因此可以并行化处理。

缺点: 比 StuffDocumentsChain 需要更多对 LLM 的调用。在最终的组合调用中会丢失一些信息。

Refine(优化)

该方法涉及在第一个数据块上运行初始提示,生成一些输出。对于剩余的文档,将该输出与下一个文档一起传递给LLM,要求LLM基于新文档优化输出。

优点: 可以获取更多相关的上下文,并且可能比 MapReduceDocumentsChain 更少损失信息。

缺点: 比 StuffDocumentsChain 需要更多对LLM的调用。这些调用也不是独立的,这意味着无法像 MapReduceDocumentsChain 那样进行并行化处理。还可能对文档的顺序造成潜在的影响。

Map-Rerank(映射-重新排序)

这种方法涉及在每个数据块上运行初始提示,该提示不仅尝试完成任务,还为其答案的确定程度给出一个分数。然后根据这个分数对响应进行排序,返回最高分的响应。

优点: 与MapReduceDocumentsChain类似的优点。与MapReduceDocumentsChain相比,需要更少的调用。

缺点: 无法在文档之间合并信息。这意味着当您期望在单个文档中有一个简单的单一答案时,这种方法最为有用。

LLM链 LLMChain

LLMChain(LLM链)是最常见的链类型。

它由 PromptTemplate(提示模板)、模型(可以是 LLM 或 ChatModel )和可选的输出解析器组成。该链接受多个输入变量,使用 PromptTemplate 将它们格式化为提示。然后将提示传递给模型。最后,它使用 OutputParser(如果提供)将LLM的输出解析为最终格式。

提示选择器 Prompt Selector

在 LangChain 中,链的一个目标是让人们尽快开始使用特定的用例。这其中一个重要部分是拥有良好的提示。

但对一个模型有效的提示对另一个模型可能效果不佳。我们希望链对所有类型的模型都能够良好工作。因此,我们没有在链中硬编码默认提示的使用方式,而是引入了 PromptSelector 的概念。PromptSelector 负责根据传入的模型选择一个默认提示。

索引

加载文档 Document Loaders

Document Loaders负责加载文档对象列表的类。

检索数据 Retriever

一种存储数据的方式,使其可以被语言模型查询。该对象必须提供的唯一接口是get_relevant_texts方法,它接收一个字符串作为输入,并返回一个文档列表。

文档拆分 Text Splitters

TextSplitters 负责将文档拆分成较小的文档。

向量存储库 Vectorstore

最常见的索引类型是为每个文档创建数值嵌入(通过嵌入模型(Embedding Model)生成)。向量存储库(Vector Store)存储文档和相关的嵌入,并提供通过嵌入快速查找相关文档的方法。

http://www.lryc.cn/news/610744.html

相关文章:

  • WIN QT libsndfile库编译及使用
  • 【教程】Unity AssetBundle 资源管理方法
  • STM32F407VET6学习笔记10:移植smallmodbus
  • 【LeetCode 热题 100】347. 前 K 个高频元素——(解法一)排序截取
  • Redis类型之String
  • 【npm 解决】---- TypeError: crypto.hash is not a function
  • GPS信号捕获尝试
  • 【机器学习深度学习】模型剪枝
  • Python包安全工程实践:构建安全可靠的Python生态系统
  • 【学习笔记】NTP时间同步验证
  • 期权定价全解析:从Black-Scholes到量子革命的金融基石
  • Linux 逻辑卷管理:LVM 原理与 Stratis、VDO 特性对比
  • 基于 Spring Boot 的小区人脸识别与出入记录管理系统实现
  • 力扣经典算法篇-43-全排列(经典回溯问题)
  • css3属性总结和浏览器私有属性
  • Python、Java、C#实现浮点型转换为转型
  • Mysql使用Canal服务同步数据->ElasticSearch
  • 电子秤利用Websocket做为Client向MES系统推送数据
  • 文件编译、调试及库制作
  • 跑yolov5的train.py时,ImportError: Failed to initialize: Bad git executable.
  • 前端实现Excel文件的在线预览效果
  • 【机器学习】算法调参的两种方式:网格搜索(枚举)、随机搜索
  • 【力扣 Hot100】 刷题日记
  • Python分块读取大型Excel文件
  • 豆包新模型与 PromptPilot 实操体验测评,AI 辅助创作的新范式探索
  • LangGraph学习笔记 — LangGraph中State状态模式
  • 自动驾驶控制算法——MPC控制算法
  • qq scheme
  • GaussDB 并行创建索引
  • 使用iptables的nat链表进行端口转发