Research Agent:具有解决基于大型文本语料库的复杂问题,具备深度多跳推理的能力

news2024/12/28 4:30:53

原文地址:https://towardsdatascience.com/the-research-agent-4ef8e6f1b741

2023 年 8 月 29 日

问题简介

在2021年,开始应对基于大量文本回答问题的挑战。在预训练transformers之前的时代,这个问题很难破解。

人工智能和大型预训练transformers的快速进步正在从根本上深刻地改变技术世界。

应对基于大量文本回答问题的总体思路是制作个可以处理任何复杂知识库的自主研究代理

研究代理

在这里,我将讨论一个自主人工智能研究代理的设计和实现,它可以解决具有深度推理能力的多跳KBQA问题。

需要研究代理的原因

向 ChatGPT 询问了几个有关《摩诃婆罗多》的问题。我对一些问题得到了很好的答案。然而,他们大多数人缺乏严谨性。这是预期的。GPT 在通用数据集上进行训练。它可以很好地理解和解释自然语言。它也可以很好地推理。然而,它并不是任何特定领域的专家。因此,虽然它可能对《摩诃婆罗多》有一些了解,但它可能不会给出经过深入研究的答案。有时 GPT 可能根本没有任何答案。在这些情况下,它要么谦虚地拒绝回答问题,要么自信地编造问题(幻觉)。

实现 KBQA 的第二个最明显的方法是使用检索 QA 提示。这就是 LangChain 开始变得非常有用的地方。

检索质量保证

对于那些不熟悉 LangChain 库的人来说,这是在代码中使用 GPT 等 LLM 的最佳方法之一。这是使用 LangChain 的 KBQA 实现。

使用检索器进行QA检查

总而言之,以下是在任何文档主体上实现 KBQA 的步骤:

  • 将知识库拆分为文本块。
  • 为每个块创建数字表示(嵌入)并将其保存到矢量数据库中。
    如果您的数据是静态的,则步骤 1 和 2 是一次性的工作。
  • 使用用户对此数据库的查询运行语义搜索并获取相关文本块。
  • 将这些文本块与用户的问题一起发送给法学硕士,并要求他们回答。

这是此过程的图形表示。

这种方法非常适合解决简单且是事实的知识库上的简单问题。然而,它不适用于更复杂的知识库和需要更深入、多跳推理的更复杂的问题。多跳推理是指采取多个步骤的逻辑或上下文推理来得出问题的结论或答案的过程。

此外,LLMs可以在一篇提示中咀嚼的文本长度受到限制。当然,您可以一次发送一份文件,然后在每次通话时“完善”或“减少”答案。然而,这种方法不允许复杂的“多跳”推理。在某些情况下,使用“优化”或“减少”方法的结果比简单地将所有文档填充到单个提示中要好,但差距并不大。

对于复杂的知识库,用户的问题本身可能不足以找到所有可以帮助LLM得出准确答案的相关文档。例如:

阿朱那是谁?

这是一个简单的问题,可以在有限的上下文中回答。然而,有以下问题:

为什么会发生摩诃婆罗多战争?

是一个上下文遍布整个文本语料库的问题。该问题本身对其上下文的信息有限。找到相关的文本块然后据此进行推理可能行不通。

那么接下来怎么办?

人工智能代理

这是人工智能出现后出现的最酷的概念之一。如果你不知道AI Agent的概念,我迫不及待地向你解释它,但我可能仍然无法传达它的厉害之处。我先用ChatGPT来解释一下。

人工智能代理,也简称为“代理”,是指能够自主感知环境、做出决策并采取行动以实现特定目标的软件程序或系统。人工智能代理旨在在解决问题和决策任务中模仿类人行为。它们在定义的环境中运行并与该环境交互以实现期望的结果。

简单来说,Agent就是一个程序,它接受一个问题,决定如何解决它,然后解决它。代理提供了一组工具,例如函数、方法、API 调用等。如果它选择按照它认为合适的任何顺序执行操作,则可以使用其中任何工具。与传统软件相比,解决问题所需的步骤顺序是预先编程的。当然,这是一个非常模糊的定义。但你现在可能已经掌握了窍门。

以下是我为 KBQA 用例尝试过的两种不同代理。

ReAct

该代理使用“ReAct”风格的推理来决定使用哪个工具来解决给定的问题。

