精选

如何从0到1 Vibe Coding 一个项目,并长期维护

我是汉堡。上篇文章《我的第一个 Vibe Coding 项目正式上线,Notus——原生 AI 笔记应用,且完全开源》结尾我说过,要写一篇关于如何持续 Vibe Coding 可长期维护项目的文章。这篇就是。

以下内容来自我自己的血泪教训和成功经验,希望能帮到正在 Vibe Coding 或准备入坑的人。


一、我的 AI 博客项目是怎么死的

去年夏天,我买了 Trae 的会员版,打算自己开发一个 AI 博客功能,包含博客摘要、知识库、SEO 这些。刚开发的时候兴奋得很,看着功能一个一个被实现,越做越有干劲,周末好几次熬到凌晨三四点,差点熬穿了。甚至还幻想靠这个赚钱。

但很可惜,这个项目夭折了

那会儿刚接触 Vibe Coding,对工程管理和 harness 相关的知识极度欠缺。每次都是想一个功能就让 AI 实现一个,AI 的上下文约等于没有。导致:

  • 改完 A,B 出问题
  • 改完 B,C 又出问题了
  • 改完 C,A 又挂了

无限循环,最后心态崩了,维护不过来就放弃了。


二、Vibe Coding 的本质困境

Vibe Coding 有一个很形象的比喻——抽卡游戏

刚开始开发的时候,看着自己的想法一个个被实现,就像抽卡前期中奖概率高得很,爽感拉满。但越到后面越难"中奖":

  1. 上下文膨胀:代码量越大,AI 越难理解全貌,每次改动都是盲人摸象
  2. 耦合蔓延:组件之间相互依赖,改一处牵一发而动全身
  3. 意图退化:没有文档记录,几轮对话之后你自己都忘了当初为什么这么设计
  4. 红利消失:前期快速出功能的爽感过去后,维护成本指数级上升

以上所有问题指向同一个根源:缺乏工程化管理。

这个问题可以解决。下面就是我沉淀下来的方案。


三、工欲善其事,必先利其器

工程化管理之前,先聊工具和模型的选择。

Vibe Coding 的效果,首先取决于你用的 Coding Agent 和 AI 模型。我个人推荐这几个 Agent 工具:

  • Codex(我的主力)/ OpenCode:启动时自动注入项目级别和全局的 AGENTS.md,Agent 啥也不用说就知道项目的一切
  • Cursor:适合轻量级改动和代码补全
  • Claude Code:Agent 能力强,适合复杂任务

模型方面,推荐 GPT 5.6 Terra High、GLM 5.2、Claude 5 等一线模型。

使用策略上,用最强的模型做规划和设计,用中高模型做编码。 比如用 Claude Opus 或 GPT 5.6 Sol High 来写项目的需求文档、总技术文档和各功能模块的实现文档——这些"地基"级别的产出,必须交给最强的脑子。具体的编码实现,交给中高模型来执行。

工具和模型选好了,下面聊工程化管理。


四、规划永远比写代码重要一万倍

相信绝大多数人在没 AI 写代码时都喜欢先写后端,再写前端,包括我自己也是如此。但规划和写代码,到底哪个放在前面?

盖房子最重要的是地基,地基打好了房子才能稳。求职市场里,架构师的工资永远比程序员高。规划和设计的份量,不用多说了。

在让 AI 写一行代码之前,先用最强模型把需求文档、技术方案和各功能模块的实现文档写清楚。 这些文档就是你的"地基"。

不一定每处都需要规划得那么细致。文档写得过于事无巨细,反而会让中等模型在执行时缺少自主性和发散性思维,变成了纯粹的"翻译机"。把握好粒度,关键路径细化,边缘逻辑给 AI 留发挥空间。


五、合理的数据库表设计

在没有 AI 写代码的时代,数据库设计是顶要紧的步骤。你对业务的理解会直接体现在数据库设计上,而数据库设计的好坏会影响项目业务的复杂程度,进一步影响代码的可读性和可维护性。

用 AI 出方案时,一定要 review 表的设计能用一个表解决的,就不要用多个表。 如果 AI 给出的方案不合理,果断和它沟通,选择较优的方案。

