skill 并不是大模型层面的概念,它是封装出来的。
大模型层面有 tool call,也就是指定名字、描述、参数格式,大模型会在需要用到这个功能的时候,调用 tool,传入合适的参数
那为什么要有 skills 呢?
因为 tool 的描述是要放到 system messagge 里的,太多的话要消耗 token 的。
那怎么解决这个问题呢?
模块化!包一层不就好了
这就是 skills,它本质就是 prompt + tool
你装了这个 skill,就是把他的 prompt 放入 system message,然后把 tool 绑定上
你卸载了这个 skill,就是把它的 prompt 从 system message 去掉,顺便去掉这些 tool
所以包了一层,就可以动态管理这些 tool 了,并且 priompt 里可以描述多个 tool 的调用流程。
所以说,它是封装出来给普通用户用的,开发者用 langchain 的时候,只有 tool,没有 skill 的概念。
后面我们 前端转 AI Agent 全栈通关秘籍 也实现一样的 skill 系统
其实并不是很难,你觉得上面的思路,实现起来难么?
并不难,你也可以看下 OpenClaw 或者 Deep Agents,让 ai 解读下,他们都实现了 skill 系统。
所以说,skill 是封装出来的概念,不是大模型层面的,和 tool 不是一个层次,可实现可不实现,虽然现在很多 agent 都实现了 skill 系统。
后面我们在 @神光的幸福生活 也实现一套 skill 系统,这个虽然说不是必备的,如果你的 agent 是固定的功能,封装好了,不需要各种扩展,只是做特定的事情,那没必要实现 skill,我们公司的项目就不支持这个。
应该是只有通用的 agent 要实现这个,比如 OpenClaw,它可以帮你做各种事情,一些特定业务的 agent,他要做的事情是固定的,不然你随意发挥,所以自然也没必要实现 skill。
总之,skill 可以学怎么写,但它是用户层面的概念,作为开发者,要学习 langchain、langgraph 这些,要学习怎么实现 skill 系统,从本质上去学。这才是区别于普通人的开发者应有的学习方式。
学好 Agent 开发,当然也能更深入的学会 Agent 的工具的使用、理解各种功能的原理,一举两得。