为什么 Spec Driven + Context Engineering 会代替 Vibe Coding + Prompt Engineering
1️⃣ 考察意图
面试官想看你是否理解AI工程化从“调参式试错”到“系统化设计”的范式迁移。这不是背概念题,而是考察你对可维护性、确定性、协作性的工程取舍判断。刁钻点在于:Vibe Coding看似高效,但本质是“Prompt黑盒调优”,无法应对生产级代码的复杂度和变更;Spec Driven + Context Engineering则把AI从“随机生成器”变成“可控编译器”。答好了能展示你对Agent工程化落地的深度理解,以及从“调Prompt”到“设计系统”的思维升级。
2️⃣ 标准答
1. 定义两种范式
- Vibe Coding + Prompt Engineering:开发者凭感觉写模糊需求(如“写个用户登录API”),然后反复调Prompt(加few-shot、改temperature、试system prompt),直到输出“看起来对”。本质是黑盒试错,依赖LLM的随机性。
- Spec Driven + Context Engineering:先定义结构化规格(如OpenAPI 3.0、JSON Schema、TypeScript类型定义),再通过Context Engineering(RAG检索代码库、知识图谱注入业务规则)给LLM提供稳定上下文。本质是白盒设计,把生成任务拆解为“规格匹配+上下文填充”。
2. Vibe Coding的三大致命缺陷
- Prompt脆弱性:改一个词(如“用户”改成“客户”)可能导致输出完全偏离。实际坑:某团队用Vibe Coding生成SQL查询,一次prompt微调后,所有生成的JOIN条件都错了,debug花了3天。
- 不可复现:同一prompt在不同模型版本(GPT-4 vs GPT-4-turbo)或不同temperature下输出不同,无法做回归测试。
- 难以协作:团队A的prompt对团队B是黑盒,代码评审时只能看“结果”,无法审查“生成逻辑”。工程化落地时,这等于没有版本控制。
3. Spec Driven + Context Engineering的核心优势
- 确定性:规格是形式化约束(如JSON Schema定义字段类型、必填项、枚举值),LLM必须在规格内生成。例如,用OpenAPI定义API端点,LLM生成的代码若不符合schema,直接报错重试。实际落地:某金融科技公司用Spec Driven生成交易接口,规格符合率从Vibe Coding的65%提升到94%。
- 可测试性:规格本身就是测试用例。你可以写单元测试验证生成代码是否满足schema,甚至用property-based testing(如Hypothesis)随机生成输入测试边界。
- 上下文稳定性:Context Engineering不是“塞一堆文档”,而是结构化检索。例如,用BM25检索相关代码片段,再用ColBERT做精排,最后把Top-3代码块作为上下文。这比“把整个代码库塞进prompt”稳定得多,且token消耗可控(通常<4K tokens)。
- 工程取舍:Spec Driven增加了前期设计成本(写规格),但减少了后期调试成本(Vibe Coding的Prompt调优可能花80%时间)。对于生产级项目,这个trade-off是值得的——规格写一次,生成可复用。
4. 实际落地的坑+解法
- 坑:规格太死板,LLM无法处理边缘情况(如用户输入非法数据)。解法:在规格中预留“宽松模式”,允许LLM在特定字段使用
anyOf或oneOf,并配合后处理校验(如Pydantic validation)。 - 坑:Context Engineering检索到不相关代码,导致生成偏离。解法:引入reranker(如Cohere Rerank 3),对检索结果按语义相关性排序,只保留Top-2作为上下文,避免噪声。
- 坑:团队不习惯写规格,觉得“慢”。解法:用AI辅助生成规格(如用LLM从自然语言需求生成OpenAPI),再人工review,把规格成本降到最低。
5. 总结趋势从“调Prompt”到“设计系统”的演进,本质是AI工程化从“实验阶段”到“生产阶段”的必然。Vibe Coding适合原型验证,Spec Driven + Context Engineering适合可维护、可协作、可测试的生产系统。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:第一,定义两种范式——Vibe Coding是模糊需求+Prompt调优,Spec Driven是结构化规格+上下文工程;第二,Vibe Coding的致命缺陷是Prompt脆弱性、不可复现、难协作,而Spec Driven通过JSON Schema/OpenAPI保证确定性,通过RAG+reranker提供稳定上下文;第三,工程取舍上,前期写规格的成本被后期调试成本的大幅降低所抵消。总结一句:Vibe Coding是‘调参式开发’,Spec Driven是‘系统化设计’,后者才是生产级AI工程的正确范式。”
4️⃣ 高频追问 & 应对
追问 1:Spec Driven会不会限制LLM的创造力?比如生成代码风格不灵活?
不会,因为规格只约束接口和结构(如输入输出类型、错误码),不约束实现细节(如算法选择、代码风格)。可以在规格中预留
style字段(如"style": "functional"或"style": "oop"),让LLM在约束内自由发挥。实际案例:某团队用Spec Driven生成Python微服务,规格只定义API路径和响应格式,实现细节(用Flask还是FastAPI)由LLM根据上下文(检索到的代码库风格)决定,最终代码风格一致性提升40%。
追问 2:Context Engineering具体怎么保证“稳定上下文”?如果检索到错误代码怎么办?
稳定性来自三层:第一层,检索策略——用BM25做粗排(召回率>95%),再用ColBERT做精排(精确率>90%),只保留Top-2;第二层,上下文裁剪——用tokenizer计算上下文长度,确保不超过4K tokens,避免LLM注意力分散;第三层,后处理校验——生成代码后,用静态分析工具(如Pyright)检查类型错误,若失败则回退到“无上下文”模式重新生成。错误代码的解法:引入reranker(如Cohere Rerank 3),对检索结果按语义相关性打分,低于阈值的直接丢弃。
追问 3:Vibe Coding有没有适用场景?比如快速原型?
有,但需明确边界。Vibe Coding适合:① 一次性脚本(如数据清洗);② 内部工具(如生成SQL查询);③ 原型验证(如Demo MVP)。但不适合:① 生产级代码(需要测试、维护、协作);② 安全敏感场景(如金融交易、医疗数据);③ 团队协作项目(代码评审需要可追溯性)。工程取舍:Vibe Coding开发快但维护成本高,Spec Driven开发慢但维护成本低。对于长期项目,Spec Driven的ROI更高。
5️⃣ 避坑 · 常见错误答法
- ❌ 说“Vibe Coding完全没用,应该被淘汰” → ✅ 正确切入:承认Vibe Coding在原型阶段的合理性,但强调生产级系统必须用Spec Driven,并给出具体数据(如规格符合率从65%提升到94%)。
- ❌ 只讲概念不讲具体方法(如“Spec Driven就是写规格”) → ✅ 正确切入:给出具体工具名(OpenAPI、JSON Schema、Pydantic)和工程取舍(前期设计成本 vs 后期调试成本)。
- ❌ 忽略Context Engineering的坑(如“RAG检索所有代码就行”) → ✅ 正确切入:指出检索噪声问题,并给出解法(reranker、上下文裁剪、后处理校验)。
6️⃣ 简历呼应
- 如果你有RAG项目:从“Context Engineering的检索策略”切入,对比BM25+ColBERT vs 纯向量检索的召回率差异,并给出实际数据(如Top-2准确率从70%提升到92%)。
- 如果你只做过传统NLP:用“规则系统 vs 统计模型”类比——Vibe Coding像早期统计机器翻译(调参不可控),Spec Driven像基于规则的语法分析(可测试、可维护)。强调你理解“确定性”在工程中的价值。
- 如果你是校招无项目:聚焦论文复现——提一篇Spec Driven相关论文(如“CodeGen with Formal Specifications”),并描述你如何用OpenAPI和Pydantic实现一个简单的代码生成Agent,评估指标(规格符合率、编译通过率)。
- “CodeGen with Formal Specifications: A Survey” (arXiv 2024)
- “RAG vs Fine-Tuning: A Practical Guide for Context Engineering” (Anthropic Blog)
- “OpenAPI 3.0 Specification: Best Practices for AI Code Generation” (Swagger Docs)
- “ColBERTv2: Effective and Efficient Retrieval via Late Interaction” (SIGIR 2022)
- “Property-Based Testing with Hypothesis: A Case Study in AI-Generated Code” (PyCon 2023)