Google 在其 AI 开发框架 Genkit 中支持 Agent Skills,让 AI 能「按需挂载技能包」

Anthropic 发起的技能开放标准,Google 四个语言版本全接入;两个能跑的 Go 例子手把手,接入只要一行参数
作者:Google Developers Blog08-04 · 8 分钟⚑ 方法教程
🎧 听播客版0:00 / --:--
0:00 / --:--
工具教程 · 小互解读
一分钟速览
  • AI Agent 的说明书越堆越多,全塞进上下文既烧 Token 又让模型分心。Google 给自家框架 Genkit 接上了 Agent Skills:说明书放磁盘上,用到哪份调哪份。
  • 这套技能标准是 Anthropic 发起的,Google 四个语言版本全接,接入只要一行参数。
  • 官方拿 2012 年被毁容的「猴子耶稣」原画当测试题,模型自己认出是油画、唤出对应修复技能。
⚑ 材料来自 Google 开发者博客讲自家框架 Genkit 的教程;两个示例的运行效果为原文展示,本站未独立复跑。
痛点

说明书全塞给 AI,塞不下也没必要

Google 开发者博客发布了一份极其实用的上手教程:自家开源 AI 应用框架 Genkit 正式支持 Agent Skills,由 Anthropic 发起、已经开放成行业标准的「AI 技能包」格式。简单来说,过去你得把所有操作手册塞进提示词,现在手册躺在磁盘上,用到哪份才加载哪份,接入只要一行参数。教程用 Go 语言给了两个能直接跑的例子:一个菜谱机器人,一个会自己挑修复方案的 AI 艺术修复师。

4 种语言
TypeScript / Go / Dart / Python 版本全部接入
3 个阶段
渐进披露:发现 → 激活 → 执行
1 行参数
ai.WithUse(...) 即完成接入

它要解决的问题每个做 Agent 的人都撞过:Agent 接的活越多,要给它的说明书就越多,操作规程、参考指南、各种文档。全部常驻在上下文窗口里,三个毛病一起来:Token 白烧(每次请求都把整摞文档再读一遍)、注意力被稀释(真正相关的那几行淹在几百页里)、答错的概率反而上升。就像一个员工每天上班先把公司全部规章制度从头背一遍,其实他今天只用得上其中一页。

以前:全塞进上下文 操作规程 参考指南 品牌手册 审核清单 数据字典 更多文档…(塞不下还在来) 每次请求都整摞带上 现在:按需加载 技能名片 留给正事 磁盘 技能正文躺这里 点名才进来
同一摞说明书,两种放法:常驻上下文 vs 名片常驻、正文躺磁盘(本站示意图)

Agent Skills 解决的就是这件事:把专业知识打包成一个个技能,平时躺在后台,被用到的那一刻才加载。如果你用过 Claude Code 的 Skills,这套东西会非常眼熟,格式就是同一个,Anthropic 把它开放成了标准(agentskills.io),Genkit 这次接的正是这套。站内之前拆过 Anthropic 官方拿技能搭验证循环的实战:

站内相关
Anthropic 官方教你把手动代码检查写成技能,让它自己查自己修
技能这个东西在 Claude Code 里怎么真刀真枪地用,这篇有完整拆解;今天这篇讲的是同一套格式跑进了 Google 的框架。
格式

一个技能就是一个文件夹

那么这个「按需加载」的技能长什么样?答案简单得出乎意料:一个技能就是一个文件夹,里面必须有一份 SKILL.md 文件。这份文件分两截,头部 frontmatter,用 --- 围起来的一小段元数据,写着技能叫什么、什么时候该用我;正文 body,真正的操作指令。文件夹里还可以放三类可选资源:scripts/(可执行脚本)、references/(参考文档)、assets/(模板素材)。

技能文件夹标准结构(照这个建目录)
skill-name/
├── SKILL.md          # Required: metadata + instructions
├── scripts/          # Optional: executable code
├── references/       # Optional: documentation
├── assets/           # Optional: templates, resources
└── ...               # Any additional files or directories
必需的只有 SKILL.md 一份;脚本、参考文档、模板素材都是可选的随身行李。
技能 = 一个文件夹 skill-name/ ├─ SKILL.md ├─ scripts/ ├─ references/ └─ assets/ ★ 必需 可执行脚本 参考文档 模板素材 SKILL.md 解剖 frontmatter · 名片 name:叫什么 description:什么时候用我 body · 操作指令 怎么干活的完整规程 可指向 references/ 与 scripts/ 常驻系统提示的,只有名片这一小截
SKILL.md 两截解剖:名片轻、正文重,轻的常驻、重的按需(本站示意图)

因为技能就是 Markdown 加普通文件,可以像代码一样用 Git 分发,一台额外的服务器都不用架。frontmatter 官方给了个范本,重点全在 description 上,它就是触发开关:

frontmatter 写法示例(description 是触发开关)
---
name: adr-template
description: Activate this skill when proposing significant architectural changes, documenting codebase refactorings, or resolving design/technical debates. Use this skill to author and maintain Architecture Decision Records (ADRs) to preserve engineering context.
license: Apache-2.0
metadata:
  author: example-org
  version: "1.0"
---
中文意思:提议重大架构变更、记录代码库重构、或要解决设计/技术争论时,激活本技能;用它撰写和维护架构决策记录(ADR),留住工程上下文。写得越具体,模型越知道什么时候该叫它。
机制

渐进披露:目录常驻,正文点名才进来

既然文件夹准备好了,模型怎么知道什么时候该用它?靠一套叫渐进披露(progressive disclosure)的机制,分三步:

  1. 发现(Discovery):启动时扫描技能目录,只把每个技能的名字和描述注入系统提示,相当于只给模型看目录页;
  2. 激活(Activation):任务对上了某个技能的描述,框架调 use_skill 工具,把那份 SKILL.md 的完整正文调进上下文;
  3. 执行(Execution):模型照着正文干活,需要时再去读 references、跑捆绑的脚本。
① 发现 cheese-bread · 名片 paintings · 名片 adr-template · 名片 只注入名字 + 描述 启动时:目录页常驻 ② 激活 SKILL.md 完整正文 use_skill 调进上下文 任务对上描述才发生 ③ 执行 references/ 按需读 scripts/ 按需跑 照规程干活 披露闭环完成 上下文占用 名片(常驻) 正文(激活时) 引用/脚本(按需)
渐进披露三阶段:上下文占用只在被点名时才往上走一格(本站示意图)

Token 账就是这么省下来的:常驻上下文的只有每个技能几十个字的名片,几百页细则躺在磁盘上,谁被点名谁进内存。这套设计的好处归成三条:

三大核心优势
极省 Token:没用到时只占极小的元信息空间,用到了才加载正文。
轻量易维护:纯 Markdown 文件管理,跟业务代码一起提交版本控制即可,无需搭建复杂的外部数据库或知识库架构。
自带工具箱:技能包里可以附带代码脚本,AI 遇到特定任务时可以直接调用这些确定性的工具。
渐进披露流程示意图
原文的渐进披露示意图:Token 消耗被推迟到真正需要的那一刻。图片来自 Google 开发者博客(Gemini 3.1 Flash Image 生成)
代码

接入只要一行参数,背后是中间件

既然机制懂了,落到代码上要写多少东西?一行。在 genkit.Generate 调用里加一个 ai.WithUse 参数、指到技能文件夹,接入就完成了:

Genkit Go 里启用技能的那一行(加进 genkit.Generate 调用)
resp, err := genkit.Generate(ctx, g,
    ai.WithPrompt("How do I run tests in this repo?"),
    ai.WithUse(&middleware.Skills{SkillPaths: []string{"./skills"}}),
)
SkillPaths 指向存技能文件夹的目录,框架自己去扫里面的 SKILL.md。

这一行背后是 Genkit 的中间件(middleware)体系,拦在你的代码和模型之间的一层,每次请求路过时,它可以加料、改道或记账,像快递分拣站。钩子有三类,各拦一环:WrapGenerate 拦每轮对话循环,管系统提示注入这类要看全对话的活;WrapModel 拦每次模型 API 调用,管重试、降级、缓存;WrapTool 拦每次工具执行。Skills 中间件搭在这套钩子上,干的就是三件事:扫描目录找 SKILL.md → 把名片注入系统提示 → 请求对上描述就激活。

Skills 中间件 注入技能名片、对上就激活 use_skill WrapGenerate · 拦每轮对话循环 系统提示注入、消息累积 WrapModel · 拦每次模型调用 重试 / 降级 / 缓存 WrapTool · 拦每次工具执行 并行工具各拦一次 一次请求,每一环都被拦一道
Genkit 中间件三类钩子各拦一环,Skills 中间件搭在钩子上完成注入与激活(本站示意图)
例一

例一:说 Cheese,唤出芝士面包技能

所以先跑一个最小的例子。官方第一个示例是个命令行菜谱工具:输入食材,输出菜谱。技能文件夹里放了两个技能,banana-bread(香蕉面包)和 cheese-bread(芝士面包)。跑 go run main.go cheese,模型对上 cheese-bread 的描述、激活技能,按技能里的配方在终端打出一份巴西芝士面包(Pão de Queijo)的完整菜谱:

$ go run main.go cheese · 终端输出(截选)
+-------------------------------------------------+
|         TRADITIONAL BRAZILIAN CHEESE BREAD      |
|                 (Pao de Queijo)                 |
+-------------------------------------------------+
INGREDIENTS
* Tapioca Flour (Sour Starch) .. 2 cups (240g)
* Grated Parmesan/Queijo ...... 1.5 cups (150g)
  ……
