让我们的智能体看见整个代码仓库的引擎
我们的代码智能引擎能在代理接触代码库之前,就让它们了解整个代码库的结构,并在它们可承受的预算范围内,为其提供一项变更所需的上下文。
- 行业开发者工具
- 合作方式内部引擎,为我们自己的智能体而建
- 状态在自有工作中使用,并持续扩展
先服务我们自己的智能体
这是我们自研的工具:它是我们工具链中负责在代理操作任何内容之前,决定其能够查看哪些内容的部分。它为代理提供项目上下文,使其在修改代码之前能够检查相关的定义和引用。
塑造一切的约束条件是推理预算。一个篇幅过大、难以阅读的答案,不如一个篇幅较小、恰好合适的答案好,因此每个答案的大小都根据代理能够利用的范围来调整。关键在于为实际工作预留预算。
问题出在我们自己身上
处理大型代码库的代理在进行修改前,需要了解相关的项目背景。
打开的文件不等于代码库
被要求改一个函数的智能体,能看到这个函数和它所在的文件。谁调用了它、它又调用了什么、项目的哪些部分会因为这次改动而受影响,全都在画面之外。改动是孤立地想出来的,也是同样孤立地被评审的。
为了找一处而读完整个项目
没有地图,找到正确位置就意味着不断打开文件再丢掉。每个被丢掉的文件,代价都已经从真正工作所需的同一份预算里付掉了;在大仓库里,这份代价在任何有用的思考开始之前就发生了。
在大型代码库中查找正确的代码
当代理不知道相关代码的名称或位置时,就很难找到它,而每次错误的猜测都会从该任务所需的预算中扣除。
该平台的功能
代理会收到变更所需的项目背景信息,其范围会根据其实际需求进行调整。
打开文件前项目的形态
代理程序首先基于“何处声明了什么”这一前提,因此会根据变更所处项目的上下文来推断该变更。
- 声明会在我们所支持的所有语言中进行索引
- 代理可以查看其尚未读取的文件的结构
- 无论代码库规模多大,项目地图始终清晰易读
按名称或描述查找
代理可以通过标识符或所需代码的描述进行搜索,并检查搜索结果。
- 按精确标识符搜索
- 根据代码功能的描述进行搜索
- 向代理展示的结果,供其评估
一项变更会触及什么
除了定义之外,引擎还知道名称的使用位置,以及哪些文件依赖于哪些名称。这使得查找操作变成了对后果的考量。
- 关于“这取决于什么”的答案,请参见其定义处旁边的说明
- 文件加载了什么内容,以及是什么加载了该文件
- 最近发生了什么变化,答案随之揭晓
答案有上限,且任何客户代码均不会离开机器
交付这一侧由两条规则塑造:回答必须装进调用方为它留出的空间,而代码不应该为了被理解而离开这台机器。
- 一个宽泛的查询不会导致代理的上下文被淹没
- 该索引存储在开发者自己的机器上,且不会将任何代码上传到任何地方
- 随着工作内容的变更,项目背景也会随之更新
我们的工作发生了什么变化
代理在审查或修改代码之前,可以先查看相关的项目背景信息。
整个仓库
评审从哪里开始
一次评审或重构从项目的结构开始:这次改动碰到了什么、谁在使用它、谁把它引了进来。打开的那个文件,不再是可以思考的边界。
预算花在工作上
推理用在哪里
答案按需裁剪,意味着可用上下文中用于打开最终无关文件的部分更少。收益在于那些永远不必阅读的内容。
不离开这台机器
我们为什么敢把它对准客户代码
该索引保存在开发者自己的机器上,没有任何代码被上传到任何地方。