ReAct Agent 的 LangChain 实现:ReAct

 我为代理提供了以下工具供选择:

  • 带有文档存储的检索 QA 链。
  • 字符词汇表搜索(使用预训练模型通过命名实体识别创建了一个词汇表)
  • 维基百科搜索。

ReAct代理没有给我很好的结果,并且大多数时候都无法收敛到任何答案。它不适用于 GPT 3.5。它可能与 GPT 4 配合使用效果更好,而 GPT 4 比 GPT 3.5 贵 20 -30 倍,因此可能还不是一个选择。

即使它收敛了,我也无法得到好的结果。如果有人在创建“ReAct”提示方面更有知识,可能会做得更好。

Self-Ask Agent

该代理根据原始问题提出后续问题,然后尝试找到中间答案。使用这些中间答案,最终得出最终答案。这是一篇解释 Self-Ask Agent 的文章。

Self-Ask Prompting

这种方法给我带来了一些好的结果。由于单跳原因,它运行良好。但对于需要多次跳跃的问题,即使这样也会失败。例如,以下问题:

谁杀了迦尔纳,为什么?

用这种方法相对容易回答

阿朱那为什么要杀他同父异母的弟弟迦尔纳?

回答起来要困难得多。它要求LLMs知道阿朱那不知道卡纳是他同父异母的兄弟这一事实。LLM 无法知道它需要了解这个事实,无论是通过理解问题还是根据原始问题提出进一步的问题。

人类研究过程

再次引用GPT

人工智能代理旨在模仿人类在解决问题和决策任务中的行为

所以,我的下一个想法是研究人类如何研究,如果你愿意的话,可以称之为元研究。我想象自己坐在图书馆(大学怀旧)中,可以轻松访问与我的研究主题相关的所有书籍。我拿了一个笔记本和一支笔,开始记下我研究一个主题时遵循的过程。

研究方法论:

记下页面上的原始查询。

  1. 我尝试通过阅读几本书来回答当前的问题。在此过程中,我做了一些笔记,并为我认为与当前问题最相关的一些摘录添加了书签。
  2. 我总是在这些摘录中发现许多未知之处。我记下这些未知数,并写下更多问题,以帮助我了解这些未知数。
  3. 从这些问题中,我选择一个与原始问题最相关的问题。
  4. 我回到步骤1

经过几次这样的迭代后,我问自己是否有足够的信息来回答最初的问题。

最后,我知道要编码什么。我希望,通过一些及时的工程设计,这个过程可以给我比我之前尝试过的任何其他方法更深刻的答案。

在坐下来编写代码之前,我在互联网上搜索了类似的想法。我发现了 BabyAGI。

这是一个描述BabyAGI 的仓库

我意识到BabyAGI和上述研究过程有很多相似之处。因此,怀着感激之情,我从 BabyAGI 实现中使用的提示中获得了一些灵感。

研究代理—实施

这是使用令人惊叹的draw.io转换为流程图的相同过程。

该图表中的每个蓝色框都是对LLMs的调用。

Components

  1. QA 代理 —搜索答案和进一步的上下文。这是个使用向量存储的简单“内容”检索 QA 链。未来,这可以是个人工智能代理,使用矢量存储、搜索 API 或维基百科 API、审核 API 和之前的研究数据等工具。此处的提示经过调整,可根据 1. 上下文(文档)和 2. 与原始问题的相关性生成简洁的答案。除了第一个循环之外,当前问题始终是步骤 2 中生成并在步骤 3 中选择的中间问题。 Agent 将中间答案附加到注释中,并将最新摘录(用于回答当前问题的文档)附加到书签中。步骤 2 中使用了最新的这些文档。
  2. 问题生成器 -根据新笔记提出更多问题在这里,代理使用与当前问题匹配的最新向量搜索结果,并使用它们生成与原始问题相关的更多问题。它将这些问题附加到未回答的问题列表中。此处的提示经过调整,以便新生成的问题不会与现有问题列表重叠。
  3. 最相关的问题选择器 —选择与原始问题最相关的一个问题此提示从未回答的问题列表中选择与原始问题最相关的一个问题。该问题用作下一个循环的当前问题。在下一个循环中,代理在生成一组新问题后从未回答问题列表中删除该问题。
  4. 分析器——我了解得够多吗?我使用max_iterations参数来退出循环。目前这效果很好。然而,最好根据不断变化的上下文动态决定迭代次数或退出策略。将来我将开发一个可以自动完成此操作的“分析器”。
  5. 研究编译器 -编译研究这是最后的提示。它使用研究过程中所做的笔记来对“原始问题”得出详尽的“最终答案”。

