AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


绿洲和星尧聊了聊他的2024 ICLR Agent获奖论文 | Agent Insights
发布日期:2024-06-14 04:43:48 浏览次数: 1939 来源:緑洲资本 Vitalbridge


Agent 是建立在基础模型与人类多轮交互后,拥有端到端问题解决能力的智能体,然而当前的 Agent 缺少了模型与环境之间准确、灵活且能自动优化的交互能力。

美国伊利诺伊大学厄巴纳-香槟分校(UIUC) 博士王星尧开发 CodeAct 以提供一条新奇的思路,底层利用代码让 Agent 与环境进行交互,效率大大提升。CodeAct 未来能够持续提升在线学习能力,模型在环境交互的过程中寻找新数据,持续优化迭代,一定程度上缓解互联网数据即将用尽,模型能力遇到瓶颈的问题。Enjoy

《EXECUTABLE CODE ACTIONS ELICIT BETTER LLM AGENTS》

CodeAct 整体框架图

论文链接:https://arxiv.org/abs/2402.01030

解决问题传统 Agent 架构通过生成预定义的 JSON 或文本完成操作,受到操作空间和灵活性的限制,CodeAct 利用代码,将 Agent 行动整合到统一的行动空间。与 Python 解释器集成后,CodeAct 可以执行代码行动,通过多轮交互动态修改先前的行动,大大提升 Agent 与环境之间的交互能力

模型框架:CodeAct 核心提供了一种思想,用代码来进行智能体-环境的交互(例如工具调用),提高效率和通用性。CodeAct 的行动空间自然地支持搜索、记忆等过程,例如记忆通过创建一个数据库进行实现

应用空间Agent 环境交互环节都可以用 CodeAct 替代

各类模型在 CodeAct 架构下处理不同复杂任务的性能
评估结果CodeAct 在复杂任务下更加有效,例如 GPT-4-1106-preview 在 M3ToolEval 的复杂任务下 CodeAct 性能比传统方案高 20%,并且使用了比传统方案少 30% 的交互轮数。CodeAct 的优势随着模型能力提升会越发明显

绿洲:请帮我们简单介绍下您的研究背景,以及对 Agent 的看法?


星尧:我目前在 UIUC 主要跟着 Heng Ji 老师做可交互语言模型智能体(Interactive Language Agent)相关的研究。我认为,Agent 的本质是以 LLM 或 VLM 等各种模态大模型为底座,在此之上与人类、环境进行多轮交互后的结果。ChatGPT 本质上也是基础模型与人类进行多轮交互的产品,只是与现在的智能体相比缺少了基础模型与环境的交互。早期类似于 AutoGPT 等智能体的尝试实际是提前布置好任务细节,并交由 Agent 自主执行,大多缺少了人类在过程中进行的反馈修正。


Agent 中模型、人类、环境的交互需要协同,我们发在 ICML/ICLR 上的 CodeAct 主要专注于探索让模型更好地与环境进行交互的方式:我们探索代码作为媒介为 Agent 与环境的交互方式,与人类使用者利用自然语言进行交互,这是 CodeAct 的核心思想。接下来我们将顺着这一问题的框架去延展更实际的应用场景。


CodeAct 的架构可以很自然地兼容包括搜索、记忆等过程,记忆用 CodeAct 本身也是可以实现的,一个原始的方法就是你直接给模型创建一个数据库,模型会直接利用代码访问数据库 API 把信息一行一行写进去,搜索也类似,直接给模型设立 Google Search API 进行使用。CodeAct 提供了一种思想,用代码来进行部署和工具调用,可以直接利用已有的代码软件包,节省很多需要人类开发者预先定义不同工具的额外工作。


绿洲:请帮我们解释一下,过去与现在模型-环境交互模式的变化?


星尧:CodeAct 是对过去交互方式的改进方法,比如过去很多人会使用 ReAct 配合 Tool Calling 的方式,用户需要提前定义工具列表等,定义完还需要针对每个工具写对应的文档,让模型明白这个工具能干什么。其中最核心的痛点是“逼迫”模型按照特定的格式进行输出(比如 JSON),需要写复杂的解析器(Parser)去捕捉修复输出的很多边缘情况(Edge Case)。


