面壁智能联合清华发布GitAgent:可自主扩展工具箱的大模型智能体

作者:modelbest
2024-01-16 16:10:32

使用工具极大拓展了大语言模型的能力边界,还能构建出由大模型驱动的强大智能体,辅助人们执行复杂任务需求。去年10月,面壁智能就联合清华大学 THUNLP 实验室打造并开源了超强智能体 XAgent,具备安全、高效、可扩展的工具执行能力。

然而,当涉及一些需要专业领域知识的复杂任务时,有限的工具集合仍然会限制智能体的能力发挥。即便在 GitHub 等代码托管平台上已经存在各种不同领域的大量代码仓库,也仍然面临存在缺陷、文档不完整等诸多挑战。

近日,面壁智能联合清华大学自然语言处理实验室(THUNLP)共同发布了让大模型智能体可主从 GitHub 上扩展工具集合智能体应用框架 GitAgent。它将整个工具箱扩充过程分解为搜索、配置、应用、存储四个阶段。

GitAgent 扩充工具的四个阶段

  • 搜索:根据用户的任务需求,在 GitHub 上搜索适合的仓库
  • 配置:配置工具仓库的执行环境
  • 应用:应用配置好的仓库解决实际任务
  • 存储:将仓库存储起来,以便用于高效处理后续查询等
                                                                                                          GitAgent 的分层任务分解策略
                 

 ➤  搜索 

在搜索阶段,GitAgent 旨在找到适合用于完成用户查询的仓库,包含三个子任务:

首先,存储仓库检索:GitAgent 通过检索已存储仓库的功能描述与使用经验,判断已存储仓库与用户需求的相关性。如果某个仓库合适,就会加载其环境,跳过随后的配置阶段,直接进入应用阶段。

其次,GitHub 仓库搜索:如果存储的仓库无法用于完成用户需求,GitAgent 将在 GitHub 上搜索合适的仓库。搜索仓库有两种 方式,如果用户指定了仓库,那 GitAgent 将直接调用 GitHub的search_by_name API。反之,GitAgent  会从用户需求中提取一系列潜在的 GitHub Topics,然后调用 GitHub search_by_topic API 来搜索仓库。

最后,仓库功能判断:获得一系列候选仓库后,GitAgent 会阅读每个仓库的 README,然后给出详细的理由分析其功能,并最终对仓库是否能用来解决用户需求做出判断。

 ➤  配置 

在配置阶段,GitAgent 旨在配置 GitHub 上适合的仓库执行环境。

首先,它从 GitHub 上克隆仓库,并按照相应 README 文件中的指南执行配置命令(包括安装依赖和下载所需数据)。由于一些仓库缺乏足够的维护,因此源代码中的可能存在错误或 README 中可能存在信息缺失,此时 GitAgent 将开启一个 Pull_Requests_Exploration 子任务,从 PRs 中学习人类实践经验来解决问题。

从人类经验中得到解决方案后,GitAgent 即开启 File_Modification 子任务来修改仓库的源文件以修复错误。此外,为了确保安全措施,仓库被克隆到一个 docker 环境中,并且所有后续命令都在这个隔离的环境中执行。

 ➤  应用 

在应用阶段,GitAgent 应用配置好的仓库来解决用户需求。

设计良好的仓库提供了清晰的使用入口,例如CLI命令。此时,GitAgent 可以直接设置特定的命令选项或参数,从而使用该仓库以满足用户需求。然而,对于那些入口不清晰的仓库,特别是缺乏详细文档的情况下,GitAgent 需要再次通过 Issues_Exploration 子任务借助人类经验。

在某些情况下,仓库会有大量输出(例如,冗长的执行日志),因此 GitAgent 需要进行 Long_Context_Process 子任务,编写 Python 程序(例如,正则表达式)从冗长的文件中提取关键信息。因此,File_Modification 子任务也会涉及。

 ➤  存储 

