RAG(检索增强生成)设计模式通常用于开发特定数据领域的基于实际情况的ChatGPT。
然而,重点主要是改进检索工具的效率,如嵌入式搜索、混合搜索和微调嵌入,而不是智能搜索。
这篇文章介绍了一种新的方法,灵感来自人类研究方法,涉及多种搜索技术,观察中间结果,不断完善和重试,然后才提供回应。
通过利用智能代理设计,本文提出构建一个更智能、更扎实的ChatGPT,超越传统RAG模型的局限性。
RAG模式和限制
标准RAG模式实施概述:
- 该过程始于用户的问题或对话的查询创建,通常是通过提示的语言模型(LLM)完成的。这通常被称为查询重述步骤。
- 然后将此查询发送到搜索引擎,搜索引擎返回相关的知识(检索)。
- 然后,检索到的信息会通过包含用户问题的提示进行增强,并转发到LLM(增强)。
- 最后,LLM 对用户的查询做出了回应(生成)。
RAG的限制
- 在RAG模式中,检索、增强和生成由单独的流程管理。每个流程可能由具有不同提示的LLM来促进。
然而,与用户直接交互的第1001代通常最清楚如何回答用户的问题。
检索LLM可能不会像生成LLM那样解释用户意图,从而提供不必要的信息,可能会妨碍其做出回应的能力。 - 检索是针对每个问题执行一次,没有来自生成LLM的任何反馈循环。
如果检索结果不相关,可能是由于搜索查询或搜索词不佳等因素,生成LLM缺乏纠正的机制,可能会诉诸捏造答案。 - 提供的检索上下文一经确定即不可更改,也无法扩展。
例如,如果研究结果表明需要进一步调查,比如检索到一个提及需要进一步检索的文件,这方面没有规定。 - RAG模式不支持多步骤研究。
智能代理模型
智能代理模型从人类研究方法中汲取灵感,当回答一个没有即时知识的问题时。在这个过程中,可能会进行一次或多次搜索,以收集有用的信息,然后提供最终答案。
每次搜索的结果都可以决定是否需要进一步调查,如果需要,还可以确定接下来搜索的方向。
这个迭代过程会持续进行,直到我们认为我们已经积累了足够的知识来回答,或者得出我们无法找到足够信息来回应的结论。
有时,研究结果可能会进一步澄清用户意图和查询范围。
为了复制这种方法,建议开发一个由语言模型(LLM)驱动的智能代理,用于与用户进行对话。
代理自主确定何时需要使用外部工具进行研究,制定一个或多个搜索查询,进行研究,审查结果,并决定是否继续进一步研究或向用户寻求澄清。
直到代理认为自己已经准备好向用户提供答案,这个过程才会持续进行。
实施
使用Azure OpenAI的函数调用功能,实现一个能够自主使用搜索工具定位所需信息以协助用户请求的代理变得更加简单。
这一特性单独简化了RAG模式的传统实现,其中查询的改写、扩展和生成是分开处理的,如前所述。
代理人利用系统定义的角色和目标与用户互动,同时意识到可用的搜索工具。
当代理需要查找它所不具备的知识时,它会制定一个搜索查询,并向搜索引擎发出信号,以检索所需的答案。
这个过程不仅让人想起人类的行为,而且比RAG模式更高效,RAG模式中知识检索是一个单独的过程,无论是否需要,都会向聊天机器人提供信息。
实施这一能力:
- 定义人物角色、预期行为以及要使用的工具,何时使用它。
用 JSON 格式定义函数规范,包括函数和参数描述。
有趣的是,“用于搜索知识库的搜索查询”参数描述起着至关重要的作用。它指导LLMs根据对话中用户所需的帮助来制定合适的搜索查询。
此外,搜索查询参数可以描述并限制为遵循特定的工具格式,比如Lucene查询格式。还可以添加额外的参数用于诸如过滤等任务。
实现函数调用流程
在这个时刻,我们已经开发出一个能够进行独立搜索的智能代理。
然而,要真正创建一个能够执行更复杂的研究任务,如多步骤和自适应执行的智能代理,我们需要实现一些额外的能力。幸运的是,这个实施过程可以很简单直接。
创建智能研究代理的增强功能
在系统消息中添加代理计划、行动、观察和调整的能力
附加的指示表示,如果需要,机器人应该重试并更改问题。此外,它表示机器人应该审查搜索结果以指导下一次搜索,并在必要时采用多步骤方法。
这假设了搜索工具可以被多次调用。
由于LLM无法自行重复此过程,我们需要使用应用程序逻辑来管理。我们可以通过将整个过程放入循环中来实现这一点。当模型准备好给出最终答案时,循环退出:
这是智能代理在演示场景中的表现:
问题是比较两种产品之间的一个特性。每种产品的特性都存储在单独的文档中。为了做到这一点,我们的代理人执行两个搜索查询:
- X100与Z200无线电0的功率配置文件
- 无线电0的X100功率配置文件
第一个查询是一种贪婪的方法,因为代理希望有一个包含比较的文档。事实并非如此,因为搜索查询没有返回关于X100的足够信息,所以它添加了专门针对X100的第二个查询。
如果这个问题交给经典的RAG解决方案,它将无法找到一个好的答案,因为它会在第一个查询处停止。
结束
实施代理模型可以大大增强基于ChatGPT的解决方案。这是因为该模型具有智能能力,可以测试各种策略,并根据观察到的结果改进其方法。
参考文献
- 这篇文章的完整代码实现可以在这里找到
- 知识密集型自然语言处理任务的检索增强生成 arXiv:2005.11401 [cs.CL]
- OpenAI的功能调用:Function calling — OpenAI API