上个月我在用 Claude Code 开发一个新功能需求说得很清楚「给用户列表页加一个按注册时间排序的功能」。AI 给出的代码看起来很完整——接口、Service 层、前端组件都有。但跑起来发现排序逻辑用的是前端分页后的本地排序不是数据库层面的排序。数据一多就废了。改完这个又发现它用的是创建时间字段而不是注册时间。我花了半小时 PromptAI 花了半小时「改」最后代码改了七八版还是有问题。这就是 vibe coding 的典型死法——AI 写得很快但方向从一开始就偏了速度越快越难收。GitHub 在今年 5 月开源了一个叫 Spec Kit 的工具专门解决这个问题。发布不到一个月它已经拿到了11 万 Star、9,700 个 Fork是今年 GitHub 上增长最快的 AI 工具类项目之一。这篇文章的核心结论先放在这里规范文件spec.md是 AI 编码里最被低估的基础设施。写好它你跟 AI 的对话质量会有质的提升不是因为 Prompt 技巧变好了而是因为 AI 终于知道它要做的是什么。为什么 Vibe Coding 的天花板这么低先说清楚问题再说解决方案。vibe coding 这个词是 Andrej Karpathy 提出的原意是「顺着感觉写代码让 AI 处理细节」。在原型验证阶段这个方式非常有效——你描述个大概AI 给你一个能跑起来的架子5 分钟内看到效果。但进入真正的功能开发之后这个模式会遇到一个内在矛盾AI Agent 不是搜索引擎它是「字面意思执行者」。你说「加一个排序功能」它就加排序功能。它不知道你的数据量有多大不知道你的分页逻辑在哪一层不知道「注册时间」和「创建时间」在你的 schema 里是不是同一个字段。它把所有这些模糊的空间用它认为「合理」的猜测填满了。这就是 GitHub 官方文章里说的那句话it looks right, but doesnt quite work——看起来对但跑起来不对。更深的问题是需求漂移context drift。你在一个长对话里反复修改需求AI 的「记忆」会逐渐偏离最初的意图。第 10 轮修改的代码和第 1 轮的需求之间可能已经没有直接的对应关系了。这不是 AI 的智力问题是信息结构的问题。vibe coding 本质上是把「需求」藏在了对话历史里分散在十几条消息的来回里。AI 每次生成代码都需要从这些碎片里重建上下文每次重建都可能丢失细节。Spec Kit 的解法是把需求从对话里拿出来放到一个结构化的文件里。这个文件就是 spec.md它是整个开发流程的单一真相源。AI 每次做任何决策都从这里取信息而不是从对话历史里猜。图左边是 vibe coding 的信息结构——需求散落在对话里AI 每次都在猜右边是 SDD 的信息结构——spec.md 是唯一真相源AI 从这里取信息Spec Kit 的核心设计七步工作流Spec Kit 的安装很简单核心是一套七步工作流每一步生成一个文件这些文件共同构成一个功能的「完整规范体系」。在看具体命令之前先理解这个设计哲学规范先于实现文件先于代码。传统开发是先写代码遇到问题再补文档。Spec Kit 是先写规范让规范驱动代码生成。这个顺序的改变意义远大于工具本身的功能。七步工作流全景步骤命令生成文件核心作用1/speckit.constitution.specify/memory/constitution.md项目治理原则所有后续决策的底线2/speckit.specifyspecs/[FEATURE]/spec.md用户故事和功能需求only「what」和「why」3/speckit.planspecs/[FEATURE]/plan.md技术架构和技术栈选型4/speckit.clarify—解决歧义提前暴露假设5/speckit.tasksspecs/[FEATURE]/tasks.md带依赖关系的任务清单6/speckit.analyze—跨文件一致性验证7/speckit.implement实际代码系统性执行所有任务这七步里最容易被跳过的是第 4 步clarify和第 6 步analyze。跳过这两步的代价往往在第 7 步才暴露出来——任务跑到一半发现两个模块的接口不兼容或者某个边界情况根本没考虑进去。有实践者在完整走完一个 Azure 微服务项目后报告在 analyze 阶段自动发现了 9 个潜在问题包括「缺失 FluentValidation 验证器」和「DI 注册顺序错误」——这两个如果等到 implement 阶段才发现代价是完全不同的。最终生成的目录结构是这样的specs/[FEATURE]/ ├── spec.md # 用户故事和功能需求 ├── plan.md # 技术架构和决策 ├── tasks.md # 带依赖关系的工作分解 ├──>图Spec Kit 七步工作流每一步都有明确的输入和输出AI 在整个过程中是执行者而非决策者一张对比图vibe coding vs SDD 的真实差异光说原理不够直观我来画一张更具体的对比。假设你要开发「用户注册邮件验证」功能。vibe coding 路径第 1 轮 Prompt「帮我实现用户注册的邮件验证功能」 → AI 给了一个完整的实现用了某个邮件库有验证码逻辑第 2 轮「验证码的有效期改成 10 分钟」 → AI 改了但顺便把验证码长度也改了你没说保持不变第 3 轮「验证链接要包含用户 ID 吗」 → AI 说「可以」然后改了实现但新的 URL 格式和你的路由配置冲突了第 4 轮「路由报 404」 → ...SDD 路径Spec Kitspec.md 里明确写了验证方式链接不是验证码有效期10 分钟URL 格式/verify?token{jwt_token}token 包含 user_id不暴露在 URL 里依赖库已有的spring-boot-starter-mail不引入新依赖plan.md 里明确写了用 Redis 存储 tokenkey 格式email:verify:{token}TTL 10 分钟验证接口GET /verify的参数和响应格式tasks.md 里明确写了Task 1Redis 存储逻辑无前置依赖Task 2邮件发送服务依赖 Task 1Task 3验证接口依赖 Task 1Task 4前端「已发送验证邮件」提示页无后端依赖AI 执行/speckit.implement的时候它知道每一个 task 要做什么、不能做什么、依赖什么。33 个 task逐一 ✅。这不是说 SDD 没有返工而是返工发生在「写文档」阶段而不是「跑测试」阶段——在 spec 里改一行字的代价远低于在代码里 debug 一个小时。图两种模式下的返工时机对比——SDD 把问题暴露在「写规范」阶段vibe coding 把问题留到「跑代码」阶段这套方法的边界在哪里Spec Kit 不是银弹有几个场景它不适合1. 5 分钟的快速原型如果你只是想看看「这个 API 能不能用」「这个 UI 大概长什么样」vibe coding 更快。Spec Kit 的七步工作流是有成本的这个成本在原型验证阶段不划算。2. 需求高度不确定的探索期如果你连「要做什么」都还没想清楚写 spec 会很痛苦——你不知道要往里填什么或者每天都在改。这个阶段 vibe coding 反而是合理的因为你在用代码来探索需求。3. 独立开发者的个人小项目五步规范流程对一个人做的小工具来说太重了。不过即使不用完整流程constitution.md 这个单一文件就值得写——它相当于你给 AI 的全局配置比每次 Prompt 里重复说约束高效得多。Spec Kit 真正发挥价值的场景是多人协作项目AI 需要和不同成员的约定保持一致功能复杂度高涉及多个模块和接口契约有遗留系统需要在已有代码约定下做新开发对交付质量有明确验收标准的功能用 GitHub 自己的分类绿地新项目greenfield、已有系统加功能N1、遗留系统改造——Spec Kit 对这三类都有具体的预设支持。目前它已经有105 个社区扩展、22 个预设包括专门针对 Spring Boot 项目、Go 微服务、前端组件库的特化版本。装完基础工具后用specify extension list可以看到完整目录。常见问题Q写 spec.md 很花时间我这种快节奏团队用得起吗这个问题的隐含假设是「写文档 额外成本」。换个角度你现在花在解释需求、修 AI 的错、合并冲突上的时间有多少spec.md 把这些成本前置了。按 Peter Saktor 的实测经验完整走完 Spec Kit 流程的项目33 个任务全部正确完成0 编译错误——而不走规范流程时同等复杂度的功能通常需要多轮返工。QSpec Kit 支持中文写 spec 吗完全支持。constitution.md 和 spec.md 都可以用中文写AI 理解没有问题。甚至更推荐中文写——因为你的团队用中文思考需求写规范的时候用中文更不容易出现翻译层的信息损耗。Q我现在用 Cursor需要换工具吗不需要。Spec Kit 支持 Cursor 的.cursorrules模式specify init my-project --integration cursor就行。它的设计本来就是工具无关的规范文件spec.md/plan.md/tasks.md是纯 Markdown任何 AI 工具都能读。QSpec Kit 本身会过时吗这是个好问题。AGENTS.md 和 CLAUDE.md 这类「AI 配置文件」的生态已经在快速标准化Linux Foundation 旗下已有 60 工具支持 AGENTS.md 这个格式。Spec Kit 的 constitution.md 是这一趋势的进化版——如果说 AGENTS.md 是给 AI 的使用说明书constitution.md 是给 AI 的工程契约。方向是对的标准化程度只会越来越高。Q规范文件太详细会不会限制 AI 发挥这里有个认知误区我们不是想让 AI「发挥创意」我们想让 AI「准确执行意图」。规范文件限制的不是 AI 的能力是 AI 的猜测空间——让它少猜多做。生产代码里 AI 的「创意发挥」大多数情况下是麻烦的来源而不是价值的来源。总结说到底Spec Kit 解决的不是「怎么跟 AI 说话」的问题是「把什么东西告诉 AI」的问题。Prompt 再好也只是在优化「信息传递的效率」spec.md 改变的是「你给 AI 的信息结构」——这两件事的量级不在同一个层面。我在几个项目里推广下来的感受是前三次用 Spec Kit 会觉得「这也太繁琐了」第四次开始就不想回去了因为你会清楚地感受到少返工有多爽。下一篇打算拆解 constitution.md 的完整写法给出针对不同技术栈的中文模板感兴趣的关注一下。如果你身边有团队正在规模化推广 AI 编码这篇可以直接甩给他们比重新解释一遍省事。
Clang Power Tools:在Visual Studio中实现C++代码现代化与静态分析 1. 项目概述:为什么我们需要Clang Power Tools? 如果你是一名在Windows平台上,尤其是使用Visual Studio进行C开发的工程师,那么你一定对“重构”和“代码现代化”这两个词又爱又恨。爱的是,它们能让代码更清晰、更安全…
2026辽宁公考机构怎么选?辽宁粉笔、中公、华图三强全维对比,一份数据告诉你答案 - 天涯视角 2026年国考报名人数突破371.8万,报录比逼近98:1。辽宁省考43.8万人争夺8179个岗位,报录比约53.5:1。在如此激烈的竞争环境下,选择一家合适的培训机构,其重要性不亚于备考本身。 核心结论:综合教研能力、师资标准化程度…
福州翡翠回收别被“水头不足”乱压价!靠谱翡翠回收店铺实物实测估价不套路 - 每日生活报 很多福州本地玩家手里都有闲置翡翠手镯、翡翠吊坠、平安扣、翡翠手串等玉石饰品,想出手变现却屡屡踩坑。市面上大部分小型回收店不懂翡翠专业行情,没有系统化的种水、颜色、瑕疵评估标准,最常用的套路就是随口判定“…
Go-Zero基础入门5: 探究go-zero如何基于gRPC扩展客户端 纲要 引言 回顾对gRPC服务端的扩展方式引出本节对客户端的适配与初始化分析 客户端适配:go-zero如何包装gRPC Client goctl生成的代码结构接口、默认实现与调度方法连接注入与请求转发 客户端初始化流程 结构定义与接口抽象证书与安全配置负载均衡与服务发现的集成拦…
Unity原生角色换装工具包:支持头/衣/裤/鞋独立替换与运行时Mesh合并 本文还有配套的精品资源,点击获取 简介:一套开箱即用的Unity角色换装实现方案,完全基于引擎原生API开发,无需第三方插件。核心能力包括:按部位(头部、上衣、裤子、鞋子等)动态替换SkinnedMes…
AI绘图实战:从文字设定到角色变身序列生成完整指南 1. 先搞清楚“AI还原OC变身”到底要解决什么问题朋友给你描述了一个他原创的魔法少女角色(OC,Original Character),希望你能用AI工具把这个角色的“变身过程”或“变身形态”可视化出来。这不是简单的画一张静态立绘,而…
可灵AI视频生成提示词工程:结构化公式与实战案例详解 在实际 AI 视频创作项目中,很多开发者或创作者会遇到一个共同问题:明明输入了一段文字描述,但生成的视频内容与预期差距很大,或者画面逻辑混乱、主体不清晰。这背后往往不是模型能力不足,而是提示词(Prompt…
C++集群聊天服务器异常退出防御:从信号处理到分布式一致性的工程实践 1. 项目概述:当集群聊天服务器“不辞而别”在分布式系统开发中,尤其是像集群聊天服务器这类强在线、高并发的服务,最让人头疼的往往不是功能实现,而是那些“非正常”的运行状态。服务器异常退出,就是其中典型的一种。想…
2026 年咸宁正规的乙酸乙酯回收工厂哪家好,别让废液白流:这招让乙酸乙酯回收变现 - 品质体验官 2026年咸宁乙酸乙酯回收,选对工厂让废液变宝到2026年,在环保意识提升、资源循环利用越来越重要之际,化工企业的废旧原料处理的需求也随之增加。乙酸乙酯作为涂料、油墨、胶粘剂等行业中的一种常用有机溶剂,其回收再…
Python ctypes性能优化实战:8大技巧突破C扩展速度瓶颈 1. 项目概述:当Python遇上C,速度瓶颈的破局之道“Python调用C太慢?”——这恐怕是很多在性能敏感场景下使用Python的开发者,尤其是那些尝试过用ctypes、CFFI或Cython来集成C/C代码的朋友,心中挥之不去的疑问。你兴冲冲…
2026 年宜春诚信的塑料缠绕膜厂家哪个好,缠绕膜背后的秘密:你不知道的成本陷阱 - 领域鉴赏官 缠绕膜的秘密是什么,其中的成本陷阱又是怎样的一种情况呢在我们日常生活中的生产、仓储、运输等行业里经常要使用到塑料缠绕膜。你经营的是一个小小的电子产品制造公司,每天有无数电子产品的出货要装箱发货。你依旧用…
TPS2551-Q1负载开关:汽车电子电源路径保护与智能管理实战 1. 项目概述与核心价值在车载电子、便携设备乃至工业控制系统的电源路径设计中,我们工程师最头疼的问题之一,就是如何优雅且可靠地处理“意外”。你精心设计的5V电源轨,可能因为一个劣质USB设备的插入、一根内部短路的线缆,或者仅…
PlantUML 实战:5分钟将 UML 2.5 序列图转换为可执行代码草图 PlantUML 实战:5分钟将 UML 2.5 序列图转换为可执行代码草图 在软件开发过程中,清晰的系统设计往往比编码本身更为关键。传统拖拽式UML工具虽然直观,却常常成为效率杀手——频繁的鼠标操作打断设计思路,版本控制困难,…
【RT-DETR涨点改进】29 动态Batch推理:让RT-DETR在低延迟下吃满GPU算力 29 动态Batch推理:让RT-DETR在低延迟下吃满GPU算力 开篇故事 上个月帮一家安防厂商做项目优化,他们用RT-DETR做实时人流统计,部署在NVIDIA A10上。客户反馈说:“GPU利用率才30%,但延迟已经飙到40ms了,加人流量就丢帧。” 我远程一看,好家伙——生产环境里每个请求单独…
Postman 环境变量实战:3种动态设置方法与CI/CD集成避坑指南 Postman 环境变量高阶实战:动态管理与 CI/CD 深度集成在接口自动化测试领域,环境变量的灵活运用往往成为区分初级与高级测试工程师的关键能力。本文将深入探讨 Postman 环境变量的三种动态设置模式,并分享 Newman 在 CI/CD 流水线中的实战避坑…
[C++]内存管理:串顺序存储的内存回收 在串(字符串)的顺序存储中,内存回收的方式取决于字符串的存储方式以及所使用的编程语言和相关库。以下以 C 为例进行说明,因为 C 对内存管理有较为直接的控制。 1. 基于 char 数组的串顺序存储 如果使用普通的 char 数组来存储字…
移动端游戏功耗测试实战:电流、功率、亮度和场景对比 移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…
足球口袋教练 HarmonyOS 离线应用实战(03/20):ArkUI 首页仪表盘搭建 本文是“足球口袋教练 HarmonyOS 离线应用实战”系列第 3 篇。示例项目是一个 HarmonyOS / ArkTS / ArkUI 编写的离线足球训练助手,围绕真实页面、真实截图和可复现操作展开。 本篇要解决的问题 训练 App 的首页不能只展示欢迎语,它要解决“我现在该点哪…