我用 AI 写了一个给 AI 用的 Python 库

168 阅读9分钟

image.png

题图使用 recraft.ai 生成,提示词由 AI 阅读本文后生成。

简单概括:我用 AI 把 TypeScript 模块 repomix 整体重写为 Python 版本 python-repomix,这个任务中 AI 干了 85% 的代码编写工作。python-repomix 可以把一个代码库项目整体分析导出为一个单一的、对 AI 友好的文本格式内容,方便 AI 理解代码库。python-repomix 可以将代码项目整体导出为纯文本、Markdown、XML 格式。

今天在看 reddit/r/LocalLLaMA 的时候看到有人提到了在使用 repomix 来帮助 AI 快速理解一个代码项目,感觉正好符合我最近的需求,打算研究一下结合到我自己的项目里。结果看到这个项目 github.com/yamadashy/r… 是一个 TypeScript 项目,没法直接集成到我的 Python 项目中。粗略浏览了一下感觉代码量不算很大,可以考虑让 AI 直接重写为 Python 版本。

python-repomix 代码: github.com/AndersonBY/…

repomix 库

先简单介绍一下这个库的功能,你可以给定一个本地的代码库或者远程的 git 链接,repomix 会将代码库进行简单的分析,并将文件内容合并为一个完整的单一文本,例如下面的示例:

纯文本格式

This file is a merged representation of the entire codebase, combining all repository files into a single document.

================================================================
File Summary
================================================================
(Metadata and usage AI instructions)

================================================================
Repository Structure
================================================================
src/
  cli/
    cliOutput.py
    index.py
  config/
    configLoader.py

(...remaining directories)

================================================================
Repository Files
================================================================

================
File: src/index.py
================
# File contents here

================
File: src/utils.py
================
# File contents here

(...remaining files)

================================================================
Statistics
================================================================
(File statistics and metadata)

Markdown 格式

# File Summary
(Metadata and usage AI instructions)

# Repository Structure
```
src/
  cli/
    cliOutput.py
    index.py
```

# Repository Files

## File: src/index.py
```python
# File contents here
```

## File: src/utils.py
```python
# File contents here
```

# Statistics
- Total Files: 19
- Total Characters: 37377
- Total Tokens: 11195

XML 格式

<?xml version="1.0" encoding="UTF-8"?>
<repository>
<repository_structure>
(Directory and file structure)
</repository_structure>

<repository_files>
<file>
  <path>src/index.py</path>
  <stats>
    <chars>1234</chars>
    <tokens>567</tokens>
  </stats>
  <content>
    # File contents here
  </content>
</file>
(...remaining files)
</repository_files>

<statistics>
  <total_files>19</total_files>
  <total_chars>37377</total_chars>
  <total_tokens>11195</total_tokens>
</statistics>
</repository>

这样你就可以把整个代码库的内容输入给 AI 然后提出需求如编写文档、修复代码问题、新增功能、编写测试用例等。对于我来说,我非常希望 Agent 可以在我睡觉的时候自动检查所有的代码库,给出修复建议、丰富文档、编写测试用例。这将会是一个非常有用的初级实习生助手。

image.png

虽然我之前简单实现过代码库展开这个需求,不过没有 repomix 的功能丰富。repomix 还包含了简单的安全性检测,多种样式输出,基本可以用在生产上。

如何让 AI 把 TypeScript 改写为 Python

这事有点递归的感觉,我先用 repomix 模块把 repomix 的代码库展开为一个文档,然后直接跟 gemini-exp-1206 说我需要把 repomix 这个项目改写为 Python。

选择 gemini-exp-1206 的原因很简单,目前 gemini-exp-1206 在 Google AI Studio 上是免费使用且上下文长度有 2M,足够使用。但是有每日次数限制且不稳定,暂时不建议生产环境批量使用。

通过几轮对话基本上就完成了 python-repomix 的大部分代码。注意,此时我们拿到的还只是 AI 给我们的一个纯文本形式的内容,并没有真正呈现为一个个的代码文件。

image.png

