忘记 RAG:拥抱Agent设计,让 ChatGPT 更智能更贴近实际

2024-02-06 09:52

本文主要是介绍忘记 RAG:拥抱Agent设计,让 ChatGPT 更智能更贴近实际,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RAG(检索增强生成)设计模式通常用于开发特定数据领域的基于实际情况的ChatGPT。

然而,重点主要是改进检索工具的效率,如嵌入式搜索、混合搜索和微调嵌入,而不是智能搜索。

这篇文章介绍了一种新的方法,灵感来自人类研究方法,涉及多种搜索技术,观察中间结果,不断完善和重试,然后才提供回应。

通过利用智能代理设计,本文提出构建一个更智能、更扎实的ChatGPT,超越传统RAG模型的局限性。

RAG模式和限制

标准RAG模式实施概述:

  • 该过程始于用户的问题或对话的查询创建,通常是通过提示的语言模型(LLM)完成的。这通常被称为查询重述步骤。
  • 然后将此查询发送到搜索引擎,搜索引擎返回相关的知识(检索)。
  • 然后,检索到的信息会通过包含用户问题的提示进行增强,并转发到LLM(增强)。
  • 最后,LLM 对用户的查询做出了回应(生成)。

 RAG的限制

  • 在RAG模式中,检索、增强和生成由单独的流程管理。每个流程可能由具有不同提示的LLM来促进。

    然而,与用户直接交互的第1001代通常最清楚如何回答用户的问题。

    检索LLM可能不会像生成LLM那样解释用户意图,从而提供不必要的信息,可能会妨碍其做出回应的能力。
  • 检索是针对每个问题执行一次,没有来自生成LLM的任何反馈循环。

    如果检索结果不相关,可能是由于搜索查询或搜索词不佳等因素,生成LLM缺乏纠正的机制,可能会诉诸捏造答案。
  • 提供的检索上下文一经确定即不可更改,也无法扩展。

    例如,如果研究结果表明需要进一步调查,比如检索到一个提及需要进一步检索的文件,这方面没有规定。
  • RAG模式不支持多步骤研究。

智能代理模型

智能代理模型从人类研究方法中汲取灵感,当回答一个没有即时知识的问题时。在这个过程中,可能会进行一次或多次搜索,以收集有用的信息,然后提供最终答案。

每次搜索的结果都可以决定是否需要进一步调查,如果需要,还可以确定接下来搜索的方向。

这个迭代过程会持续进行,直到我们认为我们已经积累了足够的知识来回答,或者得出我们无法找到足够信息来回应的结论。

有时,研究结果可能会进一步澄清用户意图和查询范围。

为了复制这种方法,建议开发一个由语言模型(LLM)驱动的智能代理,用于与用户进行对话。

代理自主确定何时需要使用外部工具进行研究,制定一个或多个搜索查询,进行研究,审查结果,并决定是否继续进一步研究或向用户寻求澄清。

直到代理认为自己已经准备好向用户提供答案,这个过程才会持续进行。

 实施

使用Azure OpenAI的函数调用功能,实现一个能够自主使用搜索工具定位所需信息以协助用户请求的代理变得更加简单。

这一特性单独简化了RAG模式的传统实现,其中查询的改写、扩展和生成是分开处理的,如前所述。

代理人利用系统定义的角色和目标与用户互动,同时意识到可用的搜索工具。

当代理需要查找它所不具备的知识时,它会制定一个搜索查询,并向搜索引擎发出信号,以检索所需的答案。

这个过程不仅让人想起人类的行为,而且比RAG模式更高效,RAG模式中知识检索是一个单独的过程,无论是否需要,都会向聊天机器人提供信息。

实施这一能力:

  1. 定义人物角色、预期行为以及要使用的工具,何时使用它。

用 JSON 格式定义函数规范,包括函数和参数描述。

有趣的是,“用于搜索知识库的搜索查询”参数描述起着至关重要的作用。它指导LLMs根据对话中用户所需的帮助来制定合适的搜索查询。

此外,搜索查询参数可以描述并限制为遵循特定的工具格式,比如Lucene查询格式。还可以添加额外的参数用于诸如过滤等任务。

实现函数调用流程

在这个时刻,我们已经开发出一个能够进行独立搜索的智能代理。

然而,要真正创建一个能够执行更复杂的研究任务,如多步骤和自适应执行的智能代理,我们需要实现一些额外的能力。幸运的是,这个实施过程可以很简单直接。

创建智能研究代理的增强功能

在系统消息中添加代理计划、行动、观察和调整的能力

附加的指示表示,如果需要,机器人应该重试并更改问题。此外,它表示机器人应该审查搜索结果以指导下一次搜索,并在必要时采用多步骤方法。

这假设了搜索工具可以被多次调用。

由于LLM无法自行重复此过程,我们需要使用应用程序逻辑来管理。我们可以通过将整个过程放入循环中来实现这一点。当模型准备好给出最终答案时,循环退出:

这是智能代理在演示场景中的表现:

问题是比较两种产品之间的一个特性。每种产品的特性都存储在单独的文档中。为了做到这一点,我们的代理人执行两个搜索查询:

  • X100与Z200无线电0的功率配置文件
  • 无线电0的X100功率配置文件

第一个查询是一种贪婪的方法,因为代理希望有一个包含比较的文档。事实并非如此,因为搜索查询没有返回关于X100的足够信息,所以它添加了专门针对X100的第二个查询。

如果这个问题交给经典的RAG解决方案,它将无法找到一个好的答案,因为它会在第一个查询处停止。

 结束

实施代理模型可以大大增强基于ChatGPT的解决方案。这是因为该模型具有智能能力,可以测试各种策略,并根据观察到的结果改进其方法。

 参考文献

  • 这篇文章的完整代码实现可以在这里找到
  • 知识密集型自然语言处理任务的检索增强生成 arXiv:2005.11401 [cs.CL]
  • OpenAI的功能调用:Function calling — OpenAI API

这篇关于忘记 RAG:拥抱Agent设计,让 ChatGPT 更智能更贴近实际的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/683935

相关文章

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

基于Python实现智能天气提醒助手

《基于Python实现智能天气提醒助手》这篇文章主要来和大家分享一个实用的Python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用,有需要的小伙伴可以参考一下... 目录项目概述核心功能技术实现1. 天气API集成2. AI建议生成3. 消息推送环境配置使用方法完整代码项目特点

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi