SKILL-adapter:让SKILL不止只能装入Claude CodeCodexOpenClaw 之类的 coding agent
- 内容介绍
- 文章标签
- 相关推荐
SKILL
本项目是本人在搭建ai应用过程中,遇到SKILL难以复用的问题而搭建的项目。该文章的攥写可能会存在一些错误的描述,并且在实际场景中还有需要更多的优化。因此,在尝试介绍推广该项目的同时,也希望各位大佬指点一下,如果有兴趣的话,也欢迎各位大佬一起加入到此项目的构建!
仓库链接:GitHub - Yirzzzz/SKILL-adapter: Low-intrusion adapter for integrating SKILL-based routing and prompt augmentation into existing LLM and agent applications. · GitHub
随着 AI Coding 和智能体开发越来越普及,越来越多开发者开始把大模型接入真实应用中。但在这个过程中,一个很常见的问题也逐渐暴露出来:同类 prompt 在不同场景中反复编写、重复维护,导致能力难以复用,系统也越来越臃肿,以 open_deep_research( GitHub - langchain-ai/open_deep_research · GitHub ) 为例,系统会通过不同 prompt 设计来定义研究、压缩、报告生成等不同角色与阶段能力。
image1141×412 41.2 KB
为了解决这种 prompt 冗余和能力分散的问题,Anthropic 在 2025 年 10 月公开发了 Introducing Agent Skills,把 skill 明确描述成一类可复用能力单元,并围绕 SKILL.md、目录结构、动态加载来推广这套机制,把原本散落在代码和 prompt 里的能力,整理成一个可描述、可检索、可复用、可注入的能力单元,从而让智能体系统从“堆 prompt”走向“按需调用能力”。但当你了解更多细节之后,skill其实就是prompt工程的新发展。
例如当前很火的pua, 该项目已经达到了10k
image1307×311 35.8 KB
事实上他的实现就是一个好的prompting工程 (有兴趣的同学也可以去做一些开源的skill去丰富自己的简历)
image1330×492 11.8 KB
可复用的skill也迅速加快了人们对他的使用.除此之外,还可以在不同的社区上找到不同SKILL
- Skills.sh https://skills.sh
- SkillsMP https://skillsmp.com/zh
image1133×757 55.1 KB
SKILL-adapter
这些 skill 很容易装进 Claude Code / Codex / OpenClaw 之类的 coding agent,但对很多自建 LLM 应用、业务 Agent、对话系统来说,并没有一个低侵入接入层。
为了解决这个问题,我开源了SKILL-adapter的轻量级适配层:不要求重写整套 Agent 框架,也不要求迁移现有后端,只需要在原有模型调用前多接一层 adapter layer,就能获得 Skill Routing、Prompt Augmentation 和平滑 fallback. 例如在一个对话场景中,如果我们希望有pua的skill注入,我们还需要去手动修改prompt,一旦有一个新的skill,就得重复、反复的修改,这不仅是一个繁杂的工作,而且对于无需使用的skill还会导致上下文爆炸。
仓库链接:https://github.com/Yirzzzz/SKILL-adapter,希望各位大佬帮忙小弟点点star
在没有skill-adapter的情况下,我们需要在prompt直接加入skill的prompt:
response = client.chat.completions.create(
model=‘Qwen/Qwen3-8B’, # ModelScope Model-Id, required
messages=[
{
‘role’: ‘user’,
‘content’: ‘<pua.skill> + query’
}],
stream=True,
extra_body=extra_body
)
当我们有了SKILL-adapter之后呢,它通过用户 Query → Skill Routing → Skill 选择 → Prompt Augmentation → 现有 LLM 应用的流程,以低侵入的方式直接接入ai应用中
from skill_adapter import SkillRuntime
runtime = SkillRuntime(skill_dirs=\[“./skills”\]) # 定义skills路径
prepared = runtime.prepare(
query=“query”,
payload={“messages”: \[{“role”: “user”, “content”: “query”}\]},
mode=“messages”,
debug=True,
)
response = client.chat.completions.create(
model=“Qwen/Qwen3-8B”,
**prepared.payload,
stream=True,
extra_body=extra_body
)
image1112×491 111 KB
在该项目中,skill的检索召回能力至关重要,目前项目支持四种模式的召回:
bm25_sentence(default): BM25 + sentence-transformers hybrid. Fully implemented. Legacy baseline.bm25_bge_m3: BM25 + BGE-M3 dense hybrid. Fully implemented. Recommended baseline for phase-2 benchmark.bge_m3_rerank: BGE-M3 first-stage + reranker pipeline. Implemented (with dependency fallback).bm25_bge_m3_rerank: BM25 + BGE-M3 first-stage + reranker pipeline. Implemented (with dependency fallback).
用户可以根据自己实际的项目需求,配置召回的skill个数以及权重:
from skill_adapter import SkillConfig
config = SkillConfig(
skill_dirs=\[“./skills”\], # skill 目录
top_k=5,
bm25_top_k=8,
semantic_top_k=8,
max_active_skills=1, #激活skill个数
activation_threshold=0.6,
bm25_weight=0.7,
semantic_weight=0.3,
embedding_model_name=“sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2”,
enable_semantic_retrieval=True,
enable_bm25_retrieval=True,
debug=True,
)
除此之外,为了方便对比不同的召回模式,还提供了web服务供用户观察不同query对于skill召回结果
网友解答:--【壹】--:
业务agent一般跑在生产服务器,完整版的skill需要能执行script,这块得考虑下生产环境怎么用。
--【贰】--:
感谢支持
--【叁】--:
非cli类,支持skill的Gui应用怎么接入? 如 CherryStudio ,RikkaHub。
排版修改一下吧
--【肆】--:
model=‘Qwen/Qwen3-8B’, # ModelScope Model-Id, required
messages=[
{
‘role’: ‘user’,
‘content’: ‘<pua.skill> + query’
}
],
stream=True,
extra_body=extra_body
)
runtime = SkillRuntime(skill_dirs=[“./skills”]) # 定义skills路径
prepared = runtime.prepare(
query=“query”,
payload={“messages”: [{“role”: “user”, “content”: “query”}]},
mode=“messages”,
debug=True,
)
response = client.chat.completions.create(
model=“Qwen/Qwen3-8B”,
**prepared.payload,
stream=True,
extra_body=extra_body
)
config = SkillConfig(
skill_dirs=[“./skills”], # skill 目录
top_k=5,
bm25_top_k=8,
semantic_top_k=8,
max_active_skills=1, #激活skill个数
activation_threshold=0.6,
bm25_weight=0.7,
semantic_weight=0.3,
embedding_model_name=“sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2”,
enable_semantic_retrieval=True,
enable_bm25_retrieval=True,
debug=True,
)
--【伍】--:
前排支持
--【陆】--:
这是不是个半成品?好像没看到提供执行能力的安全沙箱功能说明,或者说只能提供简单的提示词注入。
--【柒】--:
感谢兄弟的建议!有时间我会继续推进
--【捌】--:
这个不可能,除非客户端自己实现或者提供hook能力
--【玖】--:
感谢大佬 !
--【拾】--:
学习了。感谢佬友分享
--【拾壹】--:
是的,没错
--【拾贰】--:
感谢大佬开源
--【拾叁】--:
我去!我去看看
--【拾肆】--: 三金:
openskill
佬友这个开源社区指GitHub??
--【拾伍】--:
佬,开源社区还有个 openskill,好像和你这个功能类似
SKILL
本项目是本人在搭建ai应用过程中,遇到SKILL难以复用的问题而搭建的项目。该文章的攥写可能会存在一些错误的描述,并且在实际场景中还有需要更多的优化。因此,在尝试介绍推广该项目的同时,也希望各位大佬指点一下,如果有兴趣的话,也欢迎各位大佬一起加入到此项目的构建!
仓库链接:GitHub - Yirzzzz/SKILL-adapter: Low-intrusion adapter for integrating SKILL-based routing and prompt augmentation into existing LLM and agent applications. · GitHub
随着 AI Coding 和智能体开发越来越普及,越来越多开发者开始把大模型接入真实应用中。但在这个过程中,一个很常见的问题也逐渐暴露出来:同类 prompt 在不同场景中反复编写、重复维护,导致能力难以复用,系统也越来越臃肿,以 open_deep_research( GitHub - langchain-ai/open_deep_research · GitHub ) 为例,系统会通过不同 prompt 设计来定义研究、压缩、报告生成等不同角色与阶段能力。
image1141×412 41.2 KB
为了解决这种 prompt 冗余和能力分散的问题,Anthropic 在 2025 年 10 月公开发了 Introducing Agent Skills,把 skill 明确描述成一类可复用能力单元,并围绕 SKILL.md、目录结构、动态加载来推广这套机制,把原本散落在代码和 prompt 里的能力,整理成一个可描述、可检索、可复用、可注入的能力单元,从而让智能体系统从“堆 prompt”走向“按需调用能力”。但当你了解更多细节之后,skill其实就是prompt工程的新发展。
例如当前很火的pua, 该项目已经达到了10k
image1307×311 35.8 KB
事实上他的实现就是一个好的prompting工程 (有兴趣的同学也可以去做一些开源的skill去丰富自己的简历)
image1330×492 11.8 KB
可复用的skill也迅速加快了人们对他的使用.除此之外,还可以在不同的社区上找到不同SKILL
- Skills.sh https://skills.sh
- SkillsMP https://skillsmp.com/zh
image1133×757 55.1 KB
SKILL-adapter
这些 skill 很容易装进 Claude Code / Codex / OpenClaw 之类的 coding agent,但对很多自建 LLM 应用、业务 Agent、对话系统来说,并没有一个低侵入接入层。
为了解决这个问题,我开源了SKILL-adapter的轻量级适配层:不要求重写整套 Agent 框架,也不要求迁移现有后端,只需要在原有模型调用前多接一层 adapter layer,就能获得 Skill Routing、Prompt Augmentation 和平滑 fallback. 例如在一个对话场景中,如果我们希望有pua的skill注入,我们还需要去手动修改prompt,一旦有一个新的skill,就得重复、反复的修改,这不仅是一个繁杂的工作,而且对于无需使用的skill还会导致上下文爆炸。
仓库链接:https://github.com/Yirzzzz/SKILL-adapter,希望各位大佬帮忙小弟点点star
在没有skill-adapter的情况下,我们需要在prompt直接加入skill的prompt:
response = client.chat.completions.create(
model=‘Qwen/Qwen3-8B’, # ModelScope Model-Id, required
messages=[
{
‘role’: ‘user’,
‘content’: ‘<pua.skill> + query’
}],
stream=True,
extra_body=extra_body
)
当我们有了SKILL-adapter之后呢,它通过用户 Query → Skill Routing → Skill 选择 → Prompt Augmentation → 现有 LLM 应用的流程,以低侵入的方式直接接入ai应用中
from skill_adapter import SkillRuntime
runtime = SkillRuntime(skill_dirs=\[“./skills”\]) # 定义skills路径
prepared = runtime.prepare(
query=“query”,
payload={“messages”: \[{“role”: “user”, “content”: “query”}\]},
mode=“messages”,
debug=True,
)
response = client.chat.completions.create(
model=“Qwen/Qwen3-8B”,
**prepared.payload,
stream=True,
extra_body=extra_body
)
image1112×491 111 KB
在该项目中,skill的检索召回能力至关重要,目前项目支持四种模式的召回:
bm25_sentence(default): BM25 + sentence-transformers hybrid. Fully implemented. Legacy baseline.bm25_bge_m3: BM25 + BGE-M3 dense hybrid. Fully implemented. Recommended baseline for phase-2 benchmark.bge_m3_rerank: BGE-M3 first-stage + reranker pipeline. Implemented (with dependency fallback).bm25_bge_m3_rerank: BM25 + BGE-M3 first-stage + reranker pipeline. Implemented (with dependency fallback).
用户可以根据自己实际的项目需求,配置召回的skill个数以及权重:
from skill_adapter import SkillConfig
config = SkillConfig(
skill_dirs=\[“./skills”\], # skill 目录
top_k=5,
bm25_top_k=8,
semantic_top_k=8,
max_active_skills=1, #激活skill个数
activation_threshold=0.6,
bm25_weight=0.7,
semantic_weight=0.3,
embedding_model_name=“sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2”,
enable_semantic_retrieval=True,
enable_bm25_retrieval=True,
debug=True,
)
除此之外,为了方便对比不同的召回模式,还提供了web服务供用户观察不同query对于skill召回结果
网友解答:--【壹】--:
业务agent一般跑在生产服务器,完整版的skill需要能执行script,这块得考虑下生产环境怎么用。
--【贰】--:
感谢支持
--【叁】--:
非cli类,支持skill的Gui应用怎么接入? 如 CherryStudio ,RikkaHub。
排版修改一下吧
--【肆】--:
model=‘Qwen/Qwen3-8B’, # ModelScope Model-Id, required
messages=[
{
‘role’: ‘user’,
‘content’: ‘<pua.skill> + query’
}
],
stream=True,
extra_body=extra_body
)
runtime = SkillRuntime(skill_dirs=[“./skills”]) # 定义skills路径
prepared = runtime.prepare(
query=“query”,
payload={“messages”: [{“role”: “user”, “content”: “query”}]},
mode=“messages”,
debug=True,
)
response = client.chat.completions.create(
model=“Qwen/Qwen3-8B”,
**prepared.payload,
stream=True,
extra_body=extra_body
)
config = SkillConfig(
skill_dirs=[“./skills”], # skill 目录
top_k=5,
bm25_top_k=8,
semantic_top_k=8,
max_active_skills=1, #激活skill个数
activation_threshold=0.6,
bm25_weight=0.7,
semantic_weight=0.3,
embedding_model_name=“sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2”,
enable_semantic_retrieval=True,
enable_bm25_retrieval=True,
debug=True,
)
--【伍】--:
前排支持
--【陆】--:
这是不是个半成品?好像没看到提供执行能力的安全沙箱功能说明,或者说只能提供简单的提示词注入。
--【柒】--:
感谢兄弟的建议!有时间我会继续推进
--【捌】--:
这个不可能,除非客户端自己实现或者提供hook能力
--【玖】--:
感谢大佬 !
--【拾】--:
学习了。感谢佬友分享
--【拾壹】--:
是的,没错
--【拾贰】--:
感谢大佬开源
--【拾叁】--:
我去!我去看看
--【拾肆】--: 三金:
openskill
佬友这个开源社区指GitHub??
--【拾伍】--:
佬,开源社区还有个 openskill,好像和你这个功能类似

