
1. Vue 3 项目里 AI 乱写代码的真实痛点Vue 3 前端开发中引入 AI 协作最让人头疼的不是模型能力不够而是它太爱自由发挥。你让它改一个用户列表组件它给你顺手把 Pinia store 重构成全局事件总线你让它加个表单校验它把script setup拆回 Options API还贴心地补上一堆this.$refs。团队里三个人用三种 AI 工具产出的代码风格能凑齐四套规范Code Review 时 reviewer 一半时间在纠正 AI 的即兴创作。这个问题的根源在于AI 工具默认不知道你项目的技术栈边界、目录约定、命名习惯和禁用写法。每次对话都要重复交代一遍我们用 Composition API、用 pnpm、用 Axios 拦截器既费 token 又容易漏。AGENTS.md 就是解决这件事的——它是一份放在仓库根目录的约定文件被主流 AI 编码工具Claude Code、Cursor、Cline、Codex 等自动读取相当于给 AI 发了一份项目宪法。我试过在一个 40 多个页面的 Vue 3 中后台项目里落地这套组合AGENTS.md 管规范TaoToken 管通道。前者让 AI 的输出稳定可预期后者让团队所有 AI 工具走同一个 Key 和 API 入口不用每人配一套环境变量、不用在多个平台之间切换账号。下面把可复制的模板、配置片段和验证步骤完整拆开讲你可以直接拿去改。适合谁看正在用或准备用 AI 辅助 Vue 3 开发的前端、需要统一团队 AI 协作规范的技术负责人、以及被 AI 生成代码风格漂移折磨过的同学。核心检索词就三个Vue 3、AGENTS.md、AI 协作规范全文围绕它们展开。2. AGENTS.md 在 Vue 3 项目中的编写与落地AGENTS.md 不是给人类看的文档它的读者是 AI。所以写法上要命令式、可判定、少歧义避免尽量建议这类软约束。下面这份模板基于 Vue 3 Vite TypeScript Pinia 的典型组合你可以按项目实际情况删改。2.1 项目概览与目录结构约定开头先把技术栈钉死让 AI 没有发挥空间# AGENTS.md — Vue 3 Frontend Development ## 1. Project Overview - Framework: Vue 3 (Composition API only) - Build Tool: Vite - Language: TypeScript (strict mode) - State: Pinia - Router: Vue Router (history mode) - HTTP: Axios (with interceptors) - UI: Element Plus - Test: Vitest Vue Test Utils - Lint: ESLint Prettier - Package Manager: pnpm ## 2. Directory Structure src/ ├── assets/ # 静态资源与全局样式 ├── components/ # 可复用展示型组件 │ └── common/ # 极通用组件按钮、输入框 ├── composables/ # useXxx 组合式函数 ├── layouts/ # 布局组件 ├── pages/ # 路由级页面组件 ├── router/ # 路由配置与模块 ├── stores/ # Pinia store按领域拆分 ├── types/ # TS 类型定义 ├── utils/ # 纯工具函数 ├── services/ # API 服务模块 ├── plugins/ # Vue 插件 ├── App.vue └── main.ts目录结构写清楚的价值在于AI 新建文件时会自动放到正确位置而不是把useAuth.ts塞进components/。这一点在多人协作里特别明显reviewer 不用再手动挪文件。2.2 编码规范与组件写法约束规范部分要具体到能一眼判断对错。比如缩进、引号、文件名这些写死了 AI 就不会飘## 3. Coding Standards - 所有 .vue/.ts/.js 文件使用 TypeScript - 使用 ES modulesimport/export - 2 空格缩进单引号多行对象/数组加尾逗号 - 文件名统一 kebab-caseuser-profile.vue、use-auth.ts - 组件名在 JS/TS 中 PascalCase模板中 kebab-case ## 3.1 Vue Components - 必须使用 script setup Composition API - defineProps / defineEmits 必须带 TS 类型 - 组件保持单一职责超过 300 行必须拆分 - 样式使用 style scoped禁止全局样式污染 - script setup 内部顺序 Props Emits → 响应式状态 → computed → watch → 生命周期 → 方法 → defineExpose这里有个细节值得强调把script setup内部的书写顺序写进 AGENTS.mdAI 生成的组件结构会高度一致diff 也更好读。下面给一个符合规范的组件示例可以直接作为模板script setup langts // Props const props defineProps{ userId: string }() // Emits const emit defineEmits{ (e: update, id: string): void }() // Reactive const user refUser | null(null) // Computed const displayName computed(() user.value?.name ?? Anonymous) // Lifecycle onMounted(async () { user.value await fetchUser(props.userId) }) // Methods async function fetchUser(id: string): PromiseUser { const { data } await userService.getProfile(id) return data } /script template div classuser-card{{ displayName }}/div /template style scoped .user-card { padding: 12px; } /style2.3 Pinia、路由与 API 层规范状态管理和 API 层是 AI 最容易创新的地方必须写死模式## 4. State Management (Pinia) - 优先使用 Setup Store 模式 - store 命名useXxxStore如 useUserStore - 异步操作和复杂变更写在 actions 中 - 派生状态用 getters禁止在组件里重复计算 - 批量更新用 store.$patch ## 5. Routing - 路由定义在 router/index.ts全部懒加载() import(...) - 鉴权/权限用 beforeEach 守卫 - 优先使用命名路由禁止硬编码路径 - 页面组件通过 defineProps 接收路由参数 ## 6. API Communication - 所有 HTTP 调用集中在 services/ 模块 - Axios 拦截器统一处理注入 token、全局错误、开发环境日志 - 请求/响应类型定义在 types/ 中API 服务模块的写法也给一个标准样例AI 照着写就不会把请求散落在组件里// services/userService.ts import api from ./api import type { User } from /types/user export const userService { async getProfile(id: string): PromiseUser { const { data } await api.get(/users/${id}) return data }, }2.4 AI 专属指令段落这是 AGENTS.md 里最关键的一段直接告诉 AI生成代码时怎么做## 12. AI-Specific Instructions 生成或修改代码时必须 - 始终包含 TypeScript 类型 - 默认使用 script setup Composition API除非明确要求 - 优先函数式组合禁止 class 组件 - 组件控制在 300 行以内超出则重构 - 复杂逻辑添加 JSDoc 注释 - import 分组外部库在前内部模块在后 - 新增依赖前确认与 Vue 3 兼容 - 严禁自由发挥严格遵守以上全部规范把严禁自由发挥放在最后再强调一次实测下来对减少 AI 的即兴改动有明显作用。整份 AGENTS.md 建议控制在 200 行以内太长会稀释重点AI 反而抓不住关键约束。3. TaoToken 统一 Key 与 API 通道配置规范有了接下来解决通道问题。团队里每个人用不同 AI 工具如果各自去申请 Key、各自配 Base URL管理成本很高。TaoToken 提供统一的 API 入口所有工具指向同一个地址、用同一个 Key切换工具时不用重新配置。3.1 获取 Key 与 Base URL先到控制台创建 API Key地址是 https://taotoken.net/api-keys 。创建后复制 Key格式类似sk-开头的一串字符。Base URL 统一使用https://taotoken.net/api注意这个地址不带任何查询参数直接作为各工具的 API Base 填入即可。模型 ID 按你实际使用的填比如claude-sonnet-4-5、gpt-4o这类具体以控制台模型列表为准。3.2 Claude Code 的 settings.json 配置Claude Code 读取~/.claude/settings.json把 Base URL 和 Key 写进去{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的Key, ANTHROPIC_MODEL: claude-sonnet-4-5 } }三件套齐全Base URL、Key、Model ID。少任何一个都可能报认证失败或模型不存在。配置完重启 Claude Code 生效。3.3 Cline / Cursor 类工具的配置Cline 在 VS Code 设置里选择 OpenAI Compatible 或 Anthropic 提供商然后填{ apiProvider: openai, openAiBaseUrl: https://taotoken.net/api, openAiApiKey: sk-你的Key, openAiModelId: claude-sonnet-4-5 }Cursor 则在 Settings → Models 里填入自定义 Base URL 和 Key模型名手动输入。核心还是那三件套只是字段名不同。3.4 Codex 的 auth.json 配置Codex 使用~/.codex/auth.json结构如下{ OPENAI_API_KEY: sk-你的Key, OPENAI_BASE_URL: https://taotoken.net/api }配合~/.codex/config.toml指定模型model claude-sonnet-4-5 provider openai这样 Codex 的请求也会走 TaoToken 通道。团队统一配置后新同学入职只需要拿到一个 Key五分钟就能把 AI 工具跑起来不用逐个平台注册。4. 验证请求与成功结果确认配置写完必须验证否则你不知道是 Key 错了、地址错了还是模型名错了。最直接的方式是用 curl 发一个最小请求curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-你的Key \ -d { model: claude-sonnet-4-5, messages: [{role: user, content: 回复 OK 两个字母}], max_tokens: 16 }成功时返回 JSONchoices[0].message.content里能看到模型回复。如果返回 401说明 Key 无效或没带上返回 404多半是 Base URL 写错检查是否漏了/v1或多了斜杠。在 Claude Code 里验证更简单直接问一句读一下项目根目录的 AGENTS.md总结三条最重要的约束。如果它能准确说出你写的规范说明通道和文件读取都正常。这一步同时验证了两件事API 通不通、AGENTS.md 有没有被正确加载。再做一个端到端验证让 AI 新建一个components/common/base-button.vue观察它是否自动用了script setup、是否放在正确目录、命名是否 kebab-case。如果全部符合说明 AGENTS.md 生效了。我实测下来配好之后 AI 生成组件的规范符合率从原来的六成提升到九成以上剩下的偏差基本是复杂业务逻辑判断不是风格问题。5. 常见报错排查对照配置过程中最容易撞上几类报错逐个对照处理。401 Unauthorized / invalid api keyKey 没填对或者环境变量没生效。检查settings.json里的ANTHROPIC_AUTH_TOKEN是否完整复制有没有多余空格。Claude Code 里可以用echo $ANTHROPIC_AUTH_TOKEN确认环境变量是否注入。local proxy failed / connection refused工具在尝试连本地代理端口。检查是否残留了旧的代理配置把 Base URL 直接指向https://taotoken.net/api不要经过任何中间层。reading choices of undefined响应结构不符合预期通常是 Base URL 少了/v1或模型名不存在。先用 curl 确认接口返回正常再检查工具里的模型 ID 拼写。OAuth / authentication failed某些工具默认走 OAuth 登录流程需要手动切换到 API Key 模式。在设置里找到认证方式选项改成 API Key 并填入。模型不存在 / model not foundModel ID 写错。到控制台模型列表核对准确名称注意大小写和版本号后缀。排查顺序建议先 curl 验证通道 → 再验证工具配置 → 最后验证 AGENTS.md 是否被读取。分层定位比盲目改配置快得多。6. 把规范与通道固化进团队流程AGENTS.md 和 TaoToken 配置都落地后建议把这两件事固化进团队流程。AGENTS.md 提交到仓库根目录跟着代码走新分支自动继承TaoToken 的 Key 通过团队内部渠道分发不要硬编码进仓库。CI 里可以加一步 lint 检查确保 AI 生成的代码符合 ESLint 规则把规范从约定变成强制。需要长期跑编码 Agent、批量重构或做多轮对话开发的团队可以了解 Coding Plan按用量规划更划算https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。只是想先验证模型对话效果用模型对话页面快速试https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。最后分享一个实用技巧AGENTS.md 不要一次写完美先写核心约束跑一周观察 AI 哪些地方还在乱来针对性地补规则。规范是迭代出来的不是设计出来的。