作者 | 崔皓
审校 | 重楼
在现代研究环境中,处理如详尽研究工作或学术论文撰写等复杂任务对当前的大型语言模型(如ChatGPT)来说是一个挑战。这些任务通常需要长时间的手动干预和多步骤操作,现有的AI工具往往无法在没有人类帮助的情况下完成这些复杂任务。
GPT Researcher 受到 Plan-and-Solve 方法的启发,提供了解决这一问题的方法。通过将复杂任务拆解为更小的子任务并并行执行,GPT Researcher 提高了研究的效率和准确性。它利用 大模型从多个在线资源中抓取和综合信息,生成详细研究的报告。其灵活的配置支持不同的大型语言模型和检索器,使其能够适应各种研究需求。
本文展示了如何通过一条提示词,让GPT Researcher 生成对应的研究报告。这展示了GPT Researcher 在自动化研究领域的巨大潜力,为未来的研究工作提供了新的思路和方法。
复杂任务处理:从头CoT到Plan-And-Solve
在现代研究环境中,复杂任务如进行详尽的研究工作或撰写学术论文,是目前的大型语言模型(包括AI聊天助理如ChatGPT)难以一次性完成的。这些任务通常需要长时间的手动干预和多步骤的操作,而现有的AI工具往往无法在没有人类帮助的情况下完整地执行这些复杂任务。然后,手动执行研究任务既费时又费力,往往需要数周才能找到合适的资源和信息。虽然,当前的大型语言模型已经非常强大了,但它们主要训练于过去的数据,存在着信息过时和幻觉风险。此外,现有的启用网络搜索的解决方案通常只能访问有限的资源,导致结论可能肤浅或有偏见。
为了应对这些挑战,研究人员提出了链式思维(Chain of Thought, CoT)的思路。链式思维(Chain of Thought, CoT)是一种推理方法,旨在通过生成一系列中间步骤来逐步解决复杂问题,从而提高大型语言模型(LLMs)的解答能力。CoT 的核心理念是让模型在回答复杂问题时,逐步生成中间推理步骤,每一步都为最终答案提供部分解答。这种方法通过分解问题,使模型能够更清晰地理解并解决复杂的任务。
例如,假设我们要解决一个数学问题:“一个人走了3公里,又走了2公里,总共走了多少公里?”。通过CoT的方法,我们可以这样进行:
- 理解问题:知道问题是关于总共走了多少公里。
- 分解步骤:把走的每段路程列出来。
- 逐步计算:先计算第一段3公里,再计算第二段2公里,然后把两段路程加起来。
- 得到答案:3公里 + 2公里 = 5公里。
通过这种逐步分解的方法,模型能够更准确地解决复杂的问题。这种拆解步骤的方式,传统的CoT是通过示例的方式教给模型学习的。还是上面的例子,传统CoT的做法是提供示例如下。
问题:一个人走了3公里,又走了2公里,总共走了多少公里?
步骤:
他先走了3公里。
然后又走了2公里。
把两段距离加起来。
答案:3公里 + 2公里 = 5公里。
通过问题,步骤,答案的方式教给大模型如何处理复杂问题,也就是告诉大模型如何按照步骤进行拆解和执行复杂问题。随着基座模型的参数量增加以及训练数据集的激增,模型的能力越来越强,此时就出现了Zero-shot-CoT(Zero-shot Chain of Thought)。它是CoT 的一种变体,旨在无需任何示例的情况下,通过逐步推理提高LLMs的复杂问题解答能力。传统的CoT 方法通常需要为每个任务提供一些示例,以帮助模型逐步解决问题。而Zero-shot-CoT 则通过输入简单的提示词:“让我们一步一步地思考”,引导模型生成多步骤的推理路径,无需任何示例。
还是上面的例子,对于Zero-shot-CoT而言只需要输入如下信息,然后得到结果:
初始提示:“一个人走了3公里,又走了2公里,总共走了多少公里?让我们一步一步地思考。”
推理步骤:
首先,这个人走了3公里。
接着,他又走了2公里。
把这两段距离加起来。
答案提取:因此,答案(阿拉伯数字)是5。
通过Zero-shot-CoT,模型能够在没有示例的情况下,通过“让我们一步一步地思考”的提示,自行推理并解决问题。
尽管Zero-shot-CoT取得了成功,但它仍然存在三个主要缺陷,
- 计算错误:模型在推理过程中可能会产生计算错误。
- 缺失步骤错误:模型可能会遗漏一些必要的中间步骤。
- 语义误解错误:模型可能会误解问题的语义,导致不准确的答案。
为了解决Zero-shot-CoT的方法所存在的问题,研究人员又提出了Plan-and-Solve(PS)方法。PS提示由两个部分组成:
- 计划:首先制定计划,将整个任务划分为更小的子任务。
- 执行:然后根据计划执行这些子任务。通过这种方法,PS提示能够使LLMs明确地设计解决问题的计划,并在预测最终答案之前生成中间推理过程。
了解GPT Researcher:从架构到流程
前面我们介绍了通过CoT的思路解决了负责任务的执行问题,同时也提出了由于CoT存在的问题,因此研究任务提出了Plan-and-Solve(PS)的方案。接下来,我们会基于Plan-and-Solve的思路来看看最佳实践:GPT Researcher,它是一种自主代理,能够生成详细、真实和公正的研究报告,并提供专注于相关资源、大纲和课程的定制选项。受到最近的 Plan-and-Solve 和 RAG 论文的启发,GPT Researcher 解决了速度、确定性和可靠性问题,通过并行代理工作(而不是同步操作)提供更稳定的性能和更高的速度。
当前的LLMs(大语言模型)面临一些显著的问题。首先,由于它们的训练数据基于过去和过时的信息,导致模型在生成内容时常常出现幻觉,这使得它们难以胜任实时研究任务。此外,许多LLMs的输出仅限于短令牌,这对于生成长篇、详细的研究报告来说是不够的。支持网络搜索的解决方案(例如 ChatGPT + Web 插件)也存在局限性,因为它们仅能访问有限的资源和内容,这可能导致结论肤浅或有偏见。依赖少数精选资源进行研究可能会在确定研究问题或任务的正确结论时产生偏差。
为了解决这些问题,GPT Researcher 采用了Plan-and-Solve的方法,通过先制定计划将复杂任务分解为更小的子任务,然后并行执行这些子任务,从而提高了研究的效率和准确性。通过并行处理,GPT Researcher 能够同时访问和整合大量的网络资源,生成客观和详尽的研究报告。这不仅解决了当前LLMs在信息时效性、输出长度和资源有限性方面的不足,还减少了人为干预的需求,大大提升了研究任务的稳定性和速度。GPT Researcher 的这种创新方法展示了其在在线研究领域的巨大潜力,为未来的自动化研究提供了新的思路和方法。GPT Researcher 的核心特点包括:
- 计划与执行模型:采用PS提示方法,将复杂任务划分为子任务,并逐步执行。
- 并行处理:利用Python的asyncio库,实现并行处理,显著缩短研究时间。
- 多源信息聚合:从多个在线资源中抓取信息,并对其进行总结和过滤,生成客观和事实性的研究报告。
- 高效报告生成:使用GPT-4模型生成详细的研究报告,提供结构良好、信息丰富的内容。
在了解了GPT Researcher核心特点之后,我们来通过下图了解一下它的架构。
- Task:整个研究任务是由一个特定的研究查询或任务驱动的。这一步骤确定了需要解决的问题,并为后续的任务制定了明确的目标。
- Planner:“计划者”代理的主要任务是生成研究问题。根据研究查询,计划者会制定一系列具体的研究问题,这些问题共同构成对任务的全面理解。计划者确保研究问题覆盖了任务的各个方面,从而为后续的信息搜集和分析打下基础。
- Researcher:“执行者”代理负责根据计划者生成的每个研究问题寻找最相关的信息。这个步骤中,执行者代理会触发爬虫代理,在网络上抓取与每个研究问题相关的资源。执行者代理利用注入gpt3.5-turbo和gpt-4-turbo的大模型来处理和分析这些信息
- Query:在执行代理搜集信息的过程中,系统会不断发出查询请求。这些查询是基于研究问题设计的,目的是在网络上找到最相关和最新的信息资源。每个查询都是一个精确的问题,确保获取的信息是高质量且相关的。
Publisher:此时,“计划者”会过滤并汇总所有相关信息,创建最终的研究报告。这个步骤包括对所有抓取到的资源进行总结,并跟踪其来源,确保信息的可靠性和可追溯性。最终的研究报告由”发布者“进行发布,它整合了所有的总结信息,提供一个全面、详尽且公正的研究结果。
GPT Researcher 架构
通过对GPT Researcher 的架构分析,我们将GPT Researcher 的工作流程整理如下:
- 生成研究问题提纲:形成对任何给定任务的客观意见。
- 触发爬虫代理:对于每个研究问题,从网上资源中抓取相关信息。
- 总结和过滤:对抓取的资源进行总结和过滤,仅保留相关信息。
- 生成研究报告:聚合所有总结的资源,使用GPT-4生成最终的研究报告。
初探GPT Researcher:代码结构与基本配置
前面介绍了GPT Researcher 的架构和工作流程,我们来看看它是如何使用的。我们可以通过GitHub 地址(https://github.com/assafelovic/gpt-researcher)访问GPT Researcher,如下图所示从去年底到现在这个项目已经有10K+star 了。
接着,我们会安装GPT Researcher,确保系统中安装 Python 3.11 或更高版本。请参考[这里](https://www.python.org/downloads/)获取详细的安装指南。
通过如下命令,下载项目并导航到其目录:
git clone https://github.com/assafelovic/gpt-researcher.git
cd gpt-researcher