下一步我们需要的就是把 AI 给出的全部内容放入 Cursor 或 Windsurf 里,告诉 Agent 把这段内容里的代码都写入到实际的文件中。这一步我用的是 Windsurf,如下图对话。Windsurf 里的 Agent 会自己分析该写哪一个文件,然后向你询问接下来实现哪个模块。

通过 Windsurf 我们基本上就把 gemini-exp-1206 给出的代码都写入到本地文件里了,基本上到这里我们 80% 的任务就已经完成了。接下来的工作是要精调代码,让项目整体能跑通。

插一句,Windsurf 作为后起之秀其 Agent 能力目前比 Cursor 要强,个人感觉是工程实现上的问题,因为底层的模型都是 claude-3.5-sonnet,模型能力上没区别。Cursor 目前的定价很可能 ROI 算不过来,导致官方似乎有一些未公开的限制措施,使用体验较之前稍微有所下降。

精调代码这一步就需要用户本身对代码的编写有了解,否则目前 AI 生成的代码很容易在一些小细节上出问题导致整体跑不通。如果没有代码经验的话在这一步会折腾比较久,有经验的开发者可以比较快定位到细节问题,修改几次就可以搞定。

所以总的来说微型代码项目让 AI 一次成型的成功率比较高,但是代码量一旦上来或者架构层级稍微多一些,目前的 AI 一次成型的成功率就会显著下降,必须人工介入干预,否则 AI 自己容易陷入死循环出不来,改来改去最后把整个项目改得一团糟。目前大部分 AI 的能力水平属于一个初级的开发实习生,代码风格还不错,但是改错和调试能力不够,当然这样的水平已经足够节约开发者的大量时间了。

这次这个 TS repomix -> Python repomix 项目,全程下来也就不到两个小时,要是让我自己从头改写估计怎么地也要大半天时间了。

python-repomix README

最后贴一个 python-repomix 的介绍。

📦 Repomix (Python 版本)

English | 简体中文

Repomix 是一个强大的工具,可以将您的整个存储库打包成一个单一的、对 AI 友好的文件。当您需要将代码库提供给大型语言模型(LLM)或其他 AI 工具(如 Claude、ChatGPT 和 Gemini)时,它是理想的选择。

原版 Repomix 是用 JavaScript 编写的,这个是移植的 Python 版本。

🌟 功能

  • AI 优化: 以一种易于 AI 理解和处理的方式格式化您的代码库
  • Token 计数: 使用 tiktoken 提供每个文件和整个存储库的 token 计数
  • 简单易用: 只需一个命令即可打包您的整个存储库
  • 可定制: 轻松配置要包含或排除的内容
  • Git 感知: 自动遵守您的 .gitignore 文件
  • 安全至上: 内置安全检查,以检测和防止包含敏感信息

🚀 快速开始

你可以使用 pip 安装 Repomix:

pip install repomix

然后在任何项目目录下运行:

python -m repomix

就这样!Repomix 将在您当前目录下生成一个 repomix-output.md 文件,其中包含您整个仓库的 AI 友好格式。

📊 用法

分析您的整个仓库:

python -m repomix

要打包一个特定的目录:

python -m repomix path/to/directory

要打包一个远程仓库:

python -m repomix --remote https://github.com/username/repo

要初始化一个新的配置文件:

python -m repomix --init

一旦你生成了打包文件,你就可以将其与 Claude、ChatGPT 和 Gemini 等生成式 AI 工具一起使用。

提示示例

一旦你使用 Repomix 生成了打包文件,你就可以将其与 Claude、ChatGPT 和 Gemini 等 AI 工具一起使用。以下是一些入门示例提示:

代码审查和重构

进行全面的代码审查和重构建议:

这个文件包含我所有的代码。请审查整体结构,并提出任何改进或重构的机会,重点关注可维护性和可扩展性。
文档生成

要生成项目文档:

基于此文件中的代码库,请生成一个详细的README.md,其中包括项目概述、主要功能、设置说明和使用示例。
测试用例生成

用于生成测试用例:

分析此文件中的代码,并为主要函数和类建议一组全面的单元测试。包括边缘情况和潜在的错误场景。
代码质量评估

评估代码质量和对最佳实践的遵循程度:

审查代码库,检查其是否符合编码最佳实践和行业标准。找出在可读性、可维护性和效率方面可以改进的地方。提出具体的修改建议,使代码与最佳实践保持一致。
库概述

