题图使用 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 可以在我睡觉的时候自动检查所有的代码库,给出修复建议、丰富文档、编写测试用例。这将会是一个非常有用的初级实习生助手。
虽然我之前简单实现过代码库展开这个需求,不过没有 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 给我们的一个纯文本形式的内容,并没有真正呈现为一个个的代码文件。
下一步我们需要的就是把 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.