跳转到主内容

我们如何构建 GPT Researcher

·7分钟阅读
Assaf Elovic
GPT Researcher 和 Tavily 的创建者

AutoGPT 发布后,我们立刻就上手试用。脑海中出现的第一个用例就是自主在线研究。对于手动研究任务,要形成客观结论可能需要花费大量时间,有时甚至需要数周才能找到合适的资源和信息。看到 AutoGPT 创建和执行任务的出色表现,让我开始思考利用 AI 进行全面研究的巨大潜力,以及它对未来在线研究的意义。

但 AutoGPT 的问题在于它通常会陷入无限循环,几乎每一步都需要人为干预,不断失去对其进度的追踪,而且几乎从未真正完成任务。

尽管如此,在研究任务期间收集的信息和上下文都丢失了(例如,没有跟踪来源),有时还会产生幻觉。

我对利用 AI 进行在线研究充满热情,但同时也发现了一些局限性,这促使我下定决心去尝试解决这些问题,并与世界分享我的工作。就在那时,我创建了 GPT Researcher——一个用于在线全面研究的开源自主代理。

在本文中,我们将分享引导我走向所提出解决方案的步骤。

从无限循环到确定性结果

解决这些问题的第一步是寻求一个更具确定性的解决方案,该方案最终能够保证在固定的时间范围内完成任何研究任务,而无需人为干预。

就在那时,我们偶然发现了最近的一篇论文《规划与解决》。该论文旨在为上述挑战提供更好的解决方案。其思想相当简单,包含两个部分:首先,设计一个计划,将整个任务分解为更小的子任务;然后,按照计划执行这些子任务。

Planner-Excutor-Model

就研究而言,这意味着首先创建一个与任务相关的研究问题大纲,然后为大纲中的每个项目确定性地执行一个代理。这种方法通过将代理的步骤分解为一组确定的、有限的任务,消除了任务完成的不确定性。一旦所有任务完成,代理便结束研究。

遵循这一策略,完成研究任务的可靠性提高到了100%。现在的挑战是,如何提高质量和速度?

追求客观和无偏见的结果

大型语言模型(LLM)最大的挑战在于,由于幻觉和过时的训练集(GPT 目前的训练数据截至 2021 年),其回答缺乏事实性和公正性。但讽刺的是,对于研究任务来说,优化的关键恰恰是这两个标准:事实性和无偏见性。

为了应对这些挑战,我们做了以下假设

  • 大数定律——更多的内容将导致更少偏见的结果。尤其是在收集得当的情况下。
  • 利用大语言模型对事实信息进行总结,可以显著提高结果的整体事实性。

在对 LLM 进行了相当长时间的实验后,我们可以说,基础模型最擅长的领域是总结和重写给定内容。因此,理论上,如果 LLM 仅审查给定的内容并进行总结和重写,可能会显著减少幻觉的产生。

此外,假设给定的内容是无偏见的,或者至少包含了某主题各方的观点和信息,那么重写后的结果也将会是无偏见的。那么如何才能确保内容无偏见呢?答案是大数定律。换句话说,如果抓取了足够多包含相关信息的网站,带有偏见信息的可能性就会大大降低。所以我们的想法是,抓取足够多的网站,以形成对任何主题的客观意见。

太好了!听起来,我们现在有了一个如何创建既确定、又真实、又无偏见的结果的想法。但是速度问题呢?

加快研究进程

AutoGPT 的另一个问题是它同步工作。其主要思想是创建一个任务列表,然后逐个执行。因此,假设一个研究任务需要访问 20 个网站,每个网站抓取和总结大约需要一分钟,那么整个研究任务至少需要 20 多分钟。这还是在它能最终停止运行的情况下。但是,如果我们能并行化代理的工作呢?

通过利用 Python 的 asyncio 等库,代理任务已得到优化,可以并行工作,从而显著减少了研究时间。

# Create a list to hold the coroutine agent tasks
tasks = [async_browse(url, query, self.websocket) for url in await new_search_urls]

# Gather the results as they become available
responses = await asyncio.gather(*tasks, return_exceptions=True)

在上面的例子中,我们并行触发所有 URL 的抓取,只有在全部完成后,才继续执行任务。根据多次测试,一个平均的研究任务大约需要三分钟(!!)。这比 AutoGPT 快了 85%。

完成研究报告

最后,在收集了尽可能多关于给定研究任务的信息之后,挑战在于撰写一份关于它的综合报告。

在尝试了几个 OpenAI 模型甚至开源模型后,我得出结论,目前 GPT-4 能取得最好的结果。任务很简单——将所有汇总的信息作为上下文提供给 GPT-4,并要求它根据原始研究任务撰写一份详细的报告。

提示如下

"{research_summary}" Using the above information, answer the following question or topic: "{question}" in a detailed report — The report should focus on the answer to the question, should be well structured, informative, in depth, with facts and numbers if available, a minimum of 1,200 words and with markdown syntax and apa format. Write all source urls at the end of the report in apa format. You should write your report only based on the given information and nothing else.

结果相当令人印象深刻,只有极少数样本中出现了轻微的幻觉,但可以合理地假设,随着 GPT 的不断改进,结果只会越来越好。

最终架构

既然我们已经回顾了 GPT Researcher 的必要步骤,现在让我们来分解一下最终的架构,如下所示

更具体地说

  • 生成一份研究问题大纲,以形成对任何给定任务的客观意见。
  • 对于每个研究问题,触发一个爬虫代理,从在线资源中抓取与给定任务相关的信息。
  • 对于每个抓取的资源,进行跟踪、过滤,并且只有在包含相关信息时才进行总结。
  • 最后,汇总所有总结的来源,并生成一份最终的研究报告。

展望未来

在线研究自动化的未来正面临一场重大颠覆。随着人工智能的不断进步,AI 代理能够为我们日常的任何需求执行全面的研究任务只是时间问题。AI 研究可以颠覆金融、法律、学术、健康和零售等领域,将我们每次研究的时间减少 95%,同时在海量且不断增长的在线信息洪流中,优化报告的事实性和无偏见性。

想象一下,如果 AI 最终能够理解和分析任何形式的在线内容——视频、图像、图表、表格、评论、文本、音频。再想象一下,如果它可以在单个提示中支持和分析数十万字的汇总信息。甚至想象一下,AI 最终能够在推理和分析方面取得进步,使其更适合得出新的、创新的研究结论。而且,它能在几分钟甚至几秒钟内完成所有这些工作。

这一切都只是时间问题,也正是 GPT Researcher 的意义所在。