当前位置: 首页 > news >正文

腾讯二面被问:如何设计 Skill 来降低 Token 消耗?一套分层设计讲透这个问题

腾讯二面被问:如何设计 Skill 来降低 Token 消耗?一套分层设计讲透这个问题

前段时间有位粉丝面试腾讯大模型应用开发岗位,前面 RAG 链路、Agent 编排、Prompt 工程都答得很漂亮。最后面试官随口追问了一个问题:“你平时写 Skill,怎么控制 Token 消耗的?”

他想了一会儿,回答:“用渐进式加载,按需加载内容。”

面试官点点头,又问:“就这一个策略?还有呢?”

他愣住了。渐进式加载是他唯一能想到的答案,但面试官显然觉得不够。面完回来复盘才发现——Skill 的 Token 管理是一整套分层设计体系,不只是"按需加载"一句话能概括的。

01 善用三层加载结构:渐进披露的核心机制

Skill 这个系统,它其实有一个天然的机制,就是所谓的**“渐进披露”(Progressive Disclosure)**机制。什么意思呢?就是说它不是一股脑把所有东西都丢出来,而是分层来加载的。

我们可以把它理解成三层结构:

层级具体内容什么时候去进行加载
元数据就是 name 加 description 这些东西一直在上下文里面待着的,大概是 100 词左右的样子
SKILL.md 正文也就是核心的那些指令内容等到 skill 被触发的时候才会去进行加载操作
捆绑资源比如说参考文件啊、脚本啊这些按需去读取就行了,不会自动加到上下文里面去

这里有个比较关键的地方:你要把那些只有在特定情况下才需要用到的内容,给它拆到 references 这个文件夹里面去。

不要把所有东西都一股脑塞进 SKILL.md 的正文里面,那样的话就太臃肿了嘛。


为什么这个机制很重要?

想象一下,如果你把一个完整的 Skill 比作一本工具书:

  • 元数据就像是书脊上的标签——它始终在那里,告诉你这本书是干什么的
  • 正文就像是目录和核心章节——只有当你真正需要用到这本书时,才会翻开它
  • 参考文件就像是附录和参考资料——只有在你需要查阅具体细节时,才会翻到那一页

面试官当时追问"还有呢",其实就是在等这个——你不能只知道"按需加载"这一个点,你得知道哪些东西是永远在上下文里的,哪些是触发才加载的,哪些是用到才读的。

三层搞清楚了,Token 消耗自然就可控了。


02 控制 SKILL.md 正文长度:500 行的红线

这个的话呢,目标就是把它控制在500 行以内,大概就这么个范围。

如果说超过了怎么办呢?那就在正文里面写清楚,告诉它"什么时候去读哪个参考文件",而不是把那些内容都内联进来。这样子的话,正文就不会显得太长了。

举个例子来说吧,大概就是这样的一个结构:

# Cloud Deployment Skill 当用户需要部署云服务时触发。 ## 核心流程 1. 确认部署目标平台 2. 根据平台读取对应的参考文件 3. 执行部署脚本 ## 参考文件 - AWS 部署:读取 references/aws.md - GCP 部署:读取 references/gcp.md - Azure 部署:读取 references/azure.md

500 行这个数字不是随便定的

你想想看,Skill 被触发的时候,整个正文是要加载进上下文的。如果正文动不动就上千行,那每次触发的 Token 成本就很高了。

面试官问"还有呢"的时候,控制正文长度就是第二层答案。


03 按照场景分割参考文件:避免"全家桶"陷阱

如果你的技能是那种多域的,就是说它支持好几个框架或者平台的话,那就应该按照变体来拆分文件。这样的话,Claude 就只需要去读取相关的那一份就行了,而不是把全部内容都给加载进来。

cloud-deploy/references/ ├── aws.md ├── gcp.md └── azure.md

在 SKILL.md 里面写上判断逻辑,大概就是说"根据用户选择的平台,只去读取对应的参考文件"这么一个意思。


这个点其实很容易被忽略

很多人写 Skill 的时候,把所有平台的文档都堆在一起,想着"反正用到哪个读哪个"。但问题是,如果你不拆开,Claude 可能把所有内容都读进去了——这不就浪费了嘛。

正确的做法是:

  • 每个平台一份独立的参考文件
  • 在正文中明确说明什么时候读哪个文件
  • 让模型在需要时才加载特定的参考文件

04 用脚本替代大段说明文字:执行的效率

对于那些确定性的、重复性的操作,比如说格式转换啊、文件处理啊这些,你直接提供一个可执行的脚本,比在 SKILL.md 里面去写那些长篇的指令要省 token 得多。

为什么呢?因为脚本这东西它可以直接执行,而不需要把内容加载进上下文里面。这样一来的话,你就不用把"如何操作"的那些详细步骤写成文字了,直接变成"执行这个脚本"一句话就搞定了,多省事啊。


对比一下两种方式:

方式Token 消耗适用场景
文字描述操作步骤高(每次都要加载到上下文)需要解释原理的场景
脚本执行低(只需一行引用指令)确定性、重复性操作

实践建议:

  • 文件格式转换、批量处理等操作,直接提供脚本文件
  • 在 SKILL.md 中只需要写"执行 references/convert.sh"这样一句话
  • 模型会直接调用脚本,而不是把整个操作步骤加载到上下文中

05 Description 精简但精准:永远在上下文的代价

Description 这个东西它是始终在上下文里面的,所以说你要做到以下几点:

首先呢,只去描述"什么时候触发"和"做什么"就行了,不要去写那些实现的细节。其次呢,避免那些冗余的举例,举个两三个触发词就足够了。


反面案例

把整个工作流程都写进 description 里面去,那样的话就太啰嗦了。

# 错误的 descriptiondescription:"这个技能可以帮助用户部署云服务,首先会询问用户想要部署到哪个平台,然后根据平台选择对应的配置模板,接着..."

正面案例

用一段话把触发场景和功能给说清楚就行了。

# 正确的 descriptiondescription:"当用户需要部署云服务到 AWS/GCP/Azure 时触发。提供多平台部署指南和自动化脚本。"

这个是最容易犯的错误

description 是永远在上下文里的,你多写一句话,每次对话就多消耗一点 Token。很多人没意识到这一点,把 description 当成 README 来写,结果每次对话都在为那些根本用不上的信息付费。

精简原则:

  • 只说明触发条件(什么时候用)
  • 只说明核心功能(做什么)
  • 避免实现细节(怎么做)
  • 避免冗长举例(最多 2-3 个触发词)

06 总结:Token 优化的分层设计体系

其实说白了就是一句话:不需要的时候不要去加载,加载的时候只加载够用的就行了。

你可以把这个 skill 想象成是一种"懒加载"的机制:

层级特点Token 成本
元数据永远在上下文里,但很便宜低(~100 词)
正文按需加载,触发时才付费中(控制 500 行内)
资源文件用到时才读取低(按需)

按照这样子去设计的话,那些高频触发的 skill 对 token 的消耗基本上就没有什么太大的影响了,嗯,就是这么个道理。


五层答案全解

所以到现在你应该知道,答案不是一个点,是一套分层设计:

  1. 三层结构:元数据 → 正文 → 资源文件,搞懂什么时候加载什么
  2. 500 行上限:控制正文长度,超出部分拆到参考文件
  3. 按场景区分文件:多域技能按平台/框架拆分,避免全家桶
  4. 用脚本替代文字:确定性操作直接用脚本执行,省上下文加载
  5. Description 精简:永远在上下文的内容必须精简到极致

这五件事做好了,Token 消耗自然就降下来了。


觉得有用?点个在看再走吧 👍

转发给正在做大模型应用开发的技术朋友,一起聊聊!

http://www.jsqmd.com/news/1002754/

相关文章:

  • C++版OpenCV圆盘靶标相机标定工具(兼容对称与非对称布局)
  • NLP 命名实体识别:从序列标注到 Span 检测,信息抽取的工程实践
  • StreamFX实战指南:如何用专业级OBS插件解决直播视觉痛点
  • 计算机Java毕设实战-基于 SpringBoot + 数据可视化的小区物业综合管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • MATLAB中一键调参的LIBSVM 3.1完整集成包(含编译脚本、示例数据与多语言支持)
  • 高寒风沙环境下风电箱变长效稳定运行实战
  • 从PL语言出发,我重新理解了Flex词法分析器的‘贪婪匹配’与规则优先级
  • 智慧树自动刷课插件:3分钟快速部署的终极学习助手
  • 在上海挑ECO棉床垫,我跑了几家店后总算心里有数了 - 深圳市民HLL
  • 2026年6月成都机麻短租热门公司联系方式与选型指南 - 品牌鉴赏官2026
  • Krita AI Diffusion插件:Cinematic Photo (XL)服务器执行错误的深度解析与三步修复方案
  • 51单片机矩阵键盘密码锁实战:从硬件连接到Keil代码调试,手把手教你避开蜂鸣器干扰
  • 用PyQt5给YOLOv5/YOLOv8做个桌面GUI:从模型训练到一键检测的完整流程
  • RH850 Mcal代码生成踩坑实录:我是如何绕开官方GHS脚本,用自制Makefile跑通的
  • 农光互补项目箱变测控系统落地实战指南
  • i茅台多账号自动预约工具源码(含全国门店库+傻瓜式部署指南)
  • 【2027最新】基于SpringBoot+Vue的Web宠物商城网站管理系统源码+MyBatis+MySQL
  • 2026年成都混动变速箱维修公司评价解析:技术授权与工程经验谁更扎实? - 优质品牌商家
  • 告别OpenSSH:在轻量级Linux系统上用Dropbear配置SSH密钥登录的保姆级教程
  • 煤矿通风机房双电源无扰动快切改造实战指南
  • 2026甄选:福州化粪池清理/清掏化粪池/疏通化粪池/玻璃钢化粪池清理服务:专业团队与高效口碑的全景推荐 - 品牌发掘
  • ROS Noetic下,手把手教你为URDF机器人模型添加深度摄像头(Gazebo仿真)
  • 2026 HR 新趋势:AI 加速人力资源战略转型
  • 2026年6月诚信供暖设备定做厂家选择标准:为何SSTEF-意法成为行业标杆? - 品牌鉴赏官2026
  • 2026年北京刑事辩护律师怎么挑?5个关键判断标准防踩雷 - 本地品牌推荐
  • 手机租赁业务全局代理 PAC 配置实战指南
  • 告别手写体识别烦恼:用PyTorch复现CRNN,从论文到代码的保姆级实践
  • 实现高级RAG(Advanced RAG)--RetrievalAugmentor--LangChain4j
  • 深入Tina Linux:如何为你的IoT设备定制可写的根文件系统(OverlayFS vs UBIFS)
  • Stata面板数据回归前必做:6种单位根检验保姆级实操指南(附完整代码与结果解读)