我让 AI Agent 帮我做了一个"戒断 AI"的编程训练工具。是的,这件事本身就够讽刺的。
一个尴尬的现实
先说个大背景:现在这行大家都很忙。项目排期一个接一个,日常开发几乎全靠 AI 辅助来赶进度,根本没时间手搓代码。更现实的是,AI 的普及让管理层对效率的预期也水涨船高——你要是还在那一行行手写,领导第一反应不是"你很扎实",而是"你怎么这么慢"。
整个行业都在逼你用 AI,但没人关心你用着用着,自己的底层能力在悄悄退化。
我是一名大模型算法工程师,日常工作跟 LLM 打交道。Cursor、Copilot、Claude Code 这些 AI 编程工具我用得比谁都溜。
但最近我发现一个让我不安的事情:当我关掉所有 AI 辅助,面对一个中等难度的 bug,我需要比以前更长的时间才能定位问题。
Tab 键已经形成了肌肉记忆。写代码时下意识就等补全。遇到报错第一反应是丢给 AI 而不是自己读 traceback。
我相信这不只是我一个人的问题。
前段时间看到一个帖子说得好:"AI 编程助手是类固醇。短期增肌,长期萎缩。" 虽然有点极端,但确实点到了痛处 —— 如果你从来不在没有 AI 的情况下编程,你怎么知道自己的真实水平?
所以我做了 CodeForge
CodeForge 是一个 CLI 工具,核心理念很简单:
用真实开源项目的已解决 bug 来做编程训练。
不是 LeetCode 那种算法题,不是人造的编程练习。而是从 Flask、FastAPI、Scrapy、httpx、requests、thefuck 这些你可能天天在用的项目里,抓取真实的、已经被修复的 bug,让你在完全没有 AI 辅助的情况下尝试修复,然后对比真实的修复方案。
为什么用真实 bug?
算法题训练的是"解题能力",但工程师日常面对的是"在几万行代码里找到那个不对的地方,然后用最小改动修好它"。这是完全不同的能力:
- 阅读理解能力:快速理解陌生代码库的结构和逻辑
- bug 定位能力:从症状出发,逐步缩小范围
- 最小修改原则:不是重写,而是精准手术
- 边界情况思维:真实 bug 往往藏在边界条件里
这些能力,正是 AI 编程助手最容易让你退化的部分。
工作流程
# 1. 获取一个挑战
forge challenge --difficulty easy
# 2. 开始(自动 clone 仓库,checkout 到 bug 存在的 commit)
forge start --id httpx-url-quoting
# 3. 先写思考日志(强制你在动手前想清楚)
forge think
# 4. 在代码里找 bug,修复它
# (在 ~/.codeforge/workspaces/<id>/repo/ 目录下)
# 5. 提交方案
forge submit
# 6. 对比真实修复方案
forge compare
# 7. AI 评判你的方案(支持 Claude/GPT/DeepSeek,也可以手动)
forge review
关键设计:
forge think 是必须的。 提交前必须写思考日志。这一步强迫你在动手之前先理清思路——这恰恰是依赖 AI 后最先丢失的习惯。
forge compare 才是真正的学习环节。 你的方案和真实开发者的方案放在一起对比,差距一目了然。很多时候你会发现:真实修复就改了 3 行,而你改了 30 行。或者反过来,你的方案其实更优雅。
forge hint 有代价。 可以拿提示,但每个提示扣 0.5 分。
当前题库
18 道题,来自 6 个知名 Python 开源项目:
| 项目 | 数量 | 示例 |
|---|---|---|
| Scrapy | 8 | gzip 响应检测函数无法识别带参 Content-Type、LocalCache 无容量限制时崩溃 |
| FastAPI | 4 | HTTPBearer optional 模式异常、jsonable_encoder 丢弃 custom_encoder |
| thefuck | 3 | — |
| Flask | 1 | send_file 类型注解兼容性 |
| httpx | 1 | query parameter percent-encoding |
| requests | 1 | TLS 连接池复用导致验证绕过 |
难度分布:12 道 easy + 6 道 medium。
所有题目都来自 BugsInPy 数据集 —— 501 个真实 Python bug 的学术数据集,每个 bug 都有精确的 commit 定位和测试用例。
技术栈
很精简:
- Python CLI:Typer + Rich(美观的终端 UI)
- Git 操作:自动 clone、checkout 到指定 commit
- AI 评判:支持 Anthropic / OpenAI / OpenRouter API
- 零依赖模式:没有 API key 也能用,
forge review --export导出文本,手动粘贴给任意 AI
安装和使用
git clone https://github.com/EricZane0102/codeforge.git
cd codeforge
pip install -e .
forge init
forge challenge --difficulty easy
就这么简单。
最后
我不是在说"别用 AI 写代码"。我自己天天用,而且会继续用。
我想说的是:定期在没有 AI 辅助的情况下写代码,就像运动员定期做基础体能训练一样,是保持能力的必要投入。
CodeForge 就是为这个目的设计的。每周花 1-2 小时,挑两个 bug 修一修,保持手感。
GitHub: github.com/EricZane010…
Star 一下?题库会持续扩充(BugsInPy 还有 483 个 bug 没用上呢)。
也欢迎 PR 提交新的挑战题目,YAML 格式,门槛很低。