获取库的高级理解

此文件包含库的整个代码库。请提供该库的全面概述,包括其主要目的、关键特性和整体架构。

随意根据您的具体需求和您正在使用的 AI 工具的功能修改这些提示。

输出文件格式

Repomix 生成一个单一文件,其中代码库的不同部分之间有清晰的分隔符。为了增强 AI 的理解能力,输出文件以面向 AI 的解释开始,使 AI 模型更容易理解打包存储库的上下文和结构。

纯文本格式 (默认)
This file is a merged representation of the entire codebase, combining all repository files into a single document.

================================================================
File Summary
================================================================
(元数据和使用 AI 指令)

================================================================
Repository Structure
================================================================
src/
  cli/
    cliOutput.py
    index.py
  config/
    configLoader.py

(...剩余目录)

================================================================
Repository Files
================================================================

================
File: src/index.py
================
# 文件内容在这里

================
File: src/utils.py
================
# 文件内容在这里

(...剩余文件)

================================================================
Statistics
================================================================
(文件统计和元数据)
XML格式

要生成XML格式的输出,请使用 --style xml 选项:

python -m repomix --style xml

XML格式以分层方式构建内容:

<?xml version="1.0" encoding="UTF-8"?>
<repository>
<repository_structure>
(目录和文件结构)
</repository_structure>

<repository_files>
<file>
  <path>src/index.py</path>
  <stats>
    <chars>1234</chars>
    <tokens>567</tokens>
  </stats>
  <content>
    # 这里是文件内容
  </content>
</file>
(...剩余文件)
</repository_files>

<statistics>
  <total_files>19</total_files>
  <total_chars>37377</total_chars>
  <total_tokens>11195</total_tokens>
</statistics>
</repository>
Markdown 格式

要生成 Markdown 格式的输出,请使用 --style markdown 选项:

python -m repomix --style markdown
# File Summary
(元数据和使用 AI 指令)

# Repository Structure

```
src/
  cli/
    cliOutput.py
    index.py
```

# Repository Files

## File: src/index.py
```python
# 文件内容在此
```

## File: src/utils.py
```python
# 文件内容在此
```

# 统计
- 文件总数: 19
- 字符总数: 37377
- 令牌总数: 11195

⚙️ 配置

在你的项目根目录创建一个 repomix.config.json 文件来进行自定义配置:

{
  "output": {
    "filePath": "repomix-output.md",
    "style": "markdown",
    "showLineNumbers": false,
    "copyToClipboard": false,
    "topFilesLength": 5
  },
  "include": ["**/*"],
  "ignore": {
    "useGitignore": true,
    "useDefaultPatterns": true,
    "customPatterns": []
  },
  "security": {
    "enableSecurityCheck": true
  }
}

输出格式

Repomix支持三种输出格式:

  • 纯文本 (默认)
  • Markdown
  • XML

要指定输出格式:

python -m repomix --style markdown

命令行选项

  • -v, --version: 显示版本
  • -o, --output [file]: 指定输出文件名
  • --style [style]: 指定输出样式 (plain, xml, markdown)
  • --remote [url]: 处理远程 Git 仓库
  • --init: 初始化配置文件
  • --no-security-check: 禁用安全检查
  • --verbose: 启用详细日志

🔍 安全检查

Repomix 包含内置的安全检查,以检测您文件中潜在的敏感信息。这有助于防止在共享代码库时意外暴露秘密。

您可以使用以下命令禁用安全检查:

python -m repomix --no-security-check

📜 许可证

本项目基于 MIT 许可证授权。

有关使用和配置选项的更多详细信息,请访问文档

题图的提示词:A collaborative scene featuring a stylized representation of an AI, resembling a friendly robot or a digital avatar similar to Gemini, alongside a human developer. The AI and developer are engaged in a dialogue, depicted through speech bubbles containing code snippets and technical terms. The background is a dynamic mix of code fragments and abstract shapes, representing the complexity of software development. The color palette is bright and optimistic, with a focus on blues and greens. The title 'python-repomix: AI-Powered Codebase Transformation' is displayed in a bold, eye-catching font.