最近尝试使用Claude Code进行了约20个小时的vibe code。最终获得了两个半成品的项目,一个是DNS服务器,一个是浏览器起始页。总共花费了约600000的Tokens,约500刀的额度。

我用AI实现了一个自动分类的DNS服务器,有关这个项目的详细功能可以查看这篇文章。 使用Go语言编写,GoLand实时观测实现进度,ArchLinux作为开发环境,总共花费时间大约在12小时,这12个小时中,大部分时间都在等待AI回复,实际用在测试和需求设计上的时间大约在2-3小时,我没有让AI进行测试,所有的测试都是我自己完成。实际完成度约90%(如果不算后续新想法额外增加的功能)。
另一个项目是浏览器起始页,实现了一个简单的网页,主要用来管理书签,增加了工作区功能,实现重点在界面样式,需要向AI准确说出想要的界面交互逻辑,并不容易,这部分大约花费了6-8小时,其余时间用在调试Forgejo工作流中,也就是项目部署阶段。实际完成度约80%。

这两个项目使用的都是我不熟悉的语言,后端比较熟悉使用Java语言和Spring框架,前端熟悉Vue,使用自己不熟悉的语言原因是,这些语言我看腻了也比较熟悉了,我怕忍不住自己上手写代码了。
DNS服务器项目
开发流程
在DNS服务器的项目中,按照以下步骤开发
- 有一个想法,最初的DNS服务器设想,直接写服务最终运行需要使用的配置文件
config.yml - 根据配置文件写
README.md解释配置文件中每个配置项的作用,后续README将作为项目的设计文档使用 - 找AI优化README文档,结合自己的新想法和未考虑到的内容,更新设计文档、配置文件
- 告诉ClaudeCode,根据设计文档实现整个项目
- 手动Build并启动项目,让AI解决Build时期的错误,程序运行起来了
- 开始进行测试、修改、测试、修改,直到完成
问题
问题一:没有告诉AI验证代码是否可用的逻辑,AI写了一部分代码之后直接就停止了,然而此时的代码中还存在着编译错误,于是我告诉AI每次完成之后都需要执行 build 但不要执行测试,后面才知道,由于这句话没有写入到 CLAUDE.md 导致AI老是忘记这计划,自己开始测试,然后测试中一直启动着程序导致端口被占用排查了好一会。
问题二:AI在偷懒,代码中留了好几个简化实现,测试期间发现少逻辑又得去找AI补充这部分逻辑,此时我已经发现两个简化实现了,我告诉AI不能简化实现,必须立即实现设计的功能,然而AI并没有全部实现,导致后面还在补充本来早应该实现的功能。


问题三:开发规范问题,在前期开发设计时明确指出了,需要统一日志的输出,然而实际情况是,一部分日志是fmt输出的,一部分是logger输出的,在后期我不得不用好几次的对话让AI将所有的fmt输出改为统一的logger输出
书签管理项目
有了上一次的经验,不敢让AI一次性实现整个项目了。AI生成的UI太相似了,以至于现在打眼一看就知道一个前端UI界面是不是AI写的,为了保持样式统一,这次明确说明了使用UI库。
开发流程
- 有一个想法,写了大于500字的核心功能描述,并确认需要使用的开发语言和框架Nextjs+Postgres
- 找AI先根据核心功能生成详细设计文档,并不断确认和优化文档,最终生成了约1000行的README作为设计文档,里面几乎将所有需要的功能都写到了。之后我在文档最后面补充了数据库连接信息,以及最重要的原则
### 代码规范
- 只写必要的注释,注释需要精简,使用中文
- 每次完成一步之后,都需要保证运行、编译成功、并提交代码
- 需要保证设计文档README.md和代码保持一致,需要同步更新- 创建文件夹,写入README.md文件,使用
/init让Claude初始化项目 - 让Claude补充详细设计文档,在文档最后添加详细的实现步骤,共分为几个阶段实现,每个阶段需要实现什么内容,并补充重要原则
## 17. AI 编码 Checklist
> ⚠️ **重要规则:每完成一项任务后,必须:**
> 1. 运行 `npm run build` 确保编译通过
> 2. 立即 `git commit` 提交代码
> 3. 提交信息格式:`feat: 完成 xxx` 或 `fix: 修复 xxx`
>
> 这确保代码库始终可运行,后续 AI 接手时有清晰起点。- 告诉根据README设计文档,实现阶段一的步骤123,并最终完成所有功能
问题
问题一:AI不使用UI库提供的组件,反而一直在使用alert这种来给页面弹提示消息,我是用shadcn UI,UI库里包含了消息提示的组件。
问题二:简化理解我的需求,每次需要修改的时候,我都会使用序号分点详细描述我想要实现的效果,大约300-500字左右,然而AI接受到之后,我一行100字左右的功能需求描述没压缩到了10个字左右,导致此次对话实现的功能和需求不符,导致了反复修改。
总结
我感觉可能会有用的一些建议
- 事实证明一次性生成整个项目是不现实的,一定需要给AI指定外部计划,让AI按照计划分布完成,每次只完成一部分功能
- 重要原则一定要预先定义,并且写入prompt,每次对话都需要牢记
- 让AI每一步执行完成都需要验证代码,提交代码
- 不要试图一次性提出多个改进,每次只提出一部分
- 前端使用UI库,避免最后样式不可控