结果

该代理比以前的任何方法都更大程度地避免了幻觉问题。它会自动纠正在前几次迭代中以及随后的迭代中产生的幻觉和事实错误。问题越深入,得出的结果就越准确。

问题:为什么潘达瓦一家必须在森林里生活 12 年?

输出 -

以防万一您好奇,这是最终答案

Final Answer: 
The Pandavas' decision to live in the forest for 12 years 
was primarily due to the circumstances and events that 
unfolded in their lives. After losing a game of dice to 
The Kauravas and the Pandavas were forced into exile for 
13 years, with the last year to be spent incognito. 
During their exile, they faced numerous challenges 
and hardships, including living in the forest.

Bhima contemplated killing all of 
the Kurus, but his brother Yudhisthira always 
pacified him, stating that it was not the opportune 
time to fulfil their desires. 
Thus, living in the forest allowed them to avoid 
confrontations and maintain peace.

During their time in the forest, the Pandavas faced several difficulties. 
One of the main challenges was Bhima's struggle to tolerate the ascetic 
life. He contemplated killing all of the Kurus, but his brother 
Yudhisthira always pacified him and advised against it. 
Additionally, the Pandavas had to live in the forest and depend 
on begging for their sustenance since their kingdom had been 
plundered in gambling. They were distressed by the loss of their 
kingdom and the insults to their queen Draupadi. The forest itself 
was also full of dangers, adding to their hardships. Furthermore, 
the Pandavas felt unable to fulfil the needs of certain pious Brahmanas 
who stayed with them in the forest, as they did not possess anything 
and were dependent on begging for their own survival.

Despite these challenges, the Pandavas made the most of their time 
in the forest. They received knowledge from sages and saintly persons, 
which helped them gain wisdom and spiritual insights. The great sage 
Vyasa informed them that many generals had agreed to support their 
cousin Duryodhana, including Karna, Shakuni, Bhurishravas, Sala, 
Drona, and Bhishma. Vyasa also told Arjuna that if he were to fight 
in a future war, he would need to obtain the divine astras of Lord 
Indra and Lord Shiva.

In light of this information, Yudhisthira ordered Arjuna to go to the 
Himalayan mountains to perform austerities to please Lord Shiva. 
This was necessary for Arjuna to obtain the divine weapons that would 
be crucial in the upcoming war. The Pandavas understood the importance 
of being prepared and gathering the necessary resources to counter 
the strength of their opponents. Therefore, Yudhisthira made the 
decision to send Arjuna on this mission to seek Lord Shiva's blessings 
and acquire the divine astras.

Overall, the Pandavas' exile in the forest for twelve years was a 
result of the conditions imposed on them after losing the game 
of dice. They faced various difficulties during their time in the 
forest, but also gained valuable knowledge and prepared themselves 
for the challenges that lay ahead.

智能体的美妙之处不仅在于它准确地回答了最初的问题,还在于它更进一步,发现了围绕该问题的故事。

代理还会生成一组已回答的问题未回答的问题,并在研究过程中记录下来。

** Unanswered Questions **
'4. How did the Pandavas receive knowledge from sages and saintly persons during their time in the forest?'
'5. What were the specific austerities that Arjuna had to perform in the Himalayan mountains to please Lord Shiva?'
'6. How did the Pandavas manage to hide from Duryodhana's spies for almost the entire thirteenth year of their exile?'
'8. How did Bhima cope with the challenges of living as an ascetic in the forest? Did he face any particular difficulties or struggles during their time in exile?'
'9. Can you provide more information about the generals who supported Duryodhana's cause? What were their roles and contributions in the Kurukshetra war?'
'10. How did the Pandavas manage to maintain a peaceful life in the forest despite the challenges they faced?'
'11. What were the specific teachings and knowledge that the Pandavas received from the sages and saintly persons during their time in the forest?'
'12. Can you provide more information about the palace where the Pandavas lived for one full year before going to the forest?'
'13. How did Lord Krishna's presence in the forest affect the Pandavas' experience during their exile?'
'14. Can you provide more information about the dangers the Pandavas faced while living in the forest?'
'15. What were the specific challenges and difficulties that Yudhisthira and his brothers faced in their daily lives as inhabitants of the forest?'

