Sweep AI概述
Sweep AI的目标是取代码初级程序员(Junior Developer),可以根据需求或bug描述,自动从GitHub上拉取工程源码,将需求或bug描述自动转换为相应的代码改动,从而实现需求开发或bug修复,当然都是些简单的需求和bug,因这个工具的核心能力依赖ChatGPT-4,所以并没有试用体验其效果,网上对它的风评还可以,而且Sweep AI的代码切割策略,被LlamaIndex收录为公共API。
Sweep AI扫描工程中所有的源文件,对于每个源文件,Sweep AI基于抽象语法树(AST),并设置一个代码段的最大长度max_chunk_size(默认值1536个字节),并以max_chunk_size为依据去拆分代码段。Sweep AI从AST的根节点开始,遍历整个语法树,遍历的同时,顺便将源文件拆分为不超过max_chunk_size的代码段。
之后,Sweep AI将所有的代码段,依次调用Embedding模型,映射为语义向量,并将代码段、语义向量保存为向量数据库的一条记录,这个过程也就是构建RAG知识库。
在推理阶段,Sweep AI将query与向量数据库进行相似度匹配,召回关联度最高的前K个代码段(Chunk)。
图1为SweepAI开源项目首页。

图1 SweepAI开源项目首页
SweepAI项目地址:
https://github.com/sweepai/sweep/tree/b267b613d4c706eaf959fe6789f11e9a856521d1
一、SweepAI代码切分逻辑
以下代码是SweepAI切分代码的核心逻辑,从AST的根节点出发,深度优先遍历整棵语法树。遍历每个AST节点的逻辑如下 :
1) 如果当前节点的内容长度就已经超过max_chunk_size,则递归调用当前函数,切分当前AST节点;
2) 如果当前节点的内容长度+current_chunk的长度,大于max_chunk_size,则将current_chunk作为新chunk输出保存,并使current_chunk指向当前AST节点;
3) 如前2个条件均不满足,则将当前节点的内容合并到current_chunk。

二、SweepAI的问题
SweepAI代码切割逻辑,需要人为设定一个代码段最大长度,这个值不同的项目,合理取值可能各不一样,如果设置不当,很容易使最终Prompt超过大模型的最大token数限制。

浙公网安备 33010602011771号