SICA:一个可以自我改进的编程智能体

研究者提出 SICA,一个能够自我改进代码的智能体,实验表明其在特定任务上性能提升显著,并开源了实现。

原文标题:成熟的编程智能体,已经学会升级自己的系统了

原文作者:机器之心

冷月清谈:

布里斯托大学和 iGent AI 的研究者提出了一种名为 SICA(自我改进编码智能体)的全新智能体架构。SICA 能够通过自我参照的方式,不断修改和改进自身的代码库,从而在成本、速度和基准性能方面实现提升。与以往的元智能体方法不同,SICA 消除了元智能体和目标智能体之间的区别,实现了完全的自我改进。实验结果表明,SICA 在 SWE Bench 验证的随机子集上,性能提升了 17% 到 53%。此外,研究者还开源了 SICA 的实现,为构建新的 SICA 系统以及对 LLM 进行后训练提供了一个参考框架。

SICA 的核心运行循环与之前的 ADAS 类似,都保留了历史智能体的档案和基准结果。但 SICA 会从档案中选取表现最佳的智能体作为元智能体,并指示其查看档案,确定改进方案并实施。研究者使用一个效用函数来评估智能体的性能,该函数综合考虑了基准性能、运行时间和成本等因素。实验结果表明,SICA 在文件编辑、符号导航等任务上取得了显著进展,但在推理能力较强的领域,改进幅度较小,这突出了基础模型和智能体系统之间相互作用的重要性。

怜星夜思:

1、SICA 的自我改进机制,在实际应用中会遇到哪些安全风险?有没有办法缓解?
2、论文中提到 SICA 在推理能力较强的任务上改进不明显,你觉得是什么原因导致的?如何改进?
3、SICA 的开源,对于 AI 领域的开发者来说,意味着什么?你觉得它在哪些方面具有应用潜力?

原文内容

机器之心报道

编辑:蛋酱


编程智能体,几乎成为了 2025 年最热门的话题之一。不管是学术机构还是工业界,都在寻找更高效的落地路径。


机器学习领域的历史经验表明,手工设计的解决方案最终会被学习到的解决方案所取代。我们好奇一个问题:智能体本身是否可以通过发现新的提示方案或工具,无需人工设计和实施,就自主修改和改进自己的代码?


2024 年,《Automated Design of Agentic Systems》(Hu et al., 2024) 一文率先尝试了使用元智能体来优化智能体实现,将智能体系统自动设计(ADAS)这一领域往前推了一步。不过,该研究并未探索「自我改进」,因为其中有两个独立的智能体:执行任务的目标智能体和改进目标智能体的元智能体。


而来自布里斯托大学和 iGent AI 的研究者认为,完全自我参照式的元智能体编程方式在今天是可实现的,并提供了一种合理的替代方案



  • 论文标题:A SELF-IMPROVING CODING AGENT

  • 论文链接:https://arxiv.org/pdf/2504.15228

  • 代码地址:https://github.com/MaximeRobeyns/self_improving_


具体来说,这项研究贡献如下:


  • 自我改进编码智能体(SICA)消除了元智能体和目标智能体之间的区别,能够编辑自己的代码库,在成本、速度和基准性能方面进行自我改进。

  • 自我参照智能体可有效改进自身的实现。研究者发现,即使考虑到安全限制和资源效率,在 SWE Bench 验证的随机子集上,性能也能提高 17% 到 53%。

  • 研究者与社区分享了自我改进编码智能体(SICA)的实现。SICA 是用标准 Python 实现的,没有特定领域的语言,它为构建新的 SICA 系统提供了一个参考智能体框架,也为那些寻求在工具使用和其他智能体任务方面对 LLM 进行后训练的人提供了一个参考智能体框架。


方法概览


SICA 的主要运行循环类似于 Hu et al. (2024) 的 ADAS 循环。特别是,SICA 和 ADAS 都保留了以前智能体的档案及其基准结果。


第一步,SICA 从存档中选取到目前为止表现最好的智能体作为元智能体,指示元智能体查看存档,确定改进方案并加以实施。


算法 1 展示了这一高级方案:



请注意,这与 ADAS 不同,ADAS 有一个固定的元智能体,因此不会从档案中选择元智能体(ADAS 中的档案是目标智能体档案,而不是元智能体档案)。


其次,ADAS 和 SICA 都会在一组评估基准上对新智能体进行评估,并存储评估结果。


研究者用一个效用函数来定义性能「最佳」的智能体,该函数包含了一个优秀智能体的共同期望值:标准化基准性能分数 p_score ∈ [0,1]、以秒为单位的挂钟时间 p_time,以及美元成本 p_cost。基本效用的计算公式为


图片


其中,研究者将系数设为 w_score = 0.5、w_cost = 0.25 和 w_time = 0.25。此处将每个问题的最差成本设定为 10 美元,并规定 300 秒的超时时间,超时后将取消智能体。为了对超时前所做的工作给予部分奖励,按以下方法计算最终效用,超时惩罚为 τ = 0.5:



需要注意的是,由于不进行任何权重更新,这个数字分数只用于挑选下一个元智能体以及下一次迭代的基础智能体。


首先介绍初始编码智能体,然后介绍基准运行框架,以及该框架如何自然而然地允许我们创建一个自我参照任务(即改进编码智能体)。


智能体上下文的结构至关重要,它包含打开的文件内容等,而不仅仅是提示。在初始编码智能体中,上下文结构如图 3 所示。



首先呈现的是包含智能体定义的系统提示,列出了智能体可用工具的定义以及可调用的子智能体。系统提示的最后是系统信息,例如如何跳出智能体循环并返回调用流程的说明。


接下来是「核心提示」,它被设置为聊天模板格式中的第一条用户信息,包含呼叫者指定的要处理的问题陈述(呼叫者可能是调用智能体的用户,也可能是呼叫子智能体的智能体)。在这里,研究者还插入了智能体已打开文件的视图以及当前工作目录的表示。


最后,LLM 智能体上下文的其余部分是运行助理信息。其中包含对问题的一连串推理、工具调用及其响应、子智能体调用及其响应,以及来自异步监督系统的任何通知或评论。


LLM 上下文以这种方式布局,允许添加新内容,从而保留 KV 缓存,以减少工具调用之间的延迟和成本。对于基础智能体,此处采用了一种简单的方案,即文件编辑内容以差异形式添加,并在累积到一定数量后定期重新合并到陈旧文件视图中。智能体可以编写更复杂的 KV 缓存保存方案,以降低成本。


实验结果


研究者首先展示了在基准集中包含相对长周期任务的运行,选取了 SWE Bench Verified,包括测试问题分解、代码导航以及快速高效的文件编辑,研究者从中选择了 50 个问题的固定随机子集;他们还从 LiveCodeBench 中随机抽取了 50 个问题,这些问题类似于竞技编程,通常包含更多理论推理。此外,研究者还选取了两个「合成」基准任务示例,它们完全是在智能体的代码库中定义和策划的。


大多数智能体中使用 Sonnet 3.5 (v2) (Anthropic) 运行智能体系统,只有一个「推理智能体」使用 o3 mini。结果如图 3 所示,更详细的迭代级性能数据见表 1。



结果数据显示了令人鼓舞的进展。在文件编辑基准测试中,智能体最初只具备覆盖文件的能力,这不仅速度慢,而且 token 效率低下,但它很快就实现了基于差异和范围的自称「智能」的编辑工具;在符号导航任务中,智能体在第 9 次迭代时实施了基于 AST 的简单符号定位器(也许是利用了基准测试主要基于 Python 的事实),取得了良好的改进,这也反映在其他任务中。LiveCodeBench 的得分也有细微提高,但不如其他一些基准测试明显。


研究者还评估了自我参照智能体系统在提高推理能力较强的领域的任务性能方面的有效性。他们使用基准集中的两个问题解答任务进行了另一项实验: 图 4 显示了实验结果。这里的结果显示改进较少,并突出了基础模型和「脚手架系统」之间的重要相互作用。


图 4 中迭代 0 的基础智能体系统使用 Sonnet 3.5,「推理」子智能体使用 o3-mini。o3-mini 模型本身在 AIME 和 GPQA Diamond 上的得分分别为 87% 和 79%,具有「高」推理能力,而整个智能体系统在这两个基准测试中的平均得分为 76%。



通过观察轨迹,研究者发现,在许多运行中,主智能体只是将问题委托给基于 o3-mini 的推理智能体,并没有充分利用智能体系统的全部能力。对于 o1、o3-mini 或 DeepSeek-R1 等「推理模型」,研究者怀疑加入旨在诱导推理行为的粗糙组件(如图 4 中迭代 4 和 6 中的组件)实际上可能会打断在智能体系统之外训练的推理模型的推理思维链,从而导致性能下降。


更多研究细节,可参考原论文。

© THE END 

转载请联系本公众号获得授权

投稿或寻求报道:[email protected]

比起直接的应用潜力,我更看重 SICA 开源带来的研究价值。它提供了一个可供研究人员使用的平台,可以用来探索智能体的自我学习、进化和适应能力。这对于理解智能的本质,以及构建更通用的人工智能系统具有重要意义。

此外,SICA 的开源也有助于推动以下研究方向:

1. 元学习:研究如何让智能体学会学习。
2. 终身学习:研究如何让智能体持续学习,适应不断变化的环境。
3. 可信 AI:研究如何让智能体做出可信赖的决策。

我觉得原因可能在于,SICA 目前的改进主要集中在代码层面,比如优化代码结构、提高运行效率等等。但是,推理能力更多地依赖于算法和逻辑的设计,而不是代码的细节。所以,SICA 在代码层面的改进,对推理能力的提升效果有限。