在存储阶段,GitAgent 将配置好的仓库及其执行环境存储下来,以便未来继续使用。

具体来说,执行环境将存储在一个 docker 镜像中,如果有类似的查询出现,GitAgent 可以检索这个仓库以直接应用。

为了提高存储仓库的检索准确率,GitAgent 还会开启 Function_Description 子任务总结对仓库功能,同时开启 Experience_Summarization 子任务总结应用阶段的经验。

由于 GitHub 中的仓库存在非标准化的问题,一些仓库的 README 可能并不完善,可能没有包含完成配置和应用阶段所需的关键信息,同时源代码可能存在缺陷。在这种情况下,GitAgent 将通过 GitHub 的 Issues 和 Pull Requests(PRs)来学习人类的实践经验,借鉴人类是如何解决各种问题的。

例如,当遇到问题时,GitAgent 会首先将其概括为一个检索查询请求,然后搜索相关的 Issues 和 PRs。在此之后,它会判断这些 Issues 和 PRs 与当前问题的相关性,评估它们是否适用。如果找到合适的解决方案,GitAgent 会阅读相关内容,并学习如何解决问题。最后,它还会通过 \model 总结在整个过程中获得的实践经验,以指导未来再次使用。

  案例:Qlib搜索

 

为了详细展现 GitAgent 的工具箱扩展过程,研究团队应用 GitAgent 进行了 Qlib 搜索。GitAgent 展示了其在仓库检索方面自主选择不同搜索策略的能力

GitAgent 根据用户需求的内容来调整其搜索方法。例如,在 Sniffles 的案例中,当用户提供了仓库名称时,GitAgent 直接使用给定名称进行仓库搜索。相比之下,对于 Qlib 的查询,在没有提及特定仓库的情况下,GitAgent 会从查询中总结出相关的 GitHub 仓库 Topic,并依次搜索这些 Topic 以确定最合适的仓库。

Bringing-Old-Photos-Back-to-Life 配置案例

此外,即使在官方仓库文档中存在漏洞或信息不完整的情况,GitAgent 也能熟练地管理设置过程。对于像 AiZynthFinder 这样的仓库,其 README 中有详细的设置指导,GitAgent 能高效地遵循指南来设置环境。

相反,对于像 Bringing-Old-Photos-Back-to-Life 这样的仓库,尽管它提供了官方dockerfile 来构建执行环境,但其中存在一些 bug。在这种情况下,GitAgent 会主动通过检索 PRs 来寻找解决方案,并相应地修改 dockerfile 以修复 bug。

Sniffles 应用案例

Qlib 应用案例

不仅如此,GitAgent 还能够妥善处理应用阶段中出现的各种问题。例如,在一个Sniffles 案例中,用户要求 GitAgent 下载特定数据进行分析。但是在应用过程中,GitAgent 发现尚未安装 “curl” 命令,然后 GitAgent 便自主使用 “apt-get” 安装 “curl”。

在另一个 Qlib 案例中,用户要求 GitAgent 提供交易详情,GitAgent 发现仓库中不存在 “record” 目录。因此,GitAgent 求助于 GitHub 的 Issues,并找到了一个可以解决记录输出问题的 Issue。然后,它根据 Issue 内容修改配置文件并重新运行命令,完成了用户的需求。

调用工具可以极大拓展大模型的能力边界,这已经成为整个行业的共识。因此,当面对各式各样的现实任务时,如何让大模型智能体可以自主、按需地从外部获取工具并集成到自身,从而不断扩展其能力,是当前大模型智能体领域一个关键性的研究课题。面壁智能联合清华大学自然语言处理实验室针对 GitAgent 的研究成功探索了大模型智能体自主扩充工具箱延展能力的可能性,相信未来大模型智能体技术会帮助人类实现更加多样更加复杂的任务需求。

 ➤  论文地址

🔗 https://arxiv.org/abs/2312.17294