代码

这里是带有研究代理实现的 Python 笔记本:research_agent

Mahabharata 数据集的 Git 存储库:Mahabharata,从多个来源编译的摩诃婆罗多文本

接下来是什么?

  • 在公共链接上部署此代理并观察更多使用模式。
  • 将代理与《摩诃婆罗多》以外的不同源文档一起使用。
  • 该过程的第一步目前是个简单的“stuff”QA 链,它使用带有源文本语料库的向量存储。我正在努力将其替换为“ReAct”代理,以便在研究过程中可以使用搜索 API、维基百科、审核 API 等其他工具。
  • 我将每次运行期间生成的数据和元数据保存到“runs”向量存储中。我还将原始问题的嵌入保存到同一商店。这帮助我跟踪智能体的推理轨迹,并观察从中出现的几种逻辑模式。这可以帮助调整 QA 代理以遵循更严格的推理路径。
  • 目前,研究代理在一组固定的迭代之后存在。这对于大多数问题都很有效。然而,最好根据不断变化的上下文动态决定迭代次数或退出策略。我将开发一个可以自主完成此操作的“分析器”。
  • 该代理适用于大多数类型的问题(元问题除外)。例如,如果我问“描述一下第 5 本书第 3 章中发生的事情”,代理就很难回答。在未来的版本中,我将在“ReAct”代理中包含一个自查询检索器来处理此类情况。
  • 到目前为止,我仅在 OpenAI GPT3.5 模型上尝试过 Agent。每次运行花费我大约 0.02 美元。我很快就会尝试使用像 Llama 这样可以在本地托管的较小模型的研究代理。

Credits for the data sets I used in the above article, along with the licensing information.

  1. Complete Translation by K. M. Ganguli: Available in the public domain.
  2. Laura Gibbs Tiny Tales: This is a retelling of the Mahabharata using two hundred episodes that are each 100 words long. I am using her work here with her permission.
  3. Kaggle data repo by Tilak: All 18 Parvas of Mahabharata in text format for NLP. Shared with public domain license by Tilak

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1501022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

143.和弦是什么?和声是什么?三和弦

内容参考于: 三分钟音乐社 上一个内容:142.音程的构唱练习 和弦的定义: 一个音可以把它称为单音 两个音可以把它称为音程 更多的音,通俗的定义上,三个音或者三个以上的音构成的集体就可以叫做和弦,这些音…

Redis进阶(三):主从复制

为了解决单点问题,实现多服务器部署redis,有几种解决方案可以实现:主从复制,主从哨兵还有集群。 何为主从复制 简单来说有三个服务器分别部署了redis-server程序,选中一个服务器当作主节点,其他的就是从节…

TypeScript 哲学 - Object Types

readonly 修饰对象和数组的 双向可分配性是不同的 Combind types 交叉类型对 值类型可以识别 never 但是 Object 类型识别不了 Tuple

AI时代PPT如何制作?用这10款pptai生成器一键制作!

ppt如何制作? 这可能是很多职场人或大学生日常头疼的问题,职场上随便一个工作汇报、提案展示、团队会议,学校里的小组作业、论文答辩等场景,都会用到ppt。 都说人是视觉动物,在两份文档内容质量一致的情况下&#xf…

Qt插件之输入法插件的构建和使用(二)

文章目录 主键盘搭建Google开源引擎音节分割工具类参考项目下载搭建好各个基础控件之后,就可以开发输入法的主界面和引擎了,这也是输入法的核心。 主键盘搭建 输入法的主界面本质上是一个QStackedWidget容器,将各个类型的输入键盘插入到容器中,然后根据业务需要切换不同的…

通过对话式人工智能打破语言障碍

「AI突破语言障碍」智能人工智能如何让全球交流无障碍 在当今互联的世界中,跨越语言界限进行交流的能力比以往任何时候都更加重要。 对话式人工智能(包括聊天机器人和语音助手等技术)在打破这些语言障碍方面发挥着关键作用。 在这篇博文中&am…

Java对接海康威视摄像头实现抓图

