技术深度解析
Crespo的核心创新看似简单:在将代码传递给LLM之前,先将其预处理为结构化表示。其流程包括三个阶段:解析、序列化和注入。
使用Tree-sitter进行解析: Crespo利用Tree-sitter,这是一个解析器生成工具,能够生成具体语法树(CST),并可轻松转换为AST。与传统的解析器不同,Tree-sitter是增量的且容错的——它可以解析不完整或语法不正确的代码,这在实时编辑场景中很常见。对于每种支持的语言(目前包括Python、JavaScript、TypeScript、Rust、Go和Java),Crespo使用特定于语言的语法来构建完整的AST。AST捕获诸如`FunctionDefinition`、`VariableDeclaration`、`ForStatement`等节点及其关系(父子、兄弟)。
序列化为线性格式: AST并非直接喂给LLM。相反,Crespo将其序列化为一种紧凑、token高效的格式。默认的序列化使用类似于S表达式的括号表示法,例如:`(function_definition name:"foo" body:(block (return_statement value:(identifier "x"))))`。这种格式保留了层次结构,同时又能被LLM的tokenizer解析。关键的设计选择是最小化token数量:典型的AST序列化比等效的原始代码少使用30-50%的token,因为空白、注释和冗余语法都被剥离了。
注入到提示中: 序列化的AST被前置或与用户的查询交错。例如,一个用于重构的提示可能看起来像这样:`[AST: (module (function_definition name:"old_func" ...))] 将old_func重构为使用async/await。` 因此,LLM同时获得了结构蓝图和语义任务。早期实验表明,当AST作为前缀而不是在单独的轮次中提供时,GPT-4和Claude 3.5等模型的表现显著更好。
性能基准测试: AINews从Crespo团队的内部测试中获得了初步的基准数据。该工具在两个标准编码基准上进行了评估:HumanEval(函数合成)和MBPP(从文档字符串合成程序)。使用的指标是pass@1(首次尝试正确解决问题的百分比)。
| 模型 | 基线(原始代码) | Crespo(AST) | 提升幅度 |
|---|---|---|---|
| GPT-4o | 87.2% | 91.5% | +4.3% |
| Claude 3.5 Sonnet | 84.6% | 89.1% | +4.5% |
| Gemini 1.5 Pro | 82.3% | 86.7% | +4.4% |
| CodeLlama-34B | 68.9% | 74.2% | +5.3% |
数据要点: 各模型的提升幅度保持一致,像CodeLlama这样的开源模型受益稍多(5.3%对比专有模型的约4.4%)。这表明,那些从原始文本推断结构能力较弱的小型模型,从显式的结构提示中获得了不成比例的收益。
GitHub仓库: Crespo项目托管在GitHub上,仓库名为`crespo-ai/crespo`。截至本文撰写时,它已累计获得超过4,200颗星和350个分支。该仓库包含一个基于Python的CLI工具、特定于语言的语法文件以及流行LLM API的集成示例。社区已经贡献了对其他语言(C++、Ruby)和自定义序列化格式的支持。
关键参与者与案例研究
Crespo是一个来自剑桥大学的小型研究团队和独立贡献者的智慧结晶。首席开发者Dr. Anya Sharma此前在微软研究院从事程序合成工作。该项目尚未获得大型企业的支持,但已引起多家AI编码初创公司的关注。
竞争方法: Crespo并非唯一试图改进代码理解能力的工具。还有其他几种方法,各有不同的权衡。
| 工具/方法 | 方式 | 优势 | 劣势 |
|---|---|---|---|
| Crespo | 预处理AST | Token高效、模型无关、减少语法错误 | 每种语言需要解析器,增加延迟(约50ms) |
| Codex / Copilot | 在代码上微调 | 深度代码知识,处理多种语言 | 黑盒,微调成本高,仍将代码视为文本 |
| 仓库级上下文(如Sweep) | 检索增强生成(RAG) | 处理大型代码库,跨文件感知 | 高延迟,上下文窗口限制,检索错误 |
| 思维图谱(如CodeGraph) | 构建依赖图 | 非常适合重构,可追溯性 | 设置复杂,尚未准备好投入生产 |
数据要点: Crespo占据了一个独特的利基:它轻量级、模型无关,并直接解决了LLM的结构盲点。它补充而非竞争于基于RAG的方法,并且可以与它们结合以获得更好的结果。
案例研究:重构Django单体应用
一家中型SaaS公司(名称隐去)使用Crespo协助将遗留的Django单体应用重构为微服务。该任务涉及提取15个模型及其关联的