因此在过去的 Agent 开发过程中,我能明显地体验到规定模型输出是非常痛苦的,模型永远会生成千奇百怪的结果,有的时候多一个空格,少一个逗号,导致Agent 周围包的这层工程化代码非常冗杂。然而工具最终使用还是需要代码来执行,执行完再喂回模型,过程中模型根本不知道它与特定格式交互的时候,本质上还在和代码交互,相当于在 Agent 外面缠绕“十几层胶带”,让这个 Agent 开发的过程繁杂缓慢。CodeAct 的思想就是少缠几层就是几层,把整个环境暴露给模型,告诉模型你直接利用 Python 指令交互,如果出现了错误,就可以直接利用 Python 解释器返回的自动错误信息来提醒模型进行代码修复。


总体来说 CodeAct 对比过去的路径有四个大的优势:


第一是能够大量节省模型与环境交互次数;


第二是准确率提升;


第三是软件功能泛化性;


第四是自动反馈优化。


目前 CodeAct 已经能够完成一些有意义的任务,比如一些数据科学和数据可视化任务,未来我们希望能够看到 CodeAct 解决更多端到端的问题,形成更复杂的应用。


绿洲:您同时也是热门的开源项目 OpenDevin 主要贡献者,能否帮我们简单介绍一下 OpenDevin,以及您在其中做了哪些工作?


星尧:OpenDevin 是一个很神奇的项目,阿里通义千问的 Junyang 和 Binyuan 发起当时在 Devin(近期著名 AI 软件工程师项目)推出后一天在推特上发起 OpenDevin,我看到后立马联系他们加入了社区,我们刚推出 README 文件之后就有一千多个 Star ,后来 CMU 教授 Graham Neubig 出来提交了第一个 PR 写了一个很简单的界面后,大家开始在社区里疯狂迭代,到现在两万多 Star。我当时也想把 CodeAct 集成进去,后来逐渐成为了 OpenDevin 第二大贡献者。


我对 OpenDevin 的贡献,本质是把CodeAct 在现实生活中进行应用。CodeAct 过去都在 Python 上进行 Agent-环境交互的实验,但很多软件工程任务对 Agent 环境交互要求很高,其实最主要的环境就是 Bash Terminal(Linux 系统的运行命令),所以在 OpenDevin 里我将 CodeAct 延展到 Bash 语言上。近期我们还在尝试将 OpenDevin 延展到类似于浏览器的编程语言上,用户可以利用语言控制浏览器,OpenDevin 逐渐会与越来越多不受限的语言进行操作。


绿洲:CodeAct 在执行完全没接触过的新工具时,需要进行微调吗?


星尧:目前分为两种情况,一些比较常见的工具包调用案例,建立在 CodeAct 之上的基础模型通过大量预训练已经非常熟悉了,它会自动选择 Library API,不需要进行人工干预。在特定场景上的应用(例如让模型调用一些私有工具包),部分需要给它们提供 Library Documentation 或者代码样例。除此之外,你也可以选择在公司自己训练的私有大模型上部署 CodeAct,这样 Agent 也能从一开始就学会公司内部代码的用法。


绿洲:我们如何定义模型选择哪个工具进行执行效果更好呢?例如我现在要定一张中国到欧洲的机票,CodeActAgent 如何知道是谷歌搜索、ChatGPT 制定方案、微信询问中哪种方案最佳?


星尧:我们也在思考人在最后做决策的思维模式,我们发现人也是在交互中学习,例如人在网上查询后没有满意的结果之后自然会到微信里去问朋友。我们接下来一个比较重要的研究方向就是 Agent 的在线学习能力,例如我们要查机票,有 A、B、C 三种途径,我们希望模型能够查到 A、B、C 所有途径的信息进行比较之后,发现 C 的结果最优,这样 Agent 下次在进行机票查询的时候就能够自动选择最优方案,未来大部分交互过程都是可学习的。


