为了让智能体足够聪明,我们习惯把各种大包往系统提示词(System Prompt)里塞:业务合规清单、安全审查步骤、天气查询逻辑、数据校验规则……结果就是,用户连一句“你好”都还没说,你的智能体就已经在后台疯狂烧掉了几千个 Token。
过去整个行业的解法简单粗暴:把上下文窗口做大,再做大。但到了 2026 年,当智能体需要同时跨越几十个专业领域处理极其复杂的长任务时,这种全量堆砌的操作让企业和开发者发现,Token 成本高到了肉疼的底层逻辑。
就在今年年初,技术生态发生了一次极其优雅的进化。
Google 的开源智能体框架
Google ADK(Agent Development Kit) 宣布全面拥抱
SkillToolset(技能工具集)原生架构。这个架构不再寄希望于无限扩容的上下文,而是走了一条全新的路子——
按需异步加载专业知识。这就好比一个医生在看病时,不是把整本医学百科全书死记硬背在脑子里,而是在遇到特定病例时,精准地去翻阅某一个章节。
在聊高能的“技能(Skills)”架构前,先帮还没跟上的同学同步一下底座背景。
Google ADK 是 Google 推出的一套用于构建由 Gemini 模型驱动的开源智能体框架。它原生支持 Python、Java、Go 和 TypeScript。它在底层帮你把模型编排、工具挂载、长短期记忆流以及多智能体协同(Multi-agent Orchestration)全部封装好了。
如果把大模型比作发动机,那 ADK 就是 AI 时代开箱即用的“工业级底盘”——它的核心目标就是让你直接跳过造轮子的阶段,写几行干净的抽象代码就能把智能体推向生产环境。
在 ADK 的世界里,有几个最核心的积木块:
智能体(Agent):核心大脑,由其名称、专属提示词指令、所用模型和绑定的工具决定。
会话(Session):持久化的对话记忆体,存储长期的交互历史。
执行器(Runner):调度引擎,负责拆解用户的输入并编排响应。
工具(Tools):可以被智能体随时召唤的方法,比如自定义函数、MCP 服务器,以及我们今天要重点拆解的 技能工具集。
假设你要做一个全能的医疗助手智能体,它需要处理化验单、出院小结、处方药开具和放射科胶片。每一个细分领域都有自己庞大的专业词汇表、指标正常范围和输出模板。
如果采用传统做法把这些全灌进 Prompt,那每一次对话都是一场资金灾难。
ADK 引入的技能机制采用了一种三层渐进式暴露(Progressive Disclosure)的精妙架构,把知识管理做到了像素级的精细度。
这是技能的“名片”,极其轻量,通常只有 100 字节左右。智能体在长期的会话中会
时刻挂载这段名片。它通常写在
SKILL.md 文件的 YAML frontmatter 里:
---name: weather-skilldescription: 一个专门根据参考数据提供天气信息的技能。---
智能体常驻这段名片没有任何负担。只有当用户的提问匹配到这个描述时,智能体才会决定激活它。
一旦触发匹配,执行器会异步调用
load_skill(),把该技能完整的执行步骤加载进来。这一层是纯粹的“操作说明书”,通常控制在几千个 Token 以内。
例如:
步骤 1:去阅读
references/weather_info.md 获取当前天气。
步骤 2:如果用户追问湿度,运行脚本
scripts/get_humidity.py。
步骤 3:将整理好的数据规范化输出。
这是最重的数据资产层,包含了行业术语表、本地分析脚本、大体量的模板等。 只有当前面的具体指令走到某一步、确实需要某些资源时,系统才会精准地把这个资源加载进来。
如果用户只是问了一句“今天旧金山气温多少度”,那么第二步的
get_humidity.py 脚本永远不会被读取,相关的 Token 消耗直接归零。
每一次交互,你都只为真正运行到的高价值数据埋单。
在实际工程落地中,ADK 提供了四种截然不同的代码实现模式:
最快、最轻量的做法。直接在 Python 代码里硬编码定义技能。极适合做快速的方案验证。
from google.adk.skills import models
greeting_skill = models.Skill(
frontmatter=models.Frontmatter(
name="greeting-skill",
description="一个亲切的问候技能。",
),
instructions="步骤 1: 读取 'references/hello.txt'。步骤 2: 输出问候。",
resources=models.Resources(
references={ "hello.txt": "嗨!很高兴今天能在这里帮到你!",
},
),
)这是真正用于生产环境的工程化标配。技能拥有独立的文件夹目录,将操作指令与领域知识彻底解耦,极大地方便了团队在 Git 里进行版本管理。 哔嘀影视
标准的目录骨架如下:
skills/weather-skill/ ├── SKILL.md # 存放第一层名片与第二层具体指令 ├── references/ │ └── weather_info.md # 存放第三层静态参考数据 └── scripts/ └── get_humidity.py # 存放第三层可执行脚本
在主程序里一行代码就能优雅拉起:
from google.adk.skills import load_skill_from_dirimport pathlib weather_skill = load_skill_from_dir( pathlib.Path(__file__).parent / "skills" / "weather-skill")
这也是整个架构最野心勃勃的地方。该技术严格遵循
agentskills.io 的开源开放标准。这意味着,你在 ADK 里封装出来的一个极其硬核的“容器安全审计技能”,不需要做任何重构,可以直接无缝挂载到 Claude Code、Cursor 或者各类支持该标准的第三方智能体工具里。技能正在变成智能体时代的
npm 安装包。
这属于高阶玩家的黑魔法。你可以专门打造一个“技能孵化器”智能体。在漫长的自动化长任务中,如果它发现现有的工具无法解决眼前的新环境,它会自主在后台编写、调试出一份全新的
SKILL.md 和配套脚本,实现技能的自我繁衍。不过官方建议,对于这种自主生成的代码级技能,合入生产主线前最好引入人类 Review 机制(Human-in-the-loop)。
纸上谈兵终觉浅,我们直接手敲一个最直观的天气按需加载智能体。
先装好最新的核心包并配好你的 Gemini API Key:
pip install google-adk
按照前面提到的文件流模式,在
skills/weather-skill/SKILL.md 里写入内容:
--- name: weather-skilldescription: 一个根据静态档案与动态脚本提供特定地区天气与湿度分析的技能。 ---Step 1: 查阅 'references/weather_info.md' 获取当前核心天气档案。 Step 2: 如果用户明确指明需要查询湿度,运行 'scripts/get_humidity.py' 传入 `location` 参数。 Step 3: 聚合上述信息,用富有亲和力的博客口吻回复用户。
在
skills/weather-skill/references/weather_info.md 里放上你的深度资源:
# 气象参考档案- 观测城市: 旧金山 (San Francisco, CA)- 天气状态: 晴朗- 实时气温: 72°F (22°C)
在
skills/weather-skill/scripts/get_humidity.py 里丢一个模拟业务查询的脚本:
import argparsedef main():
parser = argparse.ArgumentParser()
parser.add_argument("--location", type=str, default="San Francisco")
args = parser.parse_args() # 模拟高价值的业务查询或三方接口联动
print(f"【后台动态脚本响应】当前城市 {args.location} 的实时湿度为 45%(模拟数据)")if __name__ == "__main__":
main()在你的入口文件
agent.py 里,把技能和智能体大脑组装起来:
import pathlibfrom google.adk import Agentfrom google.adk.skills import load_skill_from_dirfrom google.adk.tools.skill_toolset import SkillToolsetfrom google.adk.code_executors.unsafe_local_code_executor import UnsafeLocalCodeExecutor# 1. 优雅地从文件夹异步加载技能weather_dir = pathlib.Path(__file__).parent / "skills" / "weather-skill"weather_skill = load_skill_from_dir(weather_dir)# 2. 打造专属技能工具箱(本地测试环境使用 UnsafeLocalCodeExecutor 来跑三层脚本)# 注意:线上生产环境为了防止恶意代码注入,强烈建议使用沙箱环境的沙箱执行器my_skill_toolset = SkillToolset( skills=[weather_skill], code_executor=UnsafeLocalCodeExecutor() )# 3. 实例化你的智能体,选用高性能的闪电模型root_agent = Agent( model="gemini-2.5-flash", name="skill_explorer_agent", description="一个具备精细化技能按需加载能力的聪明智能体。", tools=[my_skill_toolset] )
你可以在控制台直接拉起
adk web 的可视化交互界面,或者直接写个 Runner 跑测试。
测试对话一:“帮我看一下今天旧金山的天气怎么样?”
后台高光时刻:大模型扫了一眼常驻的元数据,认出了
weather-skill。于是激活并读入第二层操作指南。走到第一步时,它去把
weather_info.md 读了进来,并立刻礼貌地回复了你气温。
此时,湿度的脚本静静地躺在硬盘里,没有任何人为了加载它而消费哪怕一个 Token。
测试对话二:“那那边的湿度是多少呢?”
后台高光时刻:因为会话上下文依然保持在当前技能中,大模型精准踩中第二步指令。它立刻通知执行器跑后台的 Python 脚本,拿到返回的
45% 并丢回给你。
星星影院
智能体在不需要知晓全貌的前提下,靠着完美的断点衔接,走一步看一步地完成了全部复杂任务。
目前市面上最火的智能体技术栈,除了 Google ADK,自然少不了 OpenAI 的 Agent SDK。我们不吹不黑,从架构的底层逻辑来看看它们各自的核心取向:
知识控制策略:OpenAI 更加依赖强大底座模型的常识涌现以及传统的函数调用(Function Calling);而 Google ADK 的
SkillToolset 是一套彻头彻尾的
渐进式认知管理系统,哪怕未来你给一个智能体挂上 200 个领域的专业技能,它依然能保持极其轻盈的启动态势。
模型兼容取向:OpenAI 深度锁死在自家的 GPT 系列生态中;而 Google ADK 由于完全贯彻了开源社区的
agentskills.io 开放协议,它的技能组件具备极强的跨平台通用属性。
生态成熟度:平心而论,OpenAI 目前在开发者生态社区的广度、上手文档的细腻度以及生产级配套工具链(如状态监控看板)上,依旧保有非常明显的身位优势。
如果你目前的研发团队已经深度绑定了 OpenAI 的技术栈,仅仅为了用上 Skills 而强行把底座大洗牌,其带来的迁移摩擦成本可能并不划算。
但如果你正准备从零切入复杂的多领域智能体,或者你的项目在未来规模化扩张时面临着极为严苛的 Token 预算红线,那么 Google ADK 的这套三层按需调用架构,绝对是你在工程设计上最值得借鉴的白月光。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/284444/viewspace-3172686/ ,如需转载,请注明出处,否则将追究法律责任。