1. 为什么你的 Antigravity 提示词总是「用完即弃」
如果你已经在用 Google Antigravity 写代码,大概率经历过这样的循环:打开对话框,敲一段精心组织的提示词,Agent 给出还不错的结果,关掉窗口,第二天遇到同类任务,又得从头把那段提示词重新拼一遍。拼的时候还经常漏掉几个关键约束,比如「用 Tailwind 而不是原生 CSS」「卡片要毛玻璃效果」「先给计划再动手」,结果输出质量忽高忽低。
这个问题的本质不是模型不行,而是你把「程序性知识」当成了「一次性对话」。Antigravity 的 Skills 特性就是来解决这件事的——它允许你把重复输入的提示词固化成 Agent 的「程序性记忆」,让 Agent 在特定任务场景下自动加载对应的标准作业程序(SOP)。
Skills 是什么、能做什么、适合谁:它是 Antigravity 项目内的一套目录约定,你在.agent/skills/下放 Markdown 文件,Agent 就会在合适的时机检索并学习其中的能力。它适合那些需要把重复性 AI 操作沉淀为可复用能力的开发者,尤其是前端页面生成、代码审查、文档撰写这类有固定套路的任务。相比 Rules 和 Workflow,Skills 的优势在于按需加载、模块化组织,不会把所有指令一股脑塞进上下文。
我试过把一套前端生成流程拆成「架构师」和「艺术家」两个角色文件,Agent 的输出稳定性和专业度明显上了一个台阶。下面把这套方法完整拆给你。
2. TaoToken 前置:给 Antigravity 配一个稳定的模型入口
Antigravity 本身是编辑器侧的 Agent 框架,它需要调用底层大模型来完成推理。如果你直接用官方默认通道,在国内网络环境下经常遇到超时、限流、响应中断的问题,Agent 的思考流跑到一半断了,Skills 加载得再完美也白搭。所以第一步是把模型入口配稳。
TaoToken 在这里扮演的角色是统一的模型接入层,它提供 OpenAI 兼容的 API 格式,Antigravity 里凡是需要填 Base URL 和 API Key 的地方,都可以指向它。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api ,注意 API 地址后面不加任何 UTM 参数,直接写这个就行。
你需要准备三样东西,我把它叫做「三件套」:
| 配置项 | 填写内容 | 说明 |
|---|---|---|
| Base URL | https://taotoken.net/api | 不要带末尾斜杠,不要加 UTM |
| API Key | 在控制台创建的 Key | 以sk-开头的一串字符 |
| Model ID | 例如claude-sonnet-4-20250514 | 按你订阅的模型填写 |
获取 Key 的路径是:先访问官网注册登录,然后进入控制台,在 API Keys 页面创建一个新的 Key。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API Keys 管理页是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。创建时建议给 Key 起一个能识别的名字,比如antigravity-dev,方便后续排查是哪个环境在用。
如果你用的是 Claude Code 这类命令行工具配合 Antigravity,配置方式略有不同,需要设置环境变量。Claude Code 的接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有完整的 Base URL 和 Key 配置说明。对于长期做编码和 Agent 任务的场景,可以考虑 Coding Plan,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,它针对高频编码调用做了额度优化。
配好之后先别急着写 Skills,用一次最简单的对话验证通道是否通。打开模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,发一句「你好,请回复当前模型名称」,能正常返回就说明 Key 和模型 ID 没问题。这一步很重要,因为后面 Skills 调试时如果出问题,你需要先排除是模型通道的问题还是 Skills 配置的问题。
3. 可复制配置:Skills 目录结构与 settings 片段
Skills 的核心在于目录约定。Antigravity 会在项目根目录下寻找.agent/skills/目录,每个子目录代表一个独立的 Skill,入口文件固定叫SKILL.md。Agent 在对话时会根据当前任务和打开的文件,自动判断是否加载某个 Skill。
先看目录结构,这是我实测下来最清晰的一种组织方式:
your-project/ ├── .agent/ │ └── skills/ │ └── frontend-composer/ │ ├── SKILL.md # 入口:协调任务与角色切换 │ ├── layout-architect.md # 架构师:HTML 结构与布局规范 │ └── style-artist.md # 艺术家:CSS 风格与视觉规范 ├── src/ └── package.json注意.agent目录是隐藏目录,在 macOS/Linux 下用ls -a才能看到,Windows 下需要在文件管理器里开启「显示隐藏文件」。创建命令如下:
mkdir -p .agent/skills/frontend-composer touch .agent/skills/frontend-composer/SKILL.md touch .agent/skills/frontend-composer/layout-architect.md touch .agent/skills/frontend-composer/style-artist.md接下来是三个文件的内容。SKILL.md是主入口,它不负责具体细节,只负责告诉 Agent「什么时候用哪个角色」:
--- name: frontend-composer description: 生成高质量前端页面,采用架构师+艺术家双角色协作 --- # Frontend Composer Skill 当用户要求创建或修改前端页面时,按以下流程执行: ## 执行原则 1. Planning First:先输出实施计划,等待用户确认后再写代码 2. 关注点分离:结构问题交给架构师,视觉问题交给艺术家 3. 不要一次性输出全部代码,分阶段交付 ## 角色调度 - Phase 1 结构分析:加载 `layout-architect.md`,设计 HTML 语义结构与响应式布局 - Phase 2 美学注入:加载 `style-artist.md`,应用视觉风格与设计规范 ## 技术栈约定 - 默认使用 Tailwind CSS - 组件粒度:每个可复用区块独立成组件 - 响应式断点:sm / md / lg / xllayout-architect.md定义结构规范:
# Layout Architect ## 职责 负责 HTML 语义化、组件划分、响应式布局。 ## 硬性要求 - 使用语义标签:header / nav / main / section / article / footer - 布局优先用 CSS Grid,局部用 Flex - 移动端优先,断点向上适配 - 表单元素必须有关联的 label ## 输出格式 先给出组件树,再给出每个组件的 HTML 骨架。style-artist.md定义视觉规范,这里以玻璃拟态为例:
# Style Artist ## 职责 负责视觉风格、配色、动效、设计细节。 ## 设计语言:Glassmorphism - 背景:紫色渐变,从 #667eea 到 #764ba2 - 卡片:backdrop-blur-md,背景 rgba(255,255,255,0.1) - 边框:1px solid rgba(255,255,255,0.2) - 圆角:rounded-2xl - 阴影:shadow-xl,带轻微彩色投影 ## 动效 - hover 时卡片上浮 2px,过渡 200ms - 按钮点击有 scale(0.98) 反馈如果你用的是支持 JSON 配置的工具链(比如某些 MCP 客户端或 Codex 的auth.json),可以把模型入口写成配置文件。Codex 的auth.json典型结构如下,路径通常在~/.codex/auth.json:
{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的Key", "model": "claude-sonnet-4-20250514" }Cline 的 MCP 配置则写在cline_mcp_settings.json里,Base URL、Key、Model ID 三件套一个都不能少:
{ "mcpServers": { "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的Key", "model": "claude-sonnet-4-20250514" } } }CC Switch 用户注意,切换配置时确认 Base URL 没有多余斜杠,Key 没有前后空格,Model ID 拼写和订阅列表完全一致。这三处是最高频的出错点。
4. 验证请求:观察 Agent 的思考流与 Artifacts
配置写完之后,必须验证 Skills 是否真的被加载。Antigravity 的一个好处是它会展示 Agent 的思考流(Thought Process),你可以直接看到它有没有读取你的 Skill 文件。
验证步骤我拆成四步:
第一步,在 Antigravity 中打开项目,确保.agent/skills/frontend-composer/SKILL.md这个文件处于打开状态。Agent 会优先感知当前打开的文件,这是触发 Skill 加载的一个信号。
第二步,在对话框输入指令,并且明确要求只做计划:
创建一个登录页,只输出工作计划,不要直接写代码。第三步,观察 Thought 日志。正常情况下你会看到类似这样的思考过程:
Agent Thought: 用户希望创建一个登录页。 当前打开的是 SKILL.md 文件,这是一个 frontend-composer 技能。 根据技能要求,我需要: 1. 先查看 SKILL.md 了解调度规则 2. 加载 layout-architect.md 设计结构 3. 加载 style-artist.md 应用视觉 4. 生成 implementation_plan.md 供用户审核如果 Thought 里完全没有提到 Skill 文件,说明加载失败,跳到第 5 节排查。
第四步,检查 Artifacts。Agent 应该生成一份实施计划,里面明确引用你的子技能文件。一份合格的计划长这样:
# Implementation Plan: 登录页 ## Phase 1: 结构分析 (The Architect) 基于 layout-architect.md: - 组件树:LoginPage > LoginCard > (Logo, Form, Footer) - 使用语义标签 form / label / input - 移动端优先,md 断点居中 ## Phase 2: 美学注入 (The Artist) 基于 style-artist.md: - 紫色渐变背景 #667eea → #764ba2 - 毛玻璃卡片 backdrop-blur-md - Tailwind CSS 实现看到这份计划,就说明 Skills 生效了。Agent 不仅读到了入口文件,还正确加载了两个子角色文件,并且遵守了「Planning First」的约束。接下来你确认计划,它才会进入编码阶段。
这里有个细节值得注意:计划里明确写了「紫色渐变背景 + 毛玻璃卡片」和「Tailwind CSS」,这说明 LLM 真的理解了style-artist.md里的设计规范,并把它转换成了可执行的代码约束,而不是随便糊一个默认样式。这就是 Skills 相比普通提示词的价值——规范被固化,每次输出都对齐同一套标准。
5. 本篇常见错排查:401、local proxy failed 与 OAuth 报错
Skills 配置过程中,报错基本集中在模型通道和文件加载两类。下面按真实报错逐个拆。
401 Unauthorized。这是最常见的,九成是 Key 的问题。先检查 Key 有没有复制完整,前后有没有空格。然后确认 Key 对应的账户额度是否正常,在控制台 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 可以看到每个 Key 的状态。如果 Key 没问题,检查 Base URL 是不是写成了https://taotoken.net/api/(多了末尾斜杠),有些客户端对斜杠敏感,去掉即可。
local proxy failed / connection refused。这个报错通常出现在你本地配了代理层的情况下。Antigravity 或命令行工具尝试连接本地代理端口失败。排查顺序:先确认 Base URL 直接指向https://taotoken.net/api,不要经过任何本地转发;再检查环境变量里有没有残留的HTTP_PROXY/HTTPS_PROXY,有的话临时清掉再试:
unset HTTP_PROXY unset HTTPS_PROXYreading choices 报错 / 返回体解析失败。典型表现是 Agent 收到响应但解析不出内容,日志里出现reading 'choices'或undefined is not an object。这多半是 Model ID 填错了,或者该模型不在你的订阅范围内。回到控制台核对模型列表,把 Model ID 改成完全一致的字符串。另外确认请求走的是 OpenAI 兼容格式,TaoToken 的/api端点支持这个格式。
OAuth 相关报错。如果你用的是 Claude Code 配合 Antigravity,可能会遇到 OAuth token 过期或回调失败。Claude Code 的接入方式不走 OAuth,而是走 API Key,参考文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 重新配置环境变量即可。如果之前登录过官方账号,先清理旧的凭证缓存再配 Key。
Skill 不加载。Thought 日志里完全没提 Skill 文件。检查三点:.agent/skills/目录名拼写是否正确(注意是.agent不是agent);SKILL.md文件名是否全大写;YAML frontmatter 的---是否闭合。还有一个容易忽略的点:确保你在对话时打开的是 Skill 目录下的文件,Agent 对当前打开文件的感知是触发加载的重要信号。
Skill 加载了但没遵守约束。Agent 读了文件但输出还是老样子。这通常是SKILL.md里的指令太模糊,比如只写了「生成好看的页面」而没有可执行的判断条件。把约束写成明确的动作,比如「先输出计划再写代码」「使用 Tailwind 的 backdrop-blur-md 类」,越具体越容易被遵守。
6. 把 Skills 用起来:从单次提示到可复用工作流
Skills 真正的价值不在于省几次打字,而在于它把你的工程经验变成了项目资产。一套调好的 Skill 可以跟着仓库走,团队里任何人拉下代码,Agent 的行为都是一致的。新同学不需要知道「我们团队的前端规范是什么」,Agent 会自动按 Skill 里的标准执行。
回到最开始那个「架构师 + 艺术家」的例子,这套结构可以继续扩展。比如加一个accessibility-auditor.md负责无障碍检查,加一个performance-optimizer.md负责打包体积和加载性能。每个文件只关心一件事,Agent 按阶段调度,上下文不会被无关信息污染。
如果你想把 Skills 和更长期的编码任务结合,可以考虑 Coding Plan,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,它适合那种需要 Agent 持续参与、反复迭代的项目。日常验证模型响应是否正常,用模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 就够了。接入配置的完整说明在文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,遇到通道问题先翻文档再排查。
最后给一个实用建议:每次调好一个 Skill,在SKILL.md顶部用注释记下版本和修改原因。比如<!-- v2: 增加 Planning First 约束,修复 Agent 直接写代码的问题 -->。这样几个月后回头看,你知道每个约束是为了解决什么坑,而不是对着一堆规则发懵。Skills 是活的,跟着项目一起演进才有意义。