编码代理不需要更大的上下文窗口 - 他们需要一个上下文编译器

大多数编码代理将提示构造视为检索:收集更多文件,添加更多上下文,希望模型能够弄清楚。但这种方法很快就会失效。随着上下文的增长,不相关的代码会争夺注意力,当窗口填满时,智能体开始压缩自己的内存——通常是在任务中。看似“遗忘”的东西通常只是退化的环境。本文探讨了一种不同的方法:将提示构造视为编译器,决定保留什么、减少什么以及完全丢弃什么。编码代理不需要更大的上下文窗口 - 他们需要上下文编译器首先出现在走向数据科学上。

来源:走向数据科学

TL;DR:

。在向模型发送任何内容之前,它会找出目标文件实际依赖的内容,将非必要的代码修剪为纯接口,并删除所有无法访问的内容。

在两个真实的 Python 存储库上对其进行了测试:它将提示符大小减少了 69-74%,并且运行时间不到 75 毫秒。

下面的所有数字都是直接从捕获的终端运行中提取的。如果该工具无法确定地确定某些内容,它会明确标记它而不是猜测。

编译器不只是编译代码

编译器只是知道保留什么的过滤器。你给一个入口点和一个代码库,它跟踪实际被调用的内容,扔掉无用的重量,并输出一个中间表示,其中仅包含下一步需要的细节。没什么额外的。

大多数编码代理并不像编译器那样对待提示构造。他们构建某种形式的存储库地图,收集他们认为相关的文件,并将它们发送到模型,而结构简化相对较少。更大的上下文窗口会有所帮助,但它们不会删除不相关的上下文。这些额外的上下文会与真正重要的代码争夺注意力。当窗口大小缩小时,膨胀会触发压缩。压缩听起来像是例行清理,直到它发生在任务中间:代理总结自己的上下文以腾出空间,然后在接下来的几个回合中尝试从有损摘要中重建实现细节。代理“忘记”某事的一半情况,只是其自身的内存管理降低了其召回率。

我想看看如果您按照编译器的规则构建提示而不是仅仅检索更多内容会发生什么。

所以我构建了一个上下文编译器:一个完全用 Python 标准库编写的三遍管道。它解析目标文件实际到达的内容,将这些依赖关系精简到接口,并删除其他所有内容。

在两个真实的 Python 存储库中,它将提示符大小减少了 69-74%,编译时间低于 75 毫秒。

第 1 遍:符号解析

自己运行