PRO TIP: You can freeze the unbaked dough balls
on a tray, then store them in a bag.
木薯粉打底、帕玛森奶酪 150 克,天然无麸质;小贴士说面团球可以冷冻,冻着直接烤 25 分钟。原文作者是巴西人,说凭直觉这配方是对的,但「风险自负」。

这个例子演示的就是最基本的一环:用户一句话对上技能描述,名片换正文,模型照配方干活。

例二

例二:AI 艺术修复,模型自己看图选技能

但最小例子只演示了匹配。第二个例子接近生产场景:多模态的 AI 艺术修复。喂一张受损艺术品的照片,模型先判断这是素描、油画还是照片,再激活对应的修复技能,drawings、paintings、photography 各有一套修复规程,最后由 Gemini 3.1 Flash Image(也就是 Nano Banana 2)生成修复后的图。技能挑选这一步不用写一行分支逻辑,全靠模型看图判断。

paintings 技能的 SKILL.md 写的就是专业修复师的行规:绝对忠实(严禁添加原作没有的元素)、反现代化(保留笔触、不磨平纹理)、尊重裂纹(craquelure 裂纹网是历史的一部分,不乱填);然后三步流程一笔画完:清漆校正 → 除污 → 补缺损。这份文件本身就是「把专业规程写成技能」的范本:

skills/paintings/SKILL.md 全文(专业规程写成技能的范本)
---
name: paintings
description: Restoration protocol for fine art paintings.
---

# Painting restoration

Perform direct, minimal-intervention restoration of fine art
paintings. Prioritize historical integrity, original pigment
depth, and surface textures over cosmetic modernization. Do not
include any elements, nor introduce any techniques not present
in the original piece.

### 1. Core conservation mandates
* **Absolute Fidelity:** Strictly forbidden to add new subjects,
  figures, scenery, details, or narrative elements under any
  circumstances.
* **Anti-Modernization:** Retain original brushstroke
  characteristics. Do not flatten support textures.
* **Patina & Craquelure:** Respect the natural crack network
  (craquelure) as part of the artwork's history. Do not fill or
  erase cracks unless they pose an active risk of paint loss.

### 2. Step-by-step restoration process
1. **Varnish Correction:** Gently balance aged, yellowed natural
   varnishes to recover original pigment chromaticity without
   forcing modern, high-contrast saturation.
2. **Soot & Grime Reduction:** Isolate and lift surface grime
   while protecting delicate, thin underlying glaze layers.
3. **Inpaint Major Loss:** Where paint layers are missing, use
   references from the surviving elements to bridge the gap.
   Replicate the original brush direction, speed, height,
   transparency, and light source.
中文对照:最小干预修复,历史完整性优先于「修得好看」。三条铁律,绝对忠实(任何情况下禁止加新元素)、反现代化(保留笔触和底材纹理)、尊重包浆与裂纹(裂纹网不构成掉漆风险就不填);三步流程,清漆校正(去黄不强拉饱和度)、除污(护住薄釉层)、补缺损(照存留部分的笔向、厚度、光源补)。

测试用图是个老熟人:西班牙画家 Elías García Martínez 的《Ecce Homo》。2012 年一位业余爱好者把教堂里的这幅画修成了「猴子耶稣」,全网爆红。教程喂给模型的是修复事故之前的原貌,模型正确认出这是一幅古典宗教油画,激活 paintings 技能,输出修复计划:先去掉发黄的清漆和污垢、恢复深红和肤色,再减少干扰性裂纹、保留紫袍的斑点纹理,最后给背景卷轴补上做旧的羊皮纸质感。

Ecce Homo 修复前原画
修复前:《Ecce Homo》原貌(公有领域,via Wikimedia Commons)
Ecce Homo 由 Gemini 修复后
修复后:Gemini 3.1 Flash Image 按 paintings 技能规程生成

这个修复技能还是早期尝试:大模型有随机性,同一张图可能要多跑几次才有好结果,规程本身也需要专业修复师来调优。两个示例的完整代码都开源在 GoogleCloudPlatform 的 devrel-demos 仓库里,链接在文末。

实践

写技能的四条经验

所以写自己的技能之前,把教程收尾附的四条经验照着核一遍:

✅ 写技能前的自查清单
一行接入参数、技能目录结构、frontmatter 范本、一份专业修复规程的 SKILL.md 全文,四份材料在上文原样可抄。
来源
Enable on-demand expertise with Agent Skills in Genkit GoDaniela Petruzalek · Google Developers Blog·原文链接·2026-07-31
本站说明
渐进披露示意图与《Ecce Homo》修复前后两图来自原文;其余四张图为本站画的示意图。「Agent Skills 由 Anthropic 发起、开放成标准」来自 agentskills.io 官网自述;示例运行效果为原文展示,本站未独立复跑。
↑ 正文结束
✓ 本篇全文免费开放

会员可复制、下载全文 Markdown,还能让你的 AI 订阅和提问。

阅读原文 ↗
📮 新解读第一时间进邮箱

读完觉得有用?留个邮箱,每篇新解读发布就送达,随时退订。