要改进的话,我觉得可以从以下几个方面入手:

1. 引入更强大的推理模型:SICA 目前使用的推理模型可能不够强大,可以考虑引入更先进的推理模型,比如 GPT-4 等。
2. 学习推理算法:让 SICA 学习一些常用的推理算法,比如深度优先搜索、广度优先搜索等等。
3. 构建推理知识库:为 SICA 构建一个推理知识库,让它能够利用已有的知识进行推理。

我同意楼上的观点,SICA 的瓶颈可能在于其推理能力的上限。这让我想到了一个比喻:SICA 就像一个熟练的木匠,可以把木头打磨得很光滑,但是如果缺乏建筑设计图,就无法建造出精美的房子。

我认为可以尝试以下方法来提升 SICA 的推理能力:

1. 集成知识图谱:将知识图谱作为 SICA 的外部知识来源,帮助它理解概念之间的关系。
2. 引入符号推理:结合符号推理和神经网络,让 SICA 能够进行更复杂的逻辑推理。
3. 模仿人类的推理过程:研究人类的推理过程,将人类的推理策略融入到 SICA 的算法中。

楼上两位说得都很有道理,我补充一点我的看法。SICA 的自我改进,本质上是一种搜索算法,它在代码空间中寻找更优的解。但是,这个搜索空间非常复杂,很容易陷入局部最优解,甚至进入危险区域。因此,我认为需要引入一些约束条件,引导 SICA 在安全区域内进行搜索。比如:

1. 形式化验证:使用形式化验证技术,证明 SICA 修改后的代码满足一定的安全属性。
2. 沙箱环境:在沙箱环境中运行 SICA 修改后的代码,观察其行为是否符合预期。
3. 人工干预:在 SICA 的自我改进过程中,引入人工干预,纠正其错误的行为。

别忘了,所有这些智能体都是基于LLM的,而LLM本身就是一个黑盒。当SICA尝试改进推理能力时,它实际上是在LLM的固有能力范围内进行操作。如果LLM本身在某些推理任务上存在固有的局限性,那么SICA的改进空间也会受到限制。

我们可以考虑:

1. Prompt工程:更精细的prompt可能可以引导LLM更好地发挥其推理能力,但这需要大量的实验和调优。
2. 混合智能体架构:将LLM与其他专门设计的推理模块结合起来,例如规则引擎或者符号计算系统,可以弥补LLM在特定推理任务上的不足。

SICA 的开源,对于 AI 领域的开发者来说,无疑是一个福音。这意味着我们可以站在巨人的肩膀上,更快地构建出更强大的智能体。我觉得 SICA 在以下几个方面具有应用潜力:

1. 自动化代码生成:SICA 可以根据需求,自动生成代码,提高开发效率。
2. 自动化软件测试:SICA 可以自动测试软件的漏洞,提高软件质量。
3. 个性化教育:SICA 可以根据学生的学习情况,自动调整教学内容,提高学习效果。

这个问题问得好!SICA 这种自我改进的智能体,确实可能存在安全风险。比如,智能体可能会为了追求更高的性能,而忽略了代码的安全性,引入漏洞或者后门,被人恶意利用。缓解的办法我觉得可以从几个方面入手:

1. 严格的权限控制:限制 SICA 对代码库的修改权限,避免它随意篡改关键代码。
2. 定期的安全审计:对 SICA 修改后的代码进行安全审计,及时发现和修复潜在的安全问题。
3. 引入安全指标:在 SICA 的效用函数中加入安全指标,让它在追求性能的同时,也要考虑到安全性。

SICA 的开源,让我想到了 Linux 的开源。Linux 的开源,促进了操作系统的发展。我相信 SICA 的开源,也会促进智能体的发展。

我认为 SICA 在以下几个方面具有应用潜力:

1. 智能家居:SICA 可以控制家里的电器,提供更智能的家居服务。
2. 智能客服:SICA 可以回答用户的问题,提供更高效的客服服务。
3. 智能医疗:SICA 可以辅助医生诊断病情,提供更精准的医疗服务。

SICA 这种自主进化的模式,让我想到了生物界的进化。如果进化方向出现偏差,可能会导致不可预测的后果。我认为安全风险主要体现在以下几个方面:

1. 对训练数据的依赖性:如果训练数据中包含恶意代码或者有偏见的数据,SICA 可能会学习到错误的行为模式。
2. 对抗性攻击:攻击者可能会通过构造特殊的输入,诱导 SICA 修改代码,从而达到攻击的目的。
3. 不可解释性:随着 SICA 不断自我改进,其内部机制可能会变得越来越复杂,难以理解和预测。

为了缓解这些风险,我认为可以尝试以下方法:

1. 数据清洗和增强:对训练数据进行清洗和增强,去除恶意代码和偏见数据。
2. 引入对抗训练:让 SICA 学会在对抗性攻击下保持稳定。
3. 可解释性技术:采用可解释性技术,理解 SICA 的决策过程。