Benchmark · coding
Aider Polyglot
Aider Polyglot 是来自 Aider 编程工具的代码编辑基准,用于测试 LLM 在多种编程语言中编辑现有代码的能力。得分是编辑后能产生正确代码并通过该任务测试的任务所占的百分比。
了解更多
- 示例
- 一个典型题目是采用 Exercism 风格的编程练习,使用 Python、Rust、Go、Java、JavaScript 或 C++ 等多种语言之一,模型需要编辑所提供的源文件,实现所要求的函数,使其测试通过。
- 评分方式
- 指标是解决任务的百分比:只有当编辑后的代码通过该任务的全部自动化测试时,该任务才算完成。Aider 还会跟踪编辑以正确、可应用格式返回的频率。
- 验证方式
- 结果由自动方式判定:编辑后的文件针对每个练习的单元测试套件运行,只有全部测试通过,该任务才算通过——没有人工投票,也没有精确匹配比较。
- 为何重要
- 它反映了真实的开发者工作流程——在多种语言中编辑现有文件,而不是从零编写片段——因此能切实反映一个模型作为编程助手有多大用处。
示例解析
Aider Polyglot 从 Exercism 中选取了 225 道最难的编程练习,覆盖 C++、Go、Java、JavaScript、Python 和 Rust 六种语言;模型会收到题目说明和一个桩文件,必须返回一处编辑(采用 aider 的 SEARCH/REPLACE 块格式),使隐藏的单元测试通过,如果第一次尝试失败,还有一次自动重试。一道有代表性的 Python 题目「Acronym」要求把一个短语转换成首字母缩写:取每个单词的首字母并大写,把空格和连字符当作分隔符,忽略其他标点——给定包含 `def abbreviate(text): pass` 的 `acronym.py`,要让 `abbreviate("Portable Network Graphics") == "PNG"` 和 `abbreviate("Ruby on Rails") == "ROR"` 这样的测试通过。正确的解法用一个 SEARCH/REPLACE 块替换桩代码:
```
acronym.py
<<<<<<< SEARCH
def abbreviate(text):
pass
=======
import re
def abbreviate(text):
words = re.split(r"[^A-Za-z']+", text)
return "".join(word[0].upper() for word in words if word)
>>>>>>> REPLACE
```
推理过程:按任意一段非字母字符切分文本,使空格和连字符都成为单词边界,丢弃空片段,再把每个剩余单词大写后的首字母拼接起来——对「Ruby on Rails」就得到「ROR」。只有当全部单元测试都通过时,这道题才算解出,而该基准最终报告的是以这种方式解出的 225 道题的百分比。
该 benchmark 暂无已验证的得分。