不懂就问,cc是怎么把skill给到大模型的
- 内容介绍
- 文章标签
- 相关推荐
比如提问一个问题,cc是把所有的skill生成摘要,都给大模型的,还是说先在本地进行向量检索,挑选出符合的skill,再给到大模型的,还有openclaw也支持skill,是怎么做的呢
网友解答:--【壹】--:
我直接抓取了会话,你可以查看一下/让AI给你分析一下~
skill-调用.zip (30.3 KB)
--【贰】--:
system prompt里面注入每个skill的name+description(这样用的token不是很多)。LLM自己判断需不需要加载某个skill,需要加载的话就把这个skill的详细文档注入到上下文中。
--【叁】--:
image1358×1058 116 KB
其实就是把skill名字+描述放到第一个user message里面了 没什么神奇的地方
--【肆】--:
内置了一个工具叫做skill,这个工具的描述中会展示启用的所有skill的名称和描述。
当模型觉得需要调用某一个skill时候,会调用这个skill工具,工具会固定回复文本xxx skill已经加载,然后再以role=user身份发送skill的详细指导
用户视角只会看到命令行闪过加载了xxx skill
--【伍】--:
所有skill的名称以及描述都会发送,元信息应该还包含其他的?例如是否fork模式之类的
--【陆】--:
智能体没有检索这样的功能,智能体只是作为用户与模型沟通的桥梁,可能Gemini说的先进行检索是智能体先把你的输入加上skill目录加上其他提示词发给模型,模型分辨需不需要用到其中的skill,然后发请求给智能体进行加载
--【柒】--:
类似于先把所有的skill名+功能描述放入上下文中
由LLM来判断处理这个任务是否需要调用skill,如果需要cc再把对应skill.md的内容给到LLM
好像不涉及本地的向量检索,纯通过这种类似于菜单的形式让LLM点菜
--【捌】--:
确实容易爆,skills一多就占很多,模型会受到影响,所以skills不能装太多。以前的mcp是把全文放进上下文里,那个时候如果装了很多mcp,模型直接跟你爆了(bushi),skill的出现就是体现“按需加载”的思想
--【玖】--:
去看一下cc的源码不就懂了吗 会把关于skill的提示词写到提示词里面
--【拾】--:
确实是这样,但实际应用中应该不会真的安装这么多skill吧(
--【拾壹】--:
文本变化,不会重新注入,前几个版本测试过,只有目录name发生变化时,才会重新注入,完整注入所有的skill info
--【拾贰】--:
对claude code来说是直接加载的,但是也可以做到按需加载或者分配subagents之类的
--【拾叁】--:
也就是所有skill的名称以及元信息都会发给模型?
--【拾肆】--:
我问gemini,说会进行检索,得到相关的skill才会给大模型,就是不知道他为什么这么说,说的对不对
--【拾伍】--:
那这样来看, skill还是适当安装, 装多了还是会挤占context空间
--【拾陆】--:
也就是说,1000个skill,就会把1000个skill名+描述放到上下文,1万个就放1万这样的?那如果skill特别多,岂不是会爆token
--【拾柒】--: Amashiro:
第一个messages的某个消息块
是在名叫Skill的function tool的描述里
image1246×892 23.7 KB
--【拾捌】--:
cc的做法是在第一个messages的某个消息块里面注入类似文本串
The following skills are available for use with the Skill tool:
- {skill.name_1}: {skill.description_1}
- {skill.name_2}: {skill.description_2}
这样cc就全局知道有哪些skill了,并可以通过skill工具去实现渐进式披露。
然后热更新的规则是,监听skills目录,一旦目录新增或减少,则进行新目录扫描,获取最新的skill name和description,并在下一个轮次注入
通过相同的文本拼接规则,加载到上下文中,这样就可以在不破坏提示词缓存的情况下实现热更新
--【拾玖】--:
佬的说法我的确是认可的
所以我对现在又火起来的爱马仕agent表示强烈的怀疑
比如提问一个问题,cc是把所有的skill生成摘要,都给大模型的,还是说先在本地进行向量检索,挑选出符合的skill,再给到大模型的,还有openclaw也支持skill,是怎么做的呢
网友解答:--【壹】--:
我直接抓取了会话,你可以查看一下/让AI给你分析一下~
skill-调用.zip (30.3 KB)
--【贰】--:
system prompt里面注入每个skill的name+description(这样用的token不是很多)。LLM自己判断需不需要加载某个skill,需要加载的话就把这个skill的详细文档注入到上下文中。
--【叁】--:
image1358×1058 116 KB
其实就是把skill名字+描述放到第一个user message里面了 没什么神奇的地方
--【肆】--:
内置了一个工具叫做skill,这个工具的描述中会展示启用的所有skill的名称和描述。
当模型觉得需要调用某一个skill时候,会调用这个skill工具,工具会固定回复文本xxx skill已经加载,然后再以role=user身份发送skill的详细指导
用户视角只会看到命令行闪过加载了xxx skill
--【伍】--:
所有skill的名称以及描述都会发送,元信息应该还包含其他的?例如是否fork模式之类的
--【陆】--:
智能体没有检索这样的功能,智能体只是作为用户与模型沟通的桥梁,可能Gemini说的先进行检索是智能体先把你的输入加上skill目录加上其他提示词发给模型,模型分辨需不需要用到其中的skill,然后发请求给智能体进行加载
--【柒】--:
类似于先把所有的skill名+功能描述放入上下文中
由LLM来判断处理这个任务是否需要调用skill,如果需要cc再把对应skill.md的内容给到LLM
好像不涉及本地的向量检索,纯通过这种类似于菜单的形式让LLM点菜
--【捌】--:
确实容易爆,skills一多就占很多,模型会受到影响,所以skills不能装太多。以前的mcp是把全文放进上下文里,那个时候如果装了很多mcp,模型直接跟你爆了(bushi),skill的出现就是体现“按需加载”的思想
--【玖】--:
去看一下cc的源码不就懂了吗 会把关于skill的提示词写到提示词里面
--【拾】--:
确实是这样,但实际应用中应该不会真的安装这么多skill吧(
--【拾壹】--:
文本变化,不会重新注入,前几个版本测试过,只有目录name发生变化时,才会重新注入,完整注入所有的skill info
--【拾贰】--:
对claude code来说是直接加载的,但是也可以做到按需加载或者分配subagents之类的
--【拾叁】--:
也就是所有skill的名称以及元信息都会发给模型?
--【拾肆】--:
我问gemini,说会进行检索,得到相关的skill才会给大模型,就是不知道他为什么这么说,说的对不对
--【拾伍】--:
那这样来看, skill还是适当安装, 装多了还是会挤占context空间
--【拾陆】--:
也就是说,1000个skill,就会把1000个skill名+描述放到上下文,1万个就放1万这样的?那如果skill特别多,岂不是会爆token
--【拾柒】--: Amashiro:
第一个messages的某个消息块
是在名叫Skill的function tool的描述里
image1246×892 23.7 KB
--【拾捌】--:
cc的做法是在第一个messages的某个消息块里面注入类似文本串
The following skills are available for use with the Skill tool:
- {skill.name_1}: {skill.description_1}
- {skill.name_2}: {skill.description_2}
这样cc就全局知道有哪些skill了,并可以通过skill工具去实现渐进式披露。
然后热更新的规则是,监听skills目录,一旦目录新增或减少,则进行新目录扫描,获取最新的skill name和description,并在下一个轮次注入
通过相同的文本拼接规则,加载到上下文中,这样就可以在不破坏提示词缓存的情况下实现热更新
--【拾玖】--:
佬的说法我的确是认可的
所以我对现在又火起来的爱马仕agent表示强烈的怀疑

