我已经依赖 ChatGPT 和 GitHub Copilot了,但老是得在Copilot的聊天窗口和打开的代码文件之间复制粘贴还是有点让人厌烦了。我也尝试了 Cursor,虽然解决了第一个问题,但还是要一个个打开文件将它们添加到 AI 的上下文中。
于是就有了batchai
这么个工具: github.com/qiangyt/bat…
出发点很简单: 无需再复制粘贴,因为它会遍历指定的目录和文件,而且只在 Git 仓库目录中运行,所以程序员自己需要核对所有 batchai
做出的更改(因为 AI 也常常犯错)。
目前,batchai
只支持代码审查和修复常见问题(可以看作是本地的 AI 驱动 的SonarQube)。已经在做的下一个功能是批量生成单元测试代码,打算用在自己的几个个人项目上(包括这个batchai
),因为它们几乎没什么单元测试。其它计划的功能包括代码解释和注释生成、重构 —— 所有这些都将被批量处理。还有就是,尝试让batchai
能对项目代码有整体的视角,譬如建立跨文件的代码符号索引,这应该有助于AI工作得更好。
下面是过去两周里我在自己的一些项目测试使用batchai
后的一些有趣的发现:
- AI常常能发现那些传统工具(譬如SonarQube)会遗漏的问题。
- AI不会一次性报告所有问题,因此我需要多次运行它。
- 由于 LLM 训练数据的过时和幻觉问题,程序员自己核对更改的准确性必不可少- 这就是为什么我让
batchai
只在干净的 Git 仓库目录中工作。
我找了spring-petclinic(克隆自https://github.com/spring-projects/spring-petclinic)这个Java项目来演示。
下面是一些正确的例子:
以及一个错误的例子:
更多细节:
功能
- 代码审查 : 在控制台输出审查报告并保存下来,然后直接修复代码。
- 自定义提示词。
- 文件忽略 : 指定忽略的文件,支持
.gitignore
和额外的.batchai_ignore
文件。 - 指定额外的目标路径: 允许指定 Git 仓库中的部分目录和文件。
- 使用 Go 实现: 生成一个可在 Mac OSX、Linux 和 Windows 上运行的单一可执行文件。
- diff显示 : 在控制台中显示彩色差异。
- LLM 支持 : 支持与 OpenAI 兼容的 LLM,包括 Ollama。
- I18N : 支持国际化注释/解释生成。
计划的功能
- 解释、注释生成、测试生成、重构。
- 拒绝更改跟踪 : 跟踪被拒绝的更改以避免重复修改。
- 语言特定提示词 : 针对不同编程语言的不同提示词。
- LLM 使用指标 : 实现 LLM 使用跟踪的指标。
开始使用
-
从这里下载最新的可执行二进制文件并将其添加到您的 $PATH 中。对于 Linux 和 Mac OSX,请记得运行
chmod +x ...
使下载的二进制文件可执行。 -
克隆演示项目。以下步骤假设克隆的项目目录为
/data/spring-petclinic
cd /data git clone https://github.com/spring-projects/spring-petclinic cd spring-petclinic
在此目录中,创建一个.env文件。在.env文件中设置OPENAI_API_KEY。以下是一个示例:
# OpenAI OPENAI_API_KEY=change-it #OPENAI_PROXY_URL= 对于国内用户,需要在这里设置代理的URL和用户名密码等等 #OPENAI_PROXY_USER= #OPENAI_PROXY_PASS= #BATCHAI_REVIEW_MODEL=openai/gpt-4o-mini # Ali TONGYI qwen #QWEN_API_KEY=change-it #BATCHAI_REVIEW_MODEL=tongyi/qwen2.5-coder-7b-instruct # local Ollama #OLLAMA_BASE_URL=http://localhost:11434/v1/ #BATCHAI_REVIEW_MODEL=ollama/qwen2.5-coder:7b-instruct-fp16
对于 Ollama,您可以参考我的示例docker-compose.yml
-
CLI 示例:
- 将审核问题报告输出到控制台(也会保存到
build/batchai
):
cd /data/spring-petclinic batchai review . src/main/java/org/springframework/samples/petclinic/vet/Vets.java
- 通过
--fix
选项直接修复目标文件:
cd /data/spring-petclinic batchai review --fix . src/main/java/org/springframework/samples/petclinic/vet/Vets.java
- 仅对 src/main/java 运行
batchai
:
cd /data/spring-petclinic batchai review . src/main/java/
- 在整个项目中运行
batchai
:
cd /data/spring-petclinic batchai review .
- 将审核问题报告输出到控制台(也会保存到
CLI 使用
-
查看全局帮助菜单和可用命令,请运行:
batchai -h
NAME: batchai - 用 AI 批量处理项目代码 USAGE: batchai [global options] command [command options] <repository directory> [target files/directories in the repository] VERSION: 0.1.0 (5eeb081) COMMANDS: review 将问题报告到控制台,也保存到 'build/batchai' list 列出要处理的文件 explain (TODO) 解释代码,输出结果到控制台或作为注释 comment (TODO) 对代码进行注释 refactor (TODO) 重构代码 help, h 显示命令列表或某个命令的帮助 GLOBAL OPTIONS: --enable-symbol-reference 启用符号收集以检查整个项目中的代码引用(默认:false) --lang value, -l value 生成文本的语言(默认:en_US.UTF-8)[$LANG] --help, -h print the version --version, -v 打印版本
-
要查看
review
命令的详细帮助,请运行:batchai review -h
NAME: batchai review - 将问题报告到控制台,也保存到 'build/batchai' USAGE: batchai review [command options] OPTIONS: --fix, -f 替换目标文件(默认:false) --force 忽略缓存(默认:false) --help, -h show help
支持的 LLMs
已测试和支持的模型:
-
OpenAI 系列:
-
openai/gpt-4o
-
openai/gpt-4o-mini
其他OpenAI模型也应该可以正常工作。
-
-
阿里通义千问系列:
qwen2.5-coder-7b-instruct
(也可通过 Ollama 使用)
其他通义千问模型也应该可以正常工作。
要添加更多 LLM,只需按照res/static/batchai.yaml中的配置进行操作,只要该 LLM 提供与 OpenAI 兼容的 API 即可。
配置
-
可选配置文件:
可以创建1个
${HOME}/batchai/batchai.yaml
。完整示例请参考res/static/batchai.yaml -
环境文件:
你也可以通过目标 Git 仓库目录中的
.env
文件来配置batchai
。有关所有可用环境变量的参考,请查看 res/static/batchai.yaml 和它们的默认值res/static/batchai.env -
忽略特定文件
batchai
依据.gitignore
文件里的规则忽略指定的目录和文件。通常这已经足够,但如果还有额外的不能被git忽略但不必由batchai
处理的,可以使用.batchai_ignore
指定,规则写法和.gitignore
相同。 -
自定义提示词 请查看 res/static/batchai.yaml里的
BATCHAI_REVIEW_RULE_*
和MY_REVIEW_RULE_*