Vibe Coding 的最佳实践融合了专业的软件工程技术与有效利用大型语言模型(LLM)的特定技巧。
以下是获取 Vibe Coding 最佳结果的总结性建议:
一、 规划与架构
- 投入时间规划架构: 在将任务交给 Cursor 或其他编码工具之前,应先使用纯 LLM 花费“不合理”的时间来构建项目的范围和实际架构。
- 制定全面计划: 第一步不是编写代码,而是与 LLM 合作制定一个全面计划,并将其保存在项目文件夹中的 Markdown 文件内。
- 分段实施: 在实施过程中,应逐步完成计划,避免试图一次性完成整个项目。明确要求 LLM 一次只完成计划的某个部分(例如,“我们现在只做第二部分”)。
- 管理计划范围: 在计划的初稿完成后,删除或移除不喜欢的内容,将某些功能明确标记为“不做”或“太复杂”,并保留一个部分用于未来的想法,告知 LLM 这些目前超出范围。
二、 版本控制与代码质量
- 严格使用 Git: 必须严格使用 Git 进行版本控制。不应完全信任工具内置的恢复功能。在开始新功能时,确保从干净的 Git 状态开始。
- 重置并重试: 如果 LLM 陷入“兔子洞”(反复生成错误的或可疑的代码),或需要不断复制粘贴错误信息,应停下来反思,并使用
git reset head hard重置到已知可工作的版本,然后重新开始。 - 避免代码堆积: 如果尝试多次提示后得到了解决方案,最好先进行 Git 重置,然后将干净的解决方案反馈给 LLM,让它在一个干净的代码库上实现,以避免积累多层不佳代码(craft)。
- 经常重构: 在代码工作并且测试实现之后,可以随时进行重构。可以请求 LLM 识别代码库中重复或适合重构的部分。
- 模块化设计: 记住小文件和模块化对人类和 LLM 都有利。未来可能会倾向于服务型架构,其中 LLM 在清晰的 API 边界内工作。
三、 测试驱动与调试
- 测试先行: Vibe Coding 建议从反方向开始:首先手工制作测试用例(不使用 LLM 编写)。测试用例完成后,它们就成了 LLM 生成代码的强有力保障。
- 编写高层级测试: 优先编写高层级的集成测试,模拟用户在网站或应用中的点击行为,确保端到端的功能正常工作,而不是低级别的单元测试。
- 利用测试套件: 测试套件可以帮助尽早捕获回归问题,尤其是因为 LLM 经常会不必要地修改不相关逻辑。
- 快速修复 Bug: 遇到 Bug 时,第一步是直接将错误消息(来自服务器日志或控制台)复制粘贴回 LLM。
- 复杂 Bug 需谨慎: 对于更复杂的 Bug,可以要求 LLM 在编写任何代码之前先思考三到四种可能的起因。
- 添加日志和切换模型: 如果遇到困难,应添加日志(logging)。如果某个模型失败,可以尝试切换不同的模型,因为它们可能在不同的场景中表现更佳(例如,Gemini、Sonnet 3.7、OpenAI 模型)。
四、 工具使用与上下文管理
- 将 AI 视为编程语言: 将 Vibe Coding 视为一种新的编程语言类型,通过语言而不是代码进行编程。因此,必须提供非常详细且必要的上下文和信息。
- 使用多个工具: 最好同时加载多个工具(如 Cursor 和 Windsurf)。Cursor 可能更快,适用于前端或全栈任务;在等待 Windsurf 思考时,可以使用 Cursor 来更新前端。
- 直接访问 LLM UI: 如果 AI ID 陷入无法实现或调试的循环中,直接将代码粘贴到 LLM 的网站 UI 中并提问,有时可以解决问题。
- 编写指令文件: 编写详细的指令或规则文件(例如,Cursor rules 或 Windsurf rules),这对提高 AI 编码代理的效率至关重要。
- 本地文档: 如果直接指向在线 Web 文档效果不佳,可以下载 API 文档并将其放在工作文件夹的子目录中,然后在指令中要求 LLM 先阅读这些本地文档,以提高准确性。
- 利用非编码任务: LLM 不仅用于编码,还可以用于配置 DNS 服务器、设置托管(充当 DevOps 工程师),或生成和调整图像(充当设计师)等非编码工作。
五、 复杂功能与输入方式
- 复杂功能先独立实现: 如果正在处理一个 LLM 难以实现的复杂功能,应先在一个完全干净的代码库中将其作为独立项目实现一个小型的参考实现。然后,指示 LLM 参照该实现,并在主代码库中重新实现。
- 选择技术栈: 选择具有大量高质量、一致的训练数据(例如,Ruby on Rails)的成熟框架,LLM 的表现往往更好。
- 利用截图: 如今大多数编码代理都支持复制粘贴截图,这对于展示 UI 错误或引入设计灵感非常有用。
- 使用语音输入: 可以使用语音工具(如 Aqua)通过口述指令与工具交互,输入速度更快(约每分钟 140 个词),且 AI 能够容忍次要的语法和标点错误。
六、 学习与实验
- 利用 LLM 教学: 可以利用 LLM 作为教师,让它逐行解释代码实现,帮助学习新技术。
- 持续实验: 持续尝试新的模型版本(如 Gemini、Sonnet 3.7),以查看它们在不同场景(调试、长期规划、实现功能、重构)中的表现。
Vibe Coding 就像是几年前的提示工程(prompt engineering)一样,是一项可以通过不断摸索和学习最佳实践来显著提高结果的实践。