绿洲:能否帮我们解释一下开发 CodeActInstruct 的意义?


星尧:CodeAct 在闭源模型上效果很好,但在开源模型上表现不行,可能主要是因为开源模型的指令微调不足,比如 Code Llama 本身代码预训练是足够的,但微调过程中缺少相应的数据,CodeActInstruct 能够弥补这个缺失点,使开源模型微调更加有效。


CodeActInstruct 是个更全面的数据集,比同类型的数据集多了三倍数据量(至少 5 倍的 Token 数),因此我们希望利用 CodeActInstruct 帮助开发者来提高基础模型的 CodeAct 能力。


CodeActInstruct 数据集对比其他代码数据集


绿洲:您下一步准备做什么,CodeAct 可以更好地应用在哪些领域?


星尧:我们现在把 OpenDevin 与普林斯顿的 SWE-Agent 结合起来,发现CodeAct 已经在 SWE-Bench 标准(Software Development Task Completion Benchmark)取得了不错的进展,同时CodeAct 还可以集成更多功能。对我来说我在研究领域希望把 OpenDevin 框架完善,同时学会前面提到的在线学习的能力。


另外我们也在把 CodeAct 中的交互模式做成“基础设施”,通用到更多的领域,CodeAct 中我们只和 Python 交互,主要是工程建造时长太高了。但目前我们社区里发现大家都渴望建造通用的软件工程 Agent ,所以大家会在社区中贡献不同的交互方式,例如 CodeAct 和 Bash、浏览器等,我会利用好这些社区中的经验做好研究,最后反哺给开源社区做一个更加通用化的 Agent 环境交互方式。


绿洲:目前大家对低代码 Agent 端到端自动化很兴奋,您觉得类似产品实际落地还需要哪些条件?


星尧:目前从环境交互中学习还是很缺失的,基模的能力已经能达到基本要求,稍微 Prompt 一下代码就能达到 60 分水平,但这个效果是不稳定的,有时候会卡死循环,这种情况下除了基模能力提升以外,最通用的解法是让 Agent 自己学。Agent 一开始做错了没关系,但下次需要有所进步。另外预训练很快会用完世界上所有的数据,互联网的数据穷尽的时候,我认为需要从环境交互中找数据,并且从环境交互中学习,这是未来大模型很关键的迭代方式。

本质上 CodeAct 是在提供 Agent 与环境交互过程,强化代码作为媒介的方式,并不是加强底层模型的代码生成能力。Agent 接入 CodeAct 之后还需要学习规划、决策、反思等具体能力,但我们并不希望 Agent 学会代码交互后就把其他能力摒弃了。人们能够从历史经验中不断学习哪些技术方案可行或不可行,我认为下一步就是希望我们的基础模型+Agent也能做到这一点,这在未来互联网数据不断穷尽的背景下更为重要。

绿洲:您如何看开源大模型与闭源大模型长期以来的关系?合成数据在模型进化中长期扮演什么角色?


星尧:我前面的假设是,总有一天大模型会用完人类世界所有互联网数据,那么开源模型的能力会慢慢追上来。OpenAI 之所以这么强也是因为有先发优势,开源与闭源模型的差距会慢慢地减少,除非线上学习需要很多资源,以至于开源社区完全做不了,如果不是这种情况开源模型不会落后太多。


合成数据方面,其实我前面提到人类与环境交互的过程,也一定程度上是合成数据,只不过那是模型自己合成了自己的输出数据。当然短期肯定能够通过合成数据提升模型表现,比如最近有一篇 Apple 的论文《Rephrasing the Web: A Recipe for Compute and Data-Efficient Language Modeling》,他们把预训练数据转写了一遍,混进去二次训练发现效果提升了很多,这也是合成数据更具体的使用方式,把模型数据中乱七八糟的内容都“洗干净”,让模型能够学得更好。另外,其实 CodeAct 提出的利用代码加强 Agent-环境交互数据迭代积累,加强 Agent 在线学习能力也是一种不错的能力提升方式



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询