使用 Gemini(以及一点 Python)实现代码删除的自动化

  • 背景:2025 年第一季度将 pigweed.dev 从 GN 迁移到 Bazel,保留旧的 GN 构建以防 Bazel 构建出现问题,现在 Bazel 构建运行良好,保留旧的 GN 文档构建减慢了贡献者的速度,需要关闭 GN 构建,只需从所有BUILD.gn文件中删除文档生成功能,可通过 Gemini 尝试自动化该过程。
  • 方法

    • 抓取仓库中的所有源文件,过滤出BUILD.gn文件,再过滤出使用 docgen 功能的BUILD.gn文件。
    • 对每个BUILD.gn文件使用 Gemini 去除 docgen 功能,每次调用一个 Gemini API。
  • 实现步骤

    1. 在仓库根目录创建并激活虚拟环境。
    2. 安装 Gemini Python 库。
    3. 保存脚本edit.py,包含收集路径、判断是否为 GN 构建文件、是否使用 docgen 等功能的函数。
    4. 保存指令prompt.md,包含背景、目标、示例等内容。
    5. 运行脚本python3 edit.py
  • 结果:235 个文件被修改,构建继续工作(除了一些小问题),修改记录在https://pwrev.dev/286672,总 Gemini API 成本在 30 - 40 美元,若更小心则成本在 10 - 20 美元,脚本运行耗时 20 分钟,设置工作耗时约一天,审查 235 个修改文件耗时 30 - 40 分钟。
  • 准确性

    • 非常好地只删除指定代码,仅出现一次生成错误(遗漏引号)。
    • 在一些文件中超出指令删除pw_size_diff代码(团队决定后后续添加到查找列表),在一个文件中添加了两个多余的依赖项,在其他情况下又过于严格地遵循指令(留下空的无用if块)。
    • 很多文件末尾的换行符被弄乱,由于有pw format工具所以不是大问题。
阅读 13
0 条评论