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

原文地址: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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s常用命令大全

k8s常用的命令 下面是一些常用的Kubernetes(K8s)命令,以及它们的简要说明。这些命令可以帮助您管理和操作Kubernetes集群中的资源。 集群管理命令: kubectl cluster-info: 显示集群的基本信息。 kubectl config use-context &l…

Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器

引言 在当今的软件开发世界中,网络通信已成为不可或缺的一部分。Qt,作为一个跨平台的C框架,为我们提供了强大的网络编程能力。本文将带你深入Qt的网络模块,探索如何使用QNetworkAccessManager、QNetworkRequest和QNetworkReply等核…

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

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

寡姐出击!《黑寡妇2》AI电影宣传片重磅来袭

寡姐出击!《黑寡妇2》AI电影宣传片重磅来袭 The Black Widow returns, but darkness follows her. Black Widow 2 - Secrets buried deep will rise. A web of lies and deceit threatens her very existence. In the shadows, a new enemy lurks, waiting to strik…

跨网络传输的大致过程+图解(软件虚拟层),ip地址介绍,ip地址和mac地址对比

目录 跨网络传输 引入​​​​​​​ 举例 -- 唐僧西天取经 结论 介绍 ip地址 引入 介绍 类型 公有ip 私有ip 版本 ipv4 ipv6 ip地址和mac地址的唯一性问题 数据包转发的过程 引入 思考 -- 如何跨子网 过程 图解 封装和解包 去掉差异 ip地址/协议的重要…

智慧城市如何助力疫情防控:科技赋能城市安全

目录 一、引言 二、智慧城市与疫情防控的紧密结合 三、智慧城市在疫情防控中的具体应用 1、智能监测与预警系统 2、智慧医疗与健康管理 3、智能交通与物流管理 4、智慧社区与基层防控 四、科技赋能城市安全的未来展望 五、结论 一、引言 近年来,全球范围内…

华为od机试C卷-开源项目热度榜单

1、题目描述 某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。 对于每个开源项目,开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里面统计了每个开源项目关注、收藏、fork、issue…

利用“定时执行专家”循环执行BAT、VBS、Python脚本——含参数指定功能

目录 一、软件概述 二、VBS脚本执行设置 三、触发器设置 四、功能亮点 五、总结 在自动化办公和日常计算机任务管理中,定时执行脚本是一项非常重要的功能。今天,我将为大家带来一款名为“定时执行专家”的软件的评测,特别是其定时执行VB…

YOLOX论文解读

paper:YOLOX: Exceeding YOLO Series in 2021 official implementation:https://github.com/Megvii-BaseDetection/YOLOX 本文的创新点 本文在YOLOv3的基础上进行了一些改进:包括将检测头进行解耦的decoupled head、从anchor-based转为anc…

Python使用错误总结

【1】cannot import name ‘ParameterSource’ from ‘click.core’ 其根本原因在于是black模块,其模块版本可能过时,升级black模块版本即可: pip install black --upgrade【2】partially initialized module ‘charset_normalizer’ has n…

React-父传子

1.概念 说明:父组件传递数据子组件标签身上绑定属性;子组件接受数据props的参数。props是一个对象,包含父组件传递的所有数据。例如数字、字符串、布尔值、数组、对象、函数、JSX。不允许直接修改父组件传递的数据。 2.例子 // 父传子 // …

社区服务类创业项目推荐:抓住社区商业新机遇

大家好,我是一名90后鲜奶吧创业者,目前在社区经营5年时间,今天我想和大家分享一些关于社区服务类创业项目的推荐,都是这么多年我见证过生意最好的店面。 1、社区便利店: 随着人们生活节奏的加快,对便利购…

刨析数据结构(三)

🌈个人主页:小田爱学编程 🔥 系列专栏:数据结构-带你无脑刨析 🏆🏆关注博主,随时获取更多关于IT的优质内容!🏆🏆 😀欢迎来到小田代码世界~ &…

typeorm-入门

简述 typeorm是一个数据库orm框架,在nestjs官网中有提到,可以充分发挥利用typescript的特性,当然也支持js其中涉及的概念包括 DataSource 数据源,Connection 连接数据库Entity 实体,实体类映射数据库表Relation 关系…

《TCP/IP详解 卷一》第13章 TCP连接管理

目录 13.1 引言 13.2 TCP连接的建立与终止 13.2.1 TCP半关闭 13.2.2 同时打开与关闭 13.2.3 初始序列号 13.2.4 例子 13.2.5 连接建立超时 13.2.6 连接与转换器 13.3 TCP 选项 13.3.1 最大段大小选项 13.3.2 选择确认选项 13.3.3 窗口缩放选项 13.3.4 时间戳选项与…

开启AI绘画新纪元:让创意在指尖绽放

文章目录 一、了解AI绘画的基本原理二、选择合适的AI绘画工具三、掌握AI绘画的基本技巧四、借鉴与创新:从模仿到创作五、参与社区交流,共同成长《AI绘画教程:Midjourney使用方法与技巧从入门到精通》亮点推荐内容简介作者简介目录 在科技日新…

OpenAI (ChatGPT)中国免费试用地址

GitHub - click33/chatgpt---mirror-station-summary: 汇总所有 chatgpt 镜像站,免费、付费、多模态、国内外大模型汇总等等 持续更新中…… 个人能力有限,搜集到的不多,求大家多多贡献啊!众人拾柴火焰高!汇总所有 cha…

基于java+springboot+vue实现的宠物健康咨询系统(文末源码+Lw)23-206

摘 要 本宠物健康咨询系统分为管理员还有用户两个权限,管理员可以管理用户的基本信息内容,可以管理公告信息以及宠物健康知识信息,能够与用户进行相互交流等操作,用户可以查看宠物健康知识信息,可以查看公告以及查看…

目标检测——摩托车头盔检测数据集

一、简介 首先,摩托车作为一种交通工具,具有高速、开放和稳定性差的特点,其事故发生率高,伤亡率排在机动车辆损伤的首位。因此,摩托车乘员头盔对于保护驾乘人员头部安全至关重要。在驾乘突发状况、人体受冲击时&#…

【微信小程序】传参存储

目录 一、本地数据存储 wx.setStorage wx.setStorageSync 1.1、异步缓存 存取数据 1.2、同步缓存 存取数据 二、使用url跳转路径携带参数 2.1、 wx.redirectTo({}) 2.2、 wx.navigateTo({}) 2.3、 wx.switchTab({}) 2.4 、wx.reLaunch({}) 2.5、组件跳转 三、…