1. 从"AI要抢饭碗"的焦虑说起:前端工作流的真实变化
去年这个时候,我所在的团队接了一个后台管理系统的重构项目,工期给了六周。按照以前的节奏,光是权限模块的增删改查页面、表单校验、接口联调这几块,就能吃掉将近三周时间。结果这次我们用了不到两周就把主体功能跑通了,剩下的时间全花在了交互细节打磨和边界场景测试上。项目复盘的时候,组里一个做了八年前端的老哥说了句话我印象特别深:"AI没让我少写代码,它让我少写了很多我不想写的代码。"
这句话基本概括了我对"AI编程"这件事的全部态度。市面上关于AI取代程序员的讨论已经太多了,但真正在一线写业务的人会发现,变化根本不是"岗位消失"这么粗暴的逻辑,而是工作流的重心发生了迁移。以前前端工程师的时间分配大概是:30%写重复的模板代码,30%调接口和排查数据问题,20%处理样式兼容,20%才是真正的业务逻辑和架构设计。现在前两个30%正在被AI Agent快速吃掉,人的精力被挤压到了后面那些真正需要判断力的环节上。
这篇内容我想聊的不是"AI有多强"这种空泛的话题,而是一个前端开发者如何把AI编程工具真正嵌进自己的日常工作流里,让它变成像Git、像Webpack一样自然的存在。我会从工具选型、提示词设计、Agent协作模式、代码审查机制、以及实际踩过的坑这几个角度展开,适合已经有一定前端基础、想提升交付效率的开发者,也适合刚入行想建立正确工作习惯的新人。核心观点就一句:AI不是来取代你的,它是来重构你每天怎么干活的。
2. 工具选型:别被"最强AI编程软件"的营销话术带偏
2.1 先搞清楚你需要的是补全、对话还是Agent
很多人一上来就问"哪个AI编程软件最好用",这个问题本身就问错了。AI编程工具大致分三类,解决的问题完全不同:
| 类型 | 典型能力 | 适合场景 | 交互方式 |
|---|---|---|---|
| 代码补全型 | 根据上下文续写代码、补全函数 | 写重复逻辑、记忆API签名 | 编辑器内实时提示 |
| 对话辅助型 | 解释代码、生成片段、答疑 | 学习新框架、排查报错 | 侧边栏聊天窗口 |
| Agent执行型 | 自主读写文件、运行命令、多步任务 | 批量重构、搭建脚手架、跨文件修改 | 任务式指令 |
我自己的配置是三者都用,但分工明确。补全型工具负责"手速",对话型负责"脑速",Agent型负责"体力活"。比如我要写一个基于Vue3的表格组件,补全工具帮我把columns配置和slot模板快速铺出来;遇到一个响应式丢失的诡异bug,对话工具帮我快速定位是reactive和ref的嵌套问题;而要把整个项目的Options API迁移到Composition API,这种跨几十个文件的活,就交给Agent去跑。
提示:不要指望一个工具包打天下。补全强的工具往往Agent能力弱,Agent强的工具补全体验可能一般。组合使用比死磕单一工具效率高得多。
2.2 本地模型和云端服务的取舍逻辑
选型时绕不开的一个问题是:用云端服务还是本地部署。我的判断标准很简单,看三个维度:
- 代码敏感度:如果项目涉及核心业务逻辑或私有算法,优先考虑本地模型或支持私有化部署的方案。这不是技术问题,是合规问题。
- 任务复杂度:简单的补全和问答,本地小模型完全够用;复杂的多步Agent任务,云端大模型的理解能力和工具调用能力明显更强。
- 网络稳定性:Agent类任务需要频繁的模型调用,网络抖动会直接导致任务中断。如果所在环境网络条件一般,本地部署的确定性更高。
我目前的方案是混合模式:日常补全和简单问答走本地,复杂的重构和架构设计任务走云端。这样既保证了核心代码不出本地,又能在关键任务上享受大模型的能力。
2.3 那些被忽略的"非AI"配套工具
聊AI编程工具的时候,很多人忽略了一个事实:AI生成的代码要真正落地,依赖的是一整套工程化配套。没有好的Lint规则,AI生成的代码风格会五花八门;没有完善的测试覆盖,你根本不敢让Agent直接改生产代码;没有清晰的Git工作流,AI批量修改后的回滚会变成灾难。
所以我在引入AI工具之前,先做了三件事:把ESLint和Prettier的规则收紧到最严,给核心模块补上了单元测试,把Git的提交粒度切得更细。这三件事做完之后,AI生成的代码才真正变得"可用"而不是"能跑就行"。这个顺序很重要,先有工程规范,再有AI提效,反过来会一团糟。
3. 提示词设计:前端场景下的"说人话"工程
3.1 为什么你的提示词总是得不到想要的代码
我见过太多人这样用AI:打开对话框,输入"帮我写一个登录页面",然后抱怨生成的代码不能用。问题不在AI,在于这个指令本身信息量几乎为零。登录页面用什么框架?什么UI库?表单校验规则是什么?错误提示怎么展示?登录成功后的跳转逻辑是什么?这些信息你不说,AI只能靠猜,猜出来的东西自然离你的预期十万八千里。
前端开发有一个特点:同一个需求有无数种实现路径。一个模态框,你可以用原生dialog标签,可以用组件库的Modal,可以自己写div加定位,可以用Teleport挂载到body。AI不知道你的项目约定,它只能选一个"最常见"的方案,而这个方案大概率不符合你的项目规范。
3.2 一个可复用的前端提示词结构
经过大量实践,我总结出一个前端场景下比较通用的提示词结构,分五层:
- 技术栈声明:明确框架、版本、UI库、状态管理方案、构建工具。比如"Vue 3.4 + TypeScript 5.3 + Element Plus 2.5 + Pinia + Vite 5"。
- 上下文注入:把相关的类型定义、工具函数、API接口签名贴进去。AI看不到你的项目文件,你得主动喂给它。
- 需求描述:用"输入-处理-输出"的结构描述功能。输入是什么,经过什么处理,输出什么结果。
- 约束条件:代码风格、命名规范、错误处理方式、性能要求、兼容性要求。
- 输出格式:要求AI按什么结构输出,是完整文件、代码片段、还是带注释的diff。
举个例子,同样是"写一个表格",用这个结构写出来的提示词是这样的:
技术栈:Vue 3.4 + TypeScript + Element Plus 2.5 上下文:已有类型定义 User { id: number; name: string; email: string; status: 0 | 1 } 需求:实现一个用户列表表格,支持分页(每页10条)、按姓名搜索、按状态筛选。 数据从 /api/users 获取,返回格式 { list: User[]; total: number }。 约束:使用 Composition API + <script setup>,请求用项目已有的 request 工具, 错误用 ElMessage 提示,加载状态用 v-loading 指令。 输出:完整的 .vue 文件,包含 template、script、style 三部分。这样写出来的提示词,AI生成的代码基本能直接用,最多改改接口路径和字段名。提示词的质量,直接决定了你是在"用AI"还是在"被AI用"。
3.3 把项目规范"喂"给AI的几种方式
每次都在提示词里重复项目规范太累了,我试过几种更高效的方式:
- 项目级配置文件:很多AI编程工具支持在项目根目录放一个配置文件(类似
.cursorrules或AGENTS.md),里面写清楚项目的技术栈、代码规范、目录结构、常用命令。工具会自动读取这个文件作为上下文。 - 代码片段库:把项目里写得最规范的几个文件作为"范例",在提示词里引用。AI会模仿这些范例的风格。
- 类型定义文件:把
types目录下的类型定义文件整体提供给AI,它就能理解你的数据结构,生成的代码类型准确率大幅提升。
我现在的做法是在项目根目录维护一个AI_CONTEXT.md,里面记录了技术栈版本、目录约定、命名规范、常用工具函数列表、以及几个典型组件的写法示例。每次开新对话,先让AI读这个文件,后面就不用反复交代背景了。这个习惯至少帮我省了30%的提示词编写时间。
4. Agent协作模式:从"问答"到"派活"的思维转变
4.1 什么任务适合交给Agent,什么任务必须自己来
Agent和对话式AI最大的区别在于:Agent能自主执行多步操作,读写文件、运行命令、甚至提交代码。但这也意味着一旦方向错了,破坏力是成倍的。所以任务分配要有明确的边界。
我自己的划分标准是这样的:
适合交给Agent的任务:
- 批量重命名、批量替换、批量格式化
- 跨文件的API迁移(比如把所有
axios调用换成项目封装的request) - 根据现有代码模式生成新的相似模块(比如照着已有的CRUD页面生成新的)
- 补充单元测试、补充类型定义、补充注释
- 依赖升级后的兼容性修改
必须自己来的任务:
- 核心业务逻辑的设计和实现
- 涉及数据安全、权限校验的代码
- 性能关键路径的优化
- 架构层面的决策
- 任何你无法快速验证正确性的改动
这个边界不是绝对的,但原则是:Agent负责"确定性高、可验证、可回滚"的活,人负责"需要判断、影响面大、难以自动化验证"的活。
4.2 给Agent下任务的正确姿势
给Agent派活和给同事派活其实很像,核心是三点:目标清晰、边界明确、验收标准可执行。
我一般会这样组织Agent任务:
任务:将 src/views 下所有页面的 Options API 迁移为 Composition API 范围:仅限 src/views 目录,不要动 src/components 和 src/utils 约束: - 保持现有功能不变,不要顺手"优化"逻辑 - 使用 <script setup> 语法 - 生命周期钩子用对应的组合式函数替换 - 迁移完每个文件后运行 eslint 检查 验收:所有文件通过 eslint,且 npm run build 成功这里的关键是**"不要顺手优化"**这条约束。Agent很容易"自作主张",看到一段它认为写得不好的代码就顺手改了,结果引入新bug。明确告诉它"只做迁移,不做优化",能避免大量意外。
4.3 Agent执行过程中的监控与干预
Agent跑长任务的时候,不能完全放手不管。我的做法是分阶段验收:
- 第一阶段:让Agent先处理1-2个文件,检查结果是否符合预期。确认没问题再让它批量处理。
- 第二阶段:批量处理过程中,定期查看Git diff,发现方向偏了立即中断。
- 第三阶段:全部处理完后,跑完整的测试套件和构建流程,确认没有破坏性改动。
有一次我让Agent批量替换日期格式化函数,它处理到第15个文件的时候,把一个用于后端传参的timestamp也顺手格式化了,导致接口报错。幸好我中途看了一眼diff,及时回滚了那个文件。Agent的效率是人的好几倍,但它的"常识"也是需要你把关的。
5. 代码审查:AI生成代码的"质检"流程
5.1 AI代码最容易出问题的几个地方
用了大半年AI编程工具,我总结出AI生成代码的高频问题清单:
| 问题类型 | 具体表现 | 危险等级 |
|---|---|---|
| 幻觉API | 调用不存在的方法或参数 | 高 |
| 边界遗漏 | 空数组、null、undefined未处理 | 高 |
| 异步陷阱 | 忘记await、竞态条件未处理 | 高 |
| 性能隐患 | 循环内请求、未防抖、大数组未虚拟化 | 中 |
| 风格不一致 | 命名、目录结构不符合项目规范 | 低 |
| 过度设计 | 简单需求用了复杂模式 | 中 |
其中幻觉API是最坑的,因为代码能跑通编译,但运行时才报错。我遇到过一次,AI生成了一个Array.prototype.groupBy的调用,但那个方法在当时的运行环境里还不支持,本地开发没问题,上线后直接白屏。
5.2 建立自己的AI代码审查清单
针对这些问题,我整理了一份审查清单,每次AI生成代码后逐条过一遍:
- API真实性:所有调用的方法、属性、参数,是否在文档或类型定义中存在?
- 空值处理:所有可能为空的变量,是否有兜底逻辑?
- 异步正确性:所有Promise是否有await或catch?并发请求是否有竞态处理?
- 性能边界:是否有循环内请求?是否有未节流的频繁触发?大数据量是否有分页或虚拟滚动?
- 错误处理:网络错误、接口错误、超时,是否都有用户可见的提示?
- 安全校验:用户输入是否做了校验?敏感操作是否有权限判断?
- 风格一致:命名、目录、导入顺序是否符合项目规范?
这份清单看起来繁琐,但过一遍也就几分钟,比上线后排查问题划算得多。AI帮你省下的时间,不能全部拿去摸鱼,得留一部分给审查。
5.3 用测试用例给AI代码上保险
最可靠的审查方式还是自动化测试。我现在的要求是:AI生成的任何涉及业务逻辑的代码,必须配套单元测试。而且测试用例我自己写,不让AI写。原因很简单,AI写的测试往往会"迎合"它自己写的实现,测试通过不代表逻辑正确。
自己写测试的好处是,你会被迫想清楚每个函数的输入输出边界,这个过程本身就能发现AI代码里的问题。有一次AI生成了一个金额格式化的工具函数,我写测试的时候发现它对负数和小数的处理有问题,如果直接上线,财务模块的数据展示就全乱了。
6. 工作流重构:把AI嵌进日常开发的每个环节
6.1 需求分析阶段:用AI做技术方案预研
很多人以为AI只在写代码阶段有用,其实需求分析阶段就能用上。接到一个新需求,我会先让AI帮我做几件事:
- 列出这个需求可能涉及的技术点
- 对比几种实现方案的优劣
- 预估每种方案的开发工作量和风险点
比如要做"图片上传+裁剪+压缩"的功能,AI会告诉我可以用cropperjs做裁剪、用browser-image-compression做压缩、用FileReader做预览,还会提醒我注意大文件的内存占用和移动端的兼容性。这些信息我自己也能查到,但AI能在几分钟内整理好,省去了大量搜索时间。
6.2 编码阶段:补全、生成、重构三管齐下
编码阶段是AI介入最深的环节。我的实际工作流是这样的:
- 写新组件:先用对话式AI生成骨架,然后自己填充业务逻辑,补全工具负责细节。
- 写工具函数:直接让AI生成,自己审查边界条件。
- 重构旧代码:交给Agent批量处理,自己负责验收。
- 排查bug:把报错信息和相关代码贴给AI,让它分析可能原因,自己验证。
这个流程跑顺之后,我的编码速度大概提升了40%左右。但更重要的是,重复性的、机械性的工作被大幅压缩,我有更多时间思考架构和业务。
6.3 联调与测试阶段:AI当"第一响应人"
联调阶段最烦的是接口报错排查。以前要一个个看请求参数、看响应结构、看控制台报错。现在我会先把报错信息、请求参数、响应数据一起丢给AI,让它先分析一遍。大部分常见问题(字段名不对、类型不匹配、跨域配置、token过期)AI都能快速定位,我只需要验证它的判断。
测试阶段,AI可以帮我生成测试用例的骨架,我补充具体的断言逻辑。对于边界条件的测试,AI的"穷举思维"比人强,它会想到很多我容易忽略的场景,比如空字符串、超长文本、特殊字符、并发操作等。
6.4 代码提交与文档:AI做"格式化"工作
提交代码前,我会让AI帮我做两件事:生成符合规范的commit message,以及更新相关的文档。commit message用约定式提交格式,AI能根据diff内容自动生成feat、fix、refactor等前缀和描述。文档方面,AI能根据代码变更自动更新API文档和README,保持文档和代码同步。
这些活看起来小,但积少成多,每天能省下不少时间。而且AI做的格式化工整度比人高,团队协作时看着舒服。
7. 踩坑实录:那些AI编程教我的事
7.1 过度依赖AI导致的"能力退化"
这是我最想提醒的一点。用了几个月AI之后,我发现自己对某些API的记忆变模糊了,因为以前是查文档记住的,现在是AI直接给。有一次在没有AI辅助的环境下写代码,我居然想不起来Array.from的第二个参数是干嘛的。
这不是AI的错,是我的使用方式有问题。后来我调整了策略:AI生成的代码,我会刻意去读一遍,理解它的实现思路,而不是直接复制粘贴。遇到不熟悉的API,我会让AI解释一下再继续。把AI当成"老师"而不是"代笔",能力才不会退化。
7.2 Agent"自作主张"引发的生产事故
前面提过Agent顺手改代码的问题,这里再展开说一个更严重的案例。有一次我让Agent优化一个列表渲染的性能,它把v-for的:key从index改成了item.id,这本身是对的。但它同时还把列表的排序逻辑改了,从"按创建时间倒序"改成了"按id倒序",理由是"id更稳定"。结果上线后用户发现列表顺序全乱了,因为id是自增的,和创建时间不一定一致。
这个事故的教训是:Agent的"优化"必须经过人工确认,尤其是涉及业务逻辑的改动。现在我给Agent下任务时,会明确加上"不要修改任何业务逻辑,只做指定的改动"。
7.3 提示词里的"隐形假设"陷阱
有一次我让AI写一个"日期选择器",它默认用了dayjs库。但我的项目里用的是date-fns,而且已经全局配置了中文语言包。AI不知道这些,生成的代码引入了一个新依赖,还导致语言包冲突。
问题出在我的提示词里没有声明"项目已有哪些依赖"。从那以后,我在提示词里会加一条:"项目已安装的依赖有:xxx、yyy、zzz,请优先使用这些依赖,不要引入新依赖。"这条简单的声明,避免了很多依赖冲突问题。
7.4 上下文超长导致的"失忆"
处理大型项目时,AI的上下文窗口很容易被撑爆。有一次我让AI分析一个跨多个文件的bug,贴了太多代码进去,结果它把前面贴的内容忘了,给出的分析驴唇不对马嘴。
解决办法是分而治之:把大问题拆成小问题,每次只给AI必要的上下文。或者用支持项目索引的工具,让它自己去检索相关文件,而不是手动贴一大堆代码。上下文管理是AI编程里一个容易被忽视但非常重要的技能。
8. 团队协作:当AI成为团队"新成员"
8.1 统一团队的AI使用规范
个人用AI和团队用AI是两回事。团队里如果每个人用AI的方式不一样,代码风格会迅速失控。我们团队的做法是制定了一份"AI协作规范",内容包括:
- 统一使用的AI工具和版本
- 项目级AI配置文件的维护责任
- AI生成代码的审查流程
- 哪些代码禁止用AI生成(如权限校验、支付逻辑)
- commit message中是否需要标注AI参与
这份规范不是限制,而是保证协作效率。有了它,大家用AI生成的代码风格基本一致,review的时候省心很多。
8.2 Code Review中如何对待AI代码
团队review AI生成的代码时,我们的原则是一视同仁,甚至更严。因为AI代码往往"看起来没问题",容易让人放松警惕。review时会特别关注前面提到的幻觉API、边界处理、异步正确性这几个点。
另外,我们要求提交AI代码时,在PR描述里说明哪些部分是AI生成的、用了什么提示词、做了哪些人工修改。这样review的人能更有针对性地审查,也方便后续追溯问题。
8.3 知识沉淀:把好的提示词变成团队资产
好的提示词是团队资产。我们建了一个共享文档,收集各种场景下的高效提示词模板:生成CRUD页面的、写单元测试的、做代码重构的、排查特定类型bug的。新同事入职时,直接参考这些模板,上手速度比从零摸索快得多。
这个文档还在持续更新,每次有人发现特别好用的提示词,就贡献进去。半年下来积累了上百条,覆盖了前端开发的大部分场景。AI工具会更新换代,但提示词背后的工程思维是通用的。
9. 我个人的一些实际体会
聊了这么多方法和流程,最后说点更个人化的感受。
AI编程这件事,最大的价值不是"快",而是"改变了我和代码的关系"。以前我大量的时间花在"怎么实现"上,现在更多时间花在"要实现什么"和"实现得对不对"上。这个转变让我更像一个工程师,而不是一个代码工人。
但我也必须承认,AI带来的效率提升是有天花板的。它能帮你快速写出"能跑"的代码,但"跑得好不好""跑得对不对""跑得久不久",还是得靠人。前端开发里那些真正难的部分——复杂交互的状态管理、性能瓶颈的定位、架构的可扩展性、用户体验的细节打磨——AI目前还替代不了。
所以我的结论是:AI不会取代前端程序员,但会用AI的前端程序员,会取代不会用的。这个取代不是岗位层面的,是效率层面的。同样一个需求,别人两天做完,你半天做完,差距就出来了。
如果你现在还没开始把AI嵌进工作流,我的建议是从最小的场景开始:先让它帮你写单元测试,或者帮你解释一段看不懂的代码。等你习惯了它的存在,再逐步扩展到更复杂的任务。不要一上来就让它重构整个项目,那样大概率会翻车。
工具在变,工作流在变,但有一件事没变:对代码质量的追求,对业务的理解,对用户的责任心。这些是AI给不了的,也是我们作为开发者真正的护城河。