同时还要考虑系统后续的拓展功能,防止数据表频繁增删字段,甚至被迫重构表设计。同理,整体方案设计也要把后续拓展的可能性考虑进去——这和规划优先的思路是一脉相承的。


六、写代码的先后顺序

在没有 AI 的时候,我习惯先写后端,再写前端,相信大多数人也是这样。但用 AI 写代码,先写前端,再写后端。

具体做法:

  1. 把项目的完整需求文档发给 AI,沟通需要多少个页面,每个页面有哪些详细功能。把沟通出的内容补充到需求文档中。
  2. 出原型图。 将需求文档发给 GPT 或 Claude 产出原型图。我个人强烈推荐 Claude Design——审美确实好,原型图不会偏离需求文档要求;而且产出的是 React 代码,可以直接用 Claude 或 GLM 5.2 搭建前端工程跑起来看到页面。如果用 GPT,则用 GPT Image 2 生成设计图,再通过 Codex 像素级还原,但需要注意设计图可能会偏离需求文档的功能。
  3. 模拟数据,验证动态页面。 根据数据库表 DDL 在前端模拟一些数据,测试页面是否全是动态渲染的。

到了这一步,你对 Vibe Coding 上瘾了。

先写后端的时候,大片代码不停输出却看不到任何视觉成果,难免有些失落和不安,总感觉 AI 没有遵循文档的要求。先写前端让你在最短时间内看到产品长什么样。 那种即时的成就感和掌控感,完全不一样。反正我自己是这么觉得的,哈哈哈哈。


七、好的上下文与文档管理

经过 AI 博客项目的失败,我在开发 Notus 和后续项目的过程中,逐渐沉淀了一套 Harness 体系——给 AI 配一个"项目管理大脑"。

7.1 AGENTS.md

模型都是有上下文限制的,虽然现在普遍一百万的上下文窗口,但放到一个庞大的项目中,根本不够看,特别是 GPT 这种 300k+ 的上下文更是难受。一般我自己一个对话最多实现 3~4 个需求,防止 Agent 频繁压缩上下文导致准确度丢失。

控制对话长度之外,让 AI 在每次对话开始时就能理解项目的一切,这才是关键。

AGENTS.md 就是干这个的。每次开始一个新项目或维护旧项目时,我都会手写一个 AGENTS.md。对于 Codex/OpenCode 来讲,启动时会自动将项目级别和全局的 AGENTS.md 注入当前对话上下文——你啥也不用说,Agent 就知道关于项目的一切。

下面是一个脱敏后的 AGENTS.md 示例,思路供参考:

plaintext
复制代码
[AGENTS.md](http://AGENTS.md) 本文件只规定 AI 编码 Agent 在项目仓库中的行为。产品需求、技术方案、数据库表和实施细节由项目文档维护,本文件不重复抄写。 **1. 基本行为** - 始终使用中文回复;代码、标识符、API、数据库字段和提交信息使用英文。 - 先查项目文档、现有代码和测试,再决定如何实现。文档已有答案时,不重复询问用户。 - 只修改当前任务涉及的内容,不顺手做无关重构,不为尚未发生的需求提前建设复杂抽象。 - 不能在当前任务中完成的部分要明确说明,不承诺后台交付。 **2. 权威文档** - 优先读取 `docs/` 中的 Markdown 版本:PRD(做什么)、技术设计文档(怎么设计)、实施文档(怎么推进)、进度文档(现在做到哪里)。 - 冲突优先级:AGENTS.md → 用户本次明确要求 → PRD → 技术设计 → 实施文档 → 进度文档 → 现有代码。 - 发现代码与文档不一致时,不得静默猜测,按高优先级文档确认目标,说明差异并同步修正。 **3. 开始任务前必须自主查询** - 查看进度文档,确认当前阶段、下一任务、前置依赖和阻塞。 - 在 PRD 中搜索相关页面、功能名和验收标准。 - 在技术设计中搜索相关模块、表、API、外部依赖和约束。 - 检查受影响代码、迁移和测试,沿用仓库已有模式。 **4. Vibe Coding 工作流** - 每个任务按最小纵向切片完成:文档定位 → 数据模型/迁移 → 后端服务 → API → UI → 测试 → 文档与进度。 - 数据库变化先写迁移和约束,再改 ORM、服务和 API。 - 需要改变产品范围、架构、表结构或实施顺序时,先更新对应文档,再编码。 - 一次优先交付一个可验证闭环,不并行铺开大量半成品。 **5. 代码结构与依赖方向** - domain/ 不导入具体框架或 SDK。 - API 不直接写 SQL,也不直接调用第三方数据源。 - 配置统一加载,不在业务代码中散读环境变量。 **6. 完成标准** - 相关测试通过;数据库迁移可从空库执行也能从上一版本升级。 - 外部 Provider 的失败、超时、空数据和过期状态已处理。 - 完成后必须更新进度文档的状态、证据、遗留问题和下一任务。 - "代码能运行"不等于完成;测试、文档和进度没有同步时,任务仍未完成。 **7. Git 与文档同步** - 未经用户明确授权,不推送远程、不发布版本。 - 提交只包含当前任务相关修改,不混入无关格式化或重构。 - 不提交 .env*、密钥、数据库、备份、日志、依赖目录和构建产物。 - AGENTS.md 只维护 Agent 行为和代码边界,不复制项目文档的细节。

AGENTS.md 干的事情就一件:让 AI 知道你的编码哲学和项目规范,不用每次都重复交代。

7.2 文档治理

文档治理是 harness 体系的核心模块。在让 AI 写代码之前,先让它把需求写清楚。

我采用的文档分类体系:

文档类型命名格式用途
REQ 需求文档REQ-YYYYMMDD-XX-*.md新功能或大范围改造前必写,明确范围、验收标准
PROG 进度日志PROG-YYYYMMDD.md每天一日志,记录完成了什么、遇到了什么问题
BUG 缺陷记录BUG-YYYYMMDD-XX-*.md发现 bug 立即记录,关联来源 REQ
BIZ 业务决策BIZ-YYYYMMDD-XX-*.md业务流程或实现策略的确认和调整
DEV 技术方案DEV-YYYYMMDD-XX-*.md复杂模块拆解、阶段实施方案

关联规则:

  • PROG 必须引用相关 REQ/BUG,保证进度可追溯
  • BUG 必须引用来源 REQ,知道这个 bug 是从哪个需求引入的
  • BIZ 必须引用对应 REQ,业务决策不能悬空

这套体系的作用:

  1. 上下文外挂:AI 每次对话前先读相关文档,就不会丢失上下文
  2. 可追溯:三个月后回来,你还能知道当初为什么这么设计
  3. 可交接:换一个 AI 模型或工具,读一遍文档就能接手

7.3 控制 Vibe Coding 的边界

Vibe Coding 的一个诱惑也是陷阱:"顺手加一个功能"。

你以为只是"顺手",但 AI 的上下文是有限的。每多一个功能点,就会引入新的耦合、新的边界情况、新的 bug 风险。

范围冻结就是在一开始把 v1 要做什么、不做什么写死。比如 RepoRadar 项目:

纳入 v1 的:GitHub Search 抓取、规则过滤、去重入库、Agent 分析、仓库列表、配置中心、飞书推送...

明确不进 v1 的:增速监控、批量提交、导出 CSV/Markdown、语义去重、多数据源接入...

一旦范围冻结,后续开发中 AI 想"顺手"加功能时,你就可以说:"不在 v1 范围,先记 REQ,下个版本再说。"

7.4 分阶段推进:Phase 0 → Phase N

大项目一口气让 AI 实现 = 灾难。必须拆阶段,每个阶段有明确的 DoD(Definition of Done)

一套典型的阶段划分:

阶段内容DoD
Phase 0文档体系初始化AGENTS.md、README.md、docs/ 结构就绪
Phase 1后端骨架服务可启动、配置可读、数据库可初始化
Phase 2核心链路 1端到端链路跑通
Phase 3核心链路 2同上
Phase 4业务 API接口字段对齐、错误响应统一
Phase 5前端工程化拆页拆组件、接入真实 API
Phase 6通知与配置链路闭环、热重载
Phase 7打包上线Dockerfile、持久化、基础回归

每个 Phase 结束必须达到 DoD 才能进入下一阶段。这个纪律不能破。


八、实战项目 Notus

下面是我怎么用这套体系把 Notus 从 0 到 1 做出来的。

8.1 项目背景

Notus 是一个本地 AI 原生笔记应用,核心功能是文档编辑、知识库和 AI 创作。对标的其实是 notebookLM 和 YouMind,但完全开源、免费、数据本地存储。开发周期大约 20 天(非全职)。

8.2 怎么用 Harness 体系

文档先行。 在写第一行代码之前,我先写了 PRD(产品需求文档),明确了 v1 范围、核心功能、技术选型。

AGENTS.md 就位。 项目初始化时就写好 AGENTS.md,让 AI 每次对话都先理解项目结构和规范。内容包括项目采用 Tauri + React 架构、前端组件目录结构、代码风格要求,以及禁止的行为(比如不要擅自改架构)。

分模块推进。 不是一口气让 AI 写整个应用,而是按模块来:先搭编辑器核心(Markdown 解析与渲染),再建知识库(文档索引 + 语义检索),最后做 Agent 创作(多文件改写 + 风格学习)。

8.3 上下文管理

这是 Notus 开发中踩得最深的一个坑。

当项目代码量上去之后,AI 的上下文窗口根本塞不下全部文件。我的做法是:

  • 按需加载:只把当前任务相关的文件喂给 AI,其余文件通过文档索引让 AI 知道"存在但不加载"
  • 摘要压缩:对历史对话进行摘要压缩,保留关键决策和上下文
  • 意图识别:先让 AI 判断用户是想改写文章还是单纯闲聊,匹配不同策略

这些经验后来也直接体现在了 Notus 的 Agent 工程模块里。


九、实战项目 RepoRadar

9.1 项目背景

RepoRadar 的起源其实很接地气——我在懒猫搬砖做副业,为了方便,写了个应用去爬 GitHub 开源仓库,自动判断能不能搬,然后推送到飞书群里。

但这次不一样。这次我一开始就用上了完整的 harness 体系。

9.2 Harness 落地实践

文档体系先行(Phase 0):在写任何代码之前,先把 PRD、AGENTS.md、docs/ 目录结构全部建好。PRD 作为总纲永久保留。

范围冻结:v1 只做 GitHub Search 抓取、规则过滤、Agent 分析、飞书推送。增速监控、批量提交、语义去重等全部推到后续版本。

分阶段 7 步走:从文档体系初始化 → 后端骨架 → 采集链路 → 分析链路 → 业务 API → 前端 → 打包上线,每一步都有明确的 DoD。

接口契约先行:在写代码之前先定义 API 契约(GET /api/repos、POST /api/submit 等),前后端以契约为准各自开发互不阻塞。

9.3 和之前失败的 AI 博客项目对比

维度AI 博客(失败)RepoRadar(成功)
文档❌ 无,想到哪做到哪✅ PRD + AGENTS.md + docs/
范围❌ 不断加功能✅ v1 范围冻结
阶段❌ 无规划,一把梭✅ Phase 0-7 分步走
上下文❌ 约等于没有✅ 按需加载 + 摘要压缩
结果心态崩了在掌控之中

十、心态

最后聊聊心态。

Vibe Coding 做久了,最大的坑不是 AI 不够强——是你自己的欲望。看到一个好玩的功能就想加,看到别人开源了什么就想自己也搞一个。但代码是一行一行堆出来的,每多一个功能,维护成本就往上翻。能复用的就别自己造,能用现成库的就别手写。我踩过太多这种坑:花三天写了个工具函数,后来发现 github上早就有成熟方案,比自己写的还好。

项目做着做着没动力了,我经历过好几次。归结下来就两个原因。

一个是无力维护。代码越堆越多,改一个地方炸三个地方,每次打开项目都有心理负担。这种情况只能靠前面说的工程化管理兜底——文档、范围冻结、分阶段推进。别等烂摊子收拾不了了才想起来,那时候已经晚了。

另一个是不赚钱。花了几百个小时做的项目,上线后用户没几个,更别提收入了。大部分 side project 都这样,没办法。我的态度是:练手的项目,学到东西就算回本;真想赚钱,立项前就想清楚谁来买单、凭什么买单。别一边写代码一边幻想"做完了就有人用了"——大多数时候不会。


个人博客

我的博客:https://blog.hejiajun.com


下一篇预告:Notus 的 Agent 工程细节——上下文压缩、意图识别和工具调用的具体实现。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
吃遍全国汉堡
下载 APP