目录 一、下载SDK 二、拷贝示例代码 三、拷贝库文件 四、运行Demo 五、抓图业务 六、调参 ​七、发布Linux正式环境 一、下载SDK 海康开放平台 二、拷贝示例代码 三、拷贝库文件 这时候直接运行ClientDemo会报错,因为缺失库文件! 四、运行Demo …

13 OpenCv自定义线性滤波

文章目录 卷积算子示例 卷积 卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point) 把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚…

杨辉三角(附html,Python,c++杨辉三角代码)

1、前言 杨辉三角很早学编程就知道,但不知道杨辉是古人! 一次偶然的机会,和杨辉三角对上了眼神——杨辉!究竟你是怎么发现杨辉三角的呢? 于是经过了长达3个月锲而不舍的探究。 终究也没发现自己想要的最终结果。 …

内螺旋面的计算

内螺旋面的计算 内螺旋面的计算是机械工程和数学领域中的一个重要问题。它涉及到三维几何、微积分和数值计算等多个方面的知识。内螺旋面的形状和特性对于许多机械装置和工程应用来说至关重要,因此准确计算内螺旋面的几何参数和性质至关重要。内螺旋面是一种特殊的…

warning: #188-D: enumerated type mixed with another type

警告解释:枚举类型混合了其它的数据类型; 解决方法: 1:检查代码,是不是存在混用;; 2:结构体初始化为 0 报warning,不能将结构体的第一个变量,使用枚举类型&am…

Dgraph 入门教程五(Shema)

要想做好图数据库,必须做图数据库设计,想做好Dgraph,就需要设计好Shema。Shema的语法是必须理解,如果不理解,别人写的Shema,我们也看不懂。我这里也是走马观花式的记录,细节还需要在使用的时候去…

如何恢复未保存的 Excel 文件

本周我们将 Office 恢复系列扩展到 Excel 恢复,并提出了最常见的问题:如何恢复 Excel 文件? 与 Office Word 不同,Excel 完全是关于表格和计算的。在处理Excel文件时,您可能会遇到更多问题。与往常一样,我们…

java-抢红包一些简单概念

抢红包,比如微信中抢红包,红包金额分配使用的是二倍均值算法。 二倍均值拆包: 拆包要求:所有人抢到的金额之和等于红包总额,每个人最少抢到 0.01 元,每个人抢到的红包金额不要相差太大二倍均值法:假设红包总金额是X&…

python安装laspy遍历las获取所有点的坐标

python3.12 pip install laspy 读取 LAS 文件中的点坐标,可以使用 laspy 库。这个库允许你轻松地读取和操作 LAS 文件中的数据。下面是一个示例代码,演示了如何使用 laspy 读取 LAS 文件中的坐标: 1、方法一 #version laspy:2.…

(C语言)字符分类函数

目录 字符分类函数 1. iscntrl 2. isspace 3. isdigit 4. isxdigit 5. islower 6. isupper 7. isalpha 8. isalnum 9. ispunct 10. isgraph 11. isprint 字符分类函数 C语言中有一系列的函数是专门做字符分类的 ,也就是一个字符是属于什么类型的字符的。…

文献学习-13-机器人顶刊IJRR近期国人新作(2024.3)

一、IJRR简介 The International Journal of Robotics Research(IJRR)是机器人领域的高水平学术期刊,专注于发布关于机器人技术和相关领域的最新研究成果。IJRR创刊于1982年,是该领域的第一本学术刊物,2022-2023最新影…

2024最新版短剧小程序

仿抖音滑动小短剧影视微信小程序源码,带支付收益等模式、支持无限滑动;高性能滑动、预加载、视频预览,支持剧情介绍,集合壁纸另外仿抖音滑动效果;支持会员模式,支持用户单独购买等等多功能。 丰富的后台设…

Golang基于Redis bitmap实现布隆过滤器(完结版)

Golang基于Redis bitmap实现布隆过滤器(完结版) 为了防止黑客恶意刷接口(请求压根不存在的数据),目前通常有以下几种做法: 限制IP(限流)Redis缓存不存在的key布隆过滤器挡在Redis前 …

本鲸:打造科技招商新引擎、实现政企资源高效对接

在当今这个快速变化的时代,科技创新已成为推动社会进步和经济发展的核心动力。本鲸,作为科技创新创业服务的平台,正以其独特的视角和专业服务,为政府和企业提供一站式科技招商解决方案,助力构建创新驱动的经济发展新模…