跳到主要内容
代码理解引擎

让我们的智能体看见整个代码仓库的引擎

我们的代码智能引擎能在代理接触代码库之前,就让它们了解整个代码库的结构,并在它们可承受的预算范围内,为其提供一项变更所需的上下文。

  • 行业开发者工具
  • 合作方式内部引擎,为我们自己的智能体而建
  • 状态在自有工作中使用,并持续扩展
  • 代码理解
  • 代码搜索
  • 智能体基础设施
  • 开发者工具

先服务我们自己的智能体

这是我们自研的工具:它是我们工具链中负责在代理操作任何内容之前,决定其能够查看哪些内容的部分。它为代理提供项目上下文,使其在修改代码之前能够检查相关的定义和引用。

塑造一切的约束条件是推理预算。一个篇幅过大、难以阅读的答案,不如一个篇幅较小、恰好合适的答案好,因此每个答案的大小都根据代理能够利用的范围来调整。关键在于为实际工作预留预算。

挑战

问题出在我们自己身上

处理大型代码库的代理在进行修改前,需要了解相关的项目背景。

打开的文件不等于代码库

被要求改一个函数的智能体,能看到这个函数和它所在的文件。谁调用了它、它又调用了什么、项目的哪些部分会因为这次改动而受影响,全都在画面之外。改动是孤立地想出来的,也是同样孤立地被评审的。

为了找一处而读完整个项目

没有地图,找到正确位置就意味着不断打开文件再丢掉。每个被丢掉的文件,代价都已经从真正工作所需的同一份预算里付掉了;在大仓库里,这份代价在任何有用的思考开始之前就发生了。

在大型代码库中查找正确的代码

当代理不知道相关代码的名称或位置时,就很难找到它,而每次错误的猜测都会从该任务所需的预算中扣除。

解决方案

该平台的功能

代理会收到变更所需的项目背景信息,其范围会根据其实际需求进行调整。

打开文件前项目的形态

代理程序首先基于“何处声明了什么”这一前提,因此会根据变更所处项目的上下文来推断该变更。

  • 声明会在我们所支持的所有语言中进行索引
  • 代理可以查看其尚未读取的文件的结构
  • 无论代码库规模多大,项目地图始终清晰易读

按名称或描述查找

代理可以通过标识符或所需代码的描述进行搜索,并检查搜索结果。

  • 按精确标识符搜索
  • 根据代码功能的描述进行搜索
  • 向代理展示的结果,供其评估

一项变更会触及什么

除了定义之外,引擎还知道名称的使用位置,以及哪些文件依赖于哪些名称。这使得查找操作变成了对后果的考量。

  • 关于“这取决于什么”的答案,请参见其定义处旁边的说明
  • 文件加载了什么内容,以及是什么加载了该文件
  • 最近发生了什么变化,答案随之揭晓

答案有上限,且任何客户代码均不会离开机器

交付这一侧由两条规则塑造:回答必须装进调用方为它留出的空间,而代码不应该为了被理解而离开这台机器。

  • 一个宽泛的查询不会导致代理的上下文被淹没
  • 该索引存储在开发者自己的机器上,且不会将任何代码上传到任何地方
  • 随着工作内容的变更,项目背景也会随之更新
成效

我们的工作发生了什么变化

代理在审查或修改代码之前,可以先查看相关的项目背景信息。

整个仓库

评审从哪里开始

一次评审或重构从项目的结构开始:这次改动碰到了什么、谁在使用它、谁把它引了进来。打开的那个文件,不再是可以思考的边界。

预算花在工作上

推理用在哪里

答案按需裁剪,意味着可用上下文中用于打开最终无关文件的部分更少。收益在于那些永远不必阅读的内容。

不离开这台机器

我们为什么敢把它对准客户代码

该索引保存在开发者自己的机器上,没有任何代码被上传到任何地方。

最后审阅:

你的工具能看到整个代码库,还是只能看到当前打开的文件?

请告诉我们,贵团队目前是如何处理大型代码库的,以及在哪些情况下会遇到困难。我们将告诉您哪些环节值得自动化,哪些则不值得。

聊聊你的项目