从“Vibe Coding”到“AI全栈工程师”这个转变最近在开发者圈子里被反复讨论。我见过太多团队上一秒还在兴高采烈地晒AI生成的全栈Demo下一秒就被几百个无人维护的函数、随机的数据库连接串、无法定位的线上Bug按在地上摩擦。AI全栈开发根本不是“无脑堆提示词让AI写代码”它的核心挑战在于如何把AI生成的代码纳入工程化体系让它从“能跑”变成“能维护、能上线、能扩展”。这篇文章想聊的是我在这大半年里折腾AI全栈开发沉淀下来的一套实战打法。包括怎么选择AI工具链、怎么设计Agent的工作流、怎么写提示词才能得到可维护的代码以及一套完整的、经过线上验证的“AI协作开发SOP”。内容会涉及LiteLLM、AI Agent、提示词工程、AI Infra这些关键词背后的具体实践而不是停留在概念层面。适合正在用AI辅助写业务代码、但又觉得“AI的产出越来越难以收拾”的开发者参考。1. 从“Vibe Coding”到“Harness SDD”先解决“AI写的东西谁来兜底”1.1 Vibe Coding为什么会翻车“Vibe Coding”这个词火起来的时候很多人把它理解成“凭感觉让AI写代码”。这种模式下开发者和AI之间的对话往往是这样的“帮我做个博客系统要有登录、评论、后台管理。”AI哗啦哗啦生成几十个文件跑起来一看界面还挺漂亮。然后你改了一个字段名整个数据流断裂加了一个新的页面路由原有的权限中间件开始报错。你会觉得AI写的代码是个“脆弱的黑盒”——看起来什么都有动一下就碎一地。原因在于Vibe Coding的本质是“模式匹配”AI根据你的请求从训练数据中找出最相似的代码片段组合起来。它不具备对业务全局的理解也不会问你“这个系统的用户角色分几类评论需不需要审核数据量级大概多少”它默认你会自己去兜底那些边界情况。当你没有给出足够清晰约束时AI就会用“花哨但不收敛”的输出掩盖所有不确定性。1.2 Harness SDD把AI从“写代码的”变成“被审阅的工程师”后来我尝试了一套更结构化的方法Harness SDD。Harness指的是一套包含约束、工具、流程的“外壳”。AI在Harness里工作不能想干嘛就干嘛必须遵循项目约定、测试要求、代码规范以及“先读文档再动手”的规则。SDDSpecification-Driven Development规格驱动开发核心思想是“先写规格再写代码”。把需求变成精确的行为规格说明AI根据规格去实现而不是根据模糊的聊天意图去“发挥”。可以打个比方Vibe Coding 是让AI当一个自由撰稿人你给个主题它自己天花乱坠地写Harness SDD 是让AI当一个严格遵守新闻规范的文字编辑拿到详细的采访提纲和事实核查清单写出来的每个字都必须有出处。这套转变带来的最大收益是AI产出的代码不再是一堆“看似合理的随机组合体”而是可以对标到具体规格、可以被逐条验证的实现单元。出现Bug时你能明确知道是“规格描述错了”还是“代码实现偏离了规格”排查成本降低一个量级。1.3 我用的结构化需求描述模板实践里我总结了一套向AI描述需求的结构化模板效果很不错【项目背景】 做一个面向小团队的任务看板初期用户量50人以内。 【行为规格】 - 用户可以创建项目、创建任务、拖动任务变更状态待办→进行中→已完成 - 只有项目创建者可以邀请成员加入项目 - 任务变更状态时系统在项目动态中记录操作日志 【非功能约束】 - 前端React Tailwind组件需拆分到可复用粒度 - 后端Node.js Fastify SQLite使用Prisma操作数据库 - 认证Session Cookie不用JWT - 所有外部依赖需在package.json中明确锁定版本 【验收标准】 1. 用户登录后只能看到自己参与的项目列表 2. 拖动任务到新列后刷新页面状态保持一致 3. 未登录用户访问任何业务页面时自动跳转登录页在这个模板里行为规格约束“做什么”非功能约束限定“怎么用技术做”验收标准则直接决定了后续测试怎么画。AI在这种框架下生成的代码据我实测返工率比“无脑对话式”写作低大约60%以上。核心原因就是当AI明确知道验收标准时它会主动考虑异常分支而不是只写“快乐路径”。2. 工具链选型本地模型、API网关与Agent框架的搭配策略2.1 模型选型不是越强越好按任务分梯队很多团队以为“AI全栈开发”就是用最强模型写所有代码。但成本、速度、效果最优的组合从来不是“一个模型打天下”。我把常见的编码任务按梯队做了拆分任务类型推荐方案理由项目级代码生成多文件、跨模块Claude Sonnet 4 / GPT-4.1级别模型上下文理解能力强指令遵循度高代码补全、函数生成本地Qwen2.5-Coder-7B / DeepSeek-Coder速度快、私密性好、接入IDE后延迟体感为零解释代码、写单测性价比模型Flash系列任务标准化程度高不需要最强推理复杂重构、架构设计最强模型充分思考预算一次重构引发的问题远比你想象的多这个梯队背后是成本经济学。最强模型的API价格可能是入门模型的几十倍如果只用来补全函数那完全是拿牛刀杀鸡。反过来如果你让一个轻量模型去设计数据库表结构它可能给你整出冗余索引和类型混乱的外键关系。2.2 LiteLLM Proxy在团队协作里的价值提到工具链LiteLLM Proxy我推荐给所有“团队里不止一个人在写AI代码”的情况。它本质上是一个AI网关把各种模型提供商的API统一到一个接口背后。这意味着你代码里只需要配置一个Base URL不用关心底层是OpenAI还是Anthropic或本地模型。你可以在网关层统一设置速率限制、预算控制和缓存策略防止某个事件把月度Token预算半小时烧完。团队共享一套模型配置换模型不用改每台机器的环境变量。我团队的实际用法是代码里一律调用LiteLLM Proxy域名运维在网关层把gpt-4o路由到claude-sonnet-4前端代码一行没动全部完成模型切换。这种解耦能力在AI生态日新月异的当下省下的迁移成本很可观。2.3 Agent框架与代码仓库的集成思路再聊Agent框架。我尝试过LangChain、AutoGen、Crew AI也试过直接写一个几十行的ReAct循环。结论是在真实工程化场景里框架的Agent能力只占一半另一半取决于你怎么让Agent与代码仓库进行结构化交互。一个可用的配置至少需要代码仓库只读索引Agent能快速找到“哪个文件里定义了用户表”而不是逐文件翻。命令执行沙箱Agent可以运行测试和lint但必须通过容器隔离不能直接暴力改生产环境。变更记录Agent每次改动文件时自动生成diff挂到PR描述里让人类代码审查有据可依。这些能力用LangGraph或自己写一个有向图调度也能实现关键不在于框架多炫酷而在于Agent的每一步都留有审计痕迹。AI在工程团队里最忌讳的是“突然冒出来的改动”一旦出现问题你根本无法追溯。有了结构化交互和变更记录Agent才能从“实验玩具”变成“可以签发的同事”。3. AI Agent落地业务场景不只是聊天机器人3.1 让Agent跑起来的三个前提很多人一谈AI Agent第一反应就是“做个客服对话机器人”。这当然是一个方向但它完全没挖掘出Agent在软件研发链路里的潜力。按照我的实践经验要让Agent在业务系统里真正产生价值先要满足三个前提任务边界足够清晰Agent不是用来处理开放式问题的你得告诉它“输入是什么、输出是什么、允许调用什么工具”。反馈回路要短Agent每一步动作之后必须能拿到明确反馈文件是否生成成功、测试是否通过、检索结果是否存在否则它会在错误分支上一路狂奔。人类介入点要设计好Agent不需要全程自动化你可以在高风险动作比如合并请求、删除数据、修改数据库结构强制插入人工审批环节既发挥效率又控制风险。这三点是想清楚Agent落地场景的关键。如果一个问题连人类自己都没法定义清晰的验收标准那让Agent去做只会得到一堆看似勤快但毫无意义的动作。3.2 一个Agent自动修Bug的完整链路我最近在团队里搭了一个“Bug修复Agent”它的工作流如下1. 接收Bug报告形式错误堆栈 复现步骤 2. 检索代码仓库定位错误堆栈涉及的文件和函数 3. 复现Bug自动写一个最小复现脚本 4. 根据堆栈和上下文信息生成修复方案 5. 修改代码运行现有单元测试 新编写的回归测试 6. 生成修改说明文档提交PR并挂上“Bug修复”标签 7. 通知人类开发进行代码审查与合并这个Agent跑通之后最直接的收益是一部分“低级Bug”空指针、边界条件处理错误、类型不匹配的修复时间从平均40分钟降到了8分钟。而且因为它在改代码前先写复现脚本很多人类开发者容易忽略的隐性边界情况也被覆盖到了。不过这里有一个关键点Agent写出的修复代码不一定完美它可能选择了“最小改动”路径而不是“架构更优”路径。我的处理方式是在Agent提交PR之前用一个lint规则集和静态检查工具对diff做一轮预筛选不满足质量门槛的直接打回重写。这比让人类逐行审查代码更高效。3.3 元编程能力的边界关于Agent再深层聊一个话题元编程能力。所谓“元编程”就是Agent根据代码库的结构生成新的代码或改动已有代码的能力。这是AI Agent区别于普通按模板生成代码的地方——它需要先“理解”项目结构再输出具有依赖关系的多文件改动。但元编程能力在实践中有很明显的边界单模块内的元编程比如修改一个Service类、重构一个函数效果很好因为影响面清晰我们只需要检查单个文件的逻辑有没有被破坏。跨模块的元编程比如修改数据库表结构并把所有DAO层、Service层一起改掉效果开始打折扣因为Agent的上下文窗口很难同时准确理解所有依赖关系。跨服务的元编程比如改一个微服务的API同时调用另一个微服务目前基本不可靠那种需要全局拓扑感知的任务存量代码的“隐藏契约”太多。所以我现在的策略是允许Agent在单个服务内做跨文件的修改但对跨服务的变更一律要求“人类先画好接口契约Agent只负责实现”。这样既享受Agent的效率红利又不至于让它在体系复杂度面前“精神分裂”。4. 提示词工程AI全栈开发里的“需求文档编写术”4.1 为什么提示词质量直接决定代码质量做过AI全栈开发的朋友应该都感受到过同一段需求用不同提示词让AI写出来的代码风格和工程质量会有质的差别。这不是玄学背后是LLM的工作机制在起作用——它本质上是根据“你给出的指令 它的训练经验”来预测最合理的输出。如果你的提示词是“帮我写一个用户登录”AI会往“最大概率的输出”方向走传统用户名密码登录、Session/Cookie或JWT、标准数据库表设计。但如果你补充了“使用Argon2算法加密密码Session有效期24小时连续登录失败5次锁定账号10分钟”AI就会沿着这条更具体的路径生成代码。我常说给AI写提示词本质上是在写“技术需求规格书”。你不是在跟一个“智能体”闲聊而是在向一个“能力极强但不知业务背景的初级工程师”派活。你交代得越模糊它越倾向于用通用模板糊弄你。4.2 我固定使用的提示词框架长期实践以后我把AI编程提示词沉淀成了一套固定的框架配合1.3里的需求模板一起用【角色设定】 你是一名全栈开发工程师精通TypeScript、React、Node.js和数据库设计。你编写的代码要求类型安全、错误处理完整、具备可读性。 【任务描述】 粘贴结构化需求包括行为规格、非功能约束、验收标准 【输出要求】 1. 列出你需要创建/修改的文件清单按依赖顺序排列 2. 每个文件给出完整代码实现关键逻辑添加中文注释 3. 实现完成后给出用于验证的测试用例列表 4. 如果需求中有任何歧义先列出你的假设再基于假设开始编码 【禁止事项】 - 不要生成与需求无关的额外功能 - 不要使用未在“非功能约束”中列出的依赖 - 不要假设某些字段存在除非你能在代码库中找到依据这套提示词的价值在于它通过“输出要求”强制AI产出一个符合代码审查标准的结构化交付而不是一堆零散代码块。尤其是“先列假设再编码”这一句能显著降低AI在需求理解上“自作主张”的概率——当AI先列出假设时你可以一眼发现它在哪几个点上理解偏了纠正成本比事后review代码低得多。4.3 上下文管理的艺术在做大型项目时提示词的上下文管理比提示词本身更关键。LLM的上下文窗口虽然越来越大但把“所有代码”塞进一次对话里只会导致两个恶果一是噪音过多污染判断二是Token成本失控。我的上下文管理策略是“三层金字塔”项目级上下文README、ARCHITECTURE.md、代码规范文档。这些只在项目启动或架构调整时提供给AI概览即可。模块级上下文某个业务模块的数据库Schema、核心接口定义、模块内文件结构。这是AI在写“模块功能”时最需要关注的部分。任务级上下文与当前改动直接相关的代码片段、报错堆栈、测试输出。这是日常最常用的上下文来源。每一次让AI执行任务之前先问自己“它要完成这个任务最小必要的上下文是什么”把无关内容去掉AI的准确率会有肉眼可见的提升。另外我强烈推荐在项目里维护一个AGENTS.md文件里面写清楚项目结构说明、常用命令、代码风格偏好、不同任务的上下文获取方式。AI在每次工作之前先读这个文件相当于新人入职培训手册能帮你省下大量重复解释的时间。5. AI Infra的三个隐藏成本延迟、缓存和可观测性5.1 延迟不是玄学是工程指标做过AI应用的人都有一个体感同样的模型在官网聊天里快得像闪电接到你自己的应用里就变成了老牛拉车。这个差异的来源一半是官网的工程优化另一半是工程侧对延迟的拆解。一次完整的AI请求延迟包括网络传输时间客户端到API网关API网关到模型服务排队时间供应商在高负载期的排队预处理时间Prompt的Token化、缓存命中判断生成时间显存速度、模型大小、输出Token数决定后处理时间流式解析、过滤器、格式校验在我做的全栈项目里端到端延迟从8秒压到2.5秒靠的不是还更强的模型而是这几步优化流式输出首字延迟从3秒降到400毫秒用户感知提升最为明显。语义缓存针对解决相似问题通过向量相似度判定复用历史生成结果这部分命中率在答疑类场景能到30%左右。动态模型路由简单请求走小模型复杂请求走大模型。这个方法配合LiteLLM Proxy非常好落地直接在网关层配置即可。5.2 缓存层设计不只是“存个结果”提到AI应用缓存很多人的第一反应是“把整个模型的回复存下来”。这是一个严重误区。正确的缓存设计至少要分两层语义缓存面向“意图相似、答案可复用”的场景。用Embedding模型把用户请求向量化当请求向量与缓存库里的历史向量相似度超过阈值比如0.92时直接返回旧答案。适合百科问答、客服FAQ、常规代码解释等场景。工具结果缓存AI在执行任务时会调用工具比如查数据库、调API、读文件这些工具结果往往是重复的。做一个统一的工具结果缓存层能在不改变任何模型行为的情况下大幅降低Token消耗和外部系统压力。我在一个内部知识库Agent里加了这两层缓存之后API成本降了约55%而回答质量完全没变——因为大多数用户问的问题看似表述不同语义上其实高度相似。5.3 可观测性AI应用Debug的第一性原理AI应用与普通Web应用的Debug逻辑很不一样。普通应用出故障看日志、看堆栈基本能定位问题。AI应用出故障你面对的是一个“输入Prompt → 模型概率输出”的环节传统日志只能记录请求和响应却无法记录“模型为什么这么输出”。我的经验是AI应用的可观测性至少需要四个维度Token消耗追踪按用户、按会话、按功能模块拆分这是成本控制的基础。Prompt版本记录每次请求的Prompt最终长什么样、模板变量填了什么、命中哪个版本的模板必须完整留存。模型迁移对比同一个Prompt在不同模型上的响应质量、耗时时长、失败率对比这是“要不要升级模型”的决策依据。评估反馈闭环用户的点赞/点踩、改写了AI的哪些输出、是否被二次编辑这些数据最终要回流到评估集里。在技术选型上我目前使用的是Langfuse 自研埋点方案通过LiteLLM Proxy把调用链路上的数据自动上报。每次线上出问题我都能一键查看某个用户在某次会话里看到的完整Prompt和模型原始输出再结合“哪里被人工改写了”来做精准优化而不是两手一抹黑地猜。6. 全栈项目实战踩坑那些文档里不会告诉你的教训6.1 一个“AI生成的SQL性能灾难”案例真实经历。前阵子让AI做一个“用户行为分析报表”功能需求很简单统计用户最近30天活跃情况、按天分组、展示活跃趋势。AI生成的代码里SQL是这样写的SELECT DATE(created_at) AS day, COUNT(DISTINCT user_id) AS active_users FROM events WHERE created_at DATE(now, -30 days) GROUP BY DATE(created_at) ORDER BY day;单看逻辑没有毛病。但问题是events表当时已经有800万行数据而且created_at字段没有索引。这个查询一跑就是34秒直接把数据库CPU打满线上其他业务全部卡死。修复方式其实很常规给created_at建一个普通索引大多数查询都是按时间范围过滤。把大查询改成按天计算并缓存结果报表查询直接读缓存。确认是否真的需要COUNT(DISTINCT user_id)——如果业务上可以接受近似值用approx_distinct性能能提升数十倍。这个案例给我最大的教训是**AI生成代码时对数据量和执行环境的感知几乎等于零。**它把一个“看起来正确”的SQL丢给你但没想过这个SQL会跑在一个多大的数据量级上。所以所有AI生成的数据库操作代码我都有一条铁律必须附带执行计划和预估数据量先Review再上线。6.2 幻觉控制AI擅自“发明”不存在的API另一类高频踩坑是AI幻觉——它会在代码里使用不存在的库函数、不存在的参数名或完全虚构的API。尤其在引入一些比较小众的依赖时幻觉概率会显著上升。比如有次我让AI写一段使用某个内部UI组件库的代码。AI直接调用了一个组件属性我在官方文档里翻了半天都没找到。后来才意识到它是在“联想”其他组件库的写法拼凑出了一个看起来合理但实际不存在的API。针对这类问题我的解决方案是在提示词里强行约束“所有使用的库函数、组件属性名称必须能在项目已有代码或官方文档中找到出处不得臆造。”引入静态类型检查TypeScript和IDE的自动补全索引让编译期就能拦截绝大多数“虚构API”。建立“可信代码源清单”。把项目常用依赖的文档摘要做成一个检索库Agent写代码前先检索再基于检索结果编写而不是凭空生成。但即便做了这些AI幻觉问题依然不可能100%消除。因此代码审查环节依然不可省略——只是从“每行都看”变成“抽查编译拦截自动化测试”的组合拳把人工成本降下来质量又不打折扣。6.3 代码审查准入门槛我没时间看AI写的一千个文件最后聊一个管理层面的问题。很多团队引入AI开发后代码量暴增到原来的3到5倍Pull Request动不动就几百上千个文件的diff。这种体量下传统“逐行Review”模式完全失效。我现在的做法是给AI生成的代码定一套“准入门槛”达不到就直接打回不消耗人类审查时间门槛项具体要求类型检查TypeScriptstrict模式零错误Lint规则ESLint零errorwarning数不增加单元测试新功能必须配套至少2个测试用例且全部通过覆盖率新增代码行覆盖率不低于80%复杂度单函数圈复杂度不超过10文档非纯前端UI代码必须附修改说明这套准入门槛最大的价值是它把“人类审查AI代码”这一高成本动作变成了“机器预先筛选 人类只看疑点”的低成本动作。我Review一个AI提交的PR平均只需要看两个东西一是它绕过准入门槛的部分有哪些这些是重点核查对象二是核心业务逻辑的实现是否与需求规格一致。其他常规代码交给CI流水线去判断就行了。7. 从“能用”到“可靠”AI全栈开发的项目级SOP沉淀7.1 我目前固定运行的AI协作SOP经历了从Vibe Coding到Harness SDD的转变我沉淀了一套适合5到10人小团队参考的AI协作SOP阶段一需求拆解人类主导AI辅助 - 产品经理输出用户故事 - 技术负责人在AI辅助下拆解为行为规格、非功能约束、验收标准 - 输出结构化需求文档 阶段二技术方案人类AI协作 - AI根据需求文档生成候选技术方案包括数据模型、接口设计、模块划分 - 人类审查方案确认或修改 - 输出技术设计文档含数据模型、API契约、关键流程 阶段三代码生成AI主导人类把关 - Agent按技术设计文档逐模块实现 - 每完成一个模块自动运行类型检查、lint、单元测试 - 不通过则自动迭代修复 - 输出通过预检的PR 变更说明 阶段四代码审查人类主导AI辅助 - 人类Review Agent的PR重点看核心业务逻辑和边界处理 - 有疑问时让AI解释实现思路 - 输出包含人类确认的合并记录 阶段五测试与发布自动化为主 - 集成测试、灰度发布、监控告警 - 发布后自动记录线上Token消耗和错误日志 - 输出发布报告 线上运行指标这套SOP的核心思路是把人类放在“目标制定者”和“质量把关者”的位置上把AI放在“高效执行者”的位置上。人类的核心产出是“规格”AI的产出是“实现”最终人类验收的是“实现是否符合规格”。7.2 如何让团队其他人快速上手这套流程推进AI全栈开发常遇到团队成员的质疑“AI写的代码质量太差”“我还不如自己写”。这种声音认真讲很多源于“没有给AI足够的输入条件”就直接让它输出了。在自己写和AI写之间缺少“规格制定”这个中间层。我带新队友上手这套流程通常要求他们先完成三个练习把一个已上线模块拆成规格文档用行为规格、非功能约束、验收标准的格式重新描述已有功能。练习“如何把业务语言翻译成设计语言”。用规格文档驱动AI重写一个小模块把新旧代码做对比找出AI实现过程中“规格里没写但实际需要处理”的隐含需求。对AI产出的PR做一次完整的准入门槛Review感受“机器预筛 人类抽查”这套流程背后效率差异。做完这三个练习大部分人会对“AI全栈开发”有一个比较清醒的认知它不是魔法而是一种新的工程协作方式。AI的效率提升是真实的但前提是你有一套能约束住AI产出质量的工程体系。7.3 这套方法论适用于哪些项目最后说明一下适用边界。我个人体验下来适合Web应用、内部工具、API服务、数据报表、自动化脚本、中小型业务系统。这些场景的代码结构传统、文档资料丰富、AI训练数据覆盖充分效果最稳定。需要谨慎高并发低延迟系统、涉及复杂安全审计的系统、边缘计算资源受限场景、强一致性分布式事务场景。这些场景的核心难点在架构设计而非代码生成AI目前还撑不起“架构师”的角色。基本不适合性能瓶颈明显的底层组件、极度考验领域经验的老旧系统重构、物理硬件交互程序。这些需要深入理解硬件行为和遗留系统里的隐性约束人类的经验仍然不可替代。所以AI全栈开发最佳实践本质上是“把你最擅长的判断力与AI最擅长的执行力结合起来”。架构决策、规格制定、质量把关仍然需要你来完成而AI负责把那些重复的、机械的、文档齐全的编码工作以极高的速度完成掉然后你确保它没有跑偏。这个领域进化得很快今天觉得合理的方法论可能半年后就会被新的工具能力迭代掉。但“人类定规格、AI做实现、机器先自检、人工做抽查”这套底层逻辑大概率会持续相当长时间。我后来接手新项目无论用什么框架、什么模型都先按照这套逻辑把协作的边界划清楚再让AI开始干活。事实证明这正是从“AI花活”走向“AI工程化”最关键的一步。