Skill
Skill
西红柿炒鸡蛋,是先炒西红柿还是先炒鸡蛋。根据人类世界的复杂问题,衍生到 AI 世界,让我们一起探索什么是 Skill。
- SKILL
Written by
Skill
西红柿炒鸡蛋,是先炒西红柿还是先炒鸡蛋。根据人类世界的复杂问题,衍生到 AI 世界,让我们一起探索什么是 Skill。
Written by
生活在 AI 的时代,我们每天都在面对着各种新词的诞生,让人感到陌生与无助。而今天我们要学的就是 Skill。
Skill 翻译过来叫技能,什么叫技能?剪辑、编程、做饭都是技能。那就拿做饭举例来说,我们每个人每天或多或少都能做饭,但是每个人做出来的品质和味道各不相同。同理 AI 也是一样,同样的提示词问两遍,AI 或许会规划成不同的路线,这就是西红柿炒鸡蛋,是先炒西红柿还是先炒鸡蛋的问题。
为了解决这种问题,无论是模型的切换(ChatGPT、Claude),还是提示词的变化,模型始终会分析问题,然后找出用户准备好的 Skill,根据 Skill 的步骤去规划问题。你也可以理解为原来由 AI Plan 的架构,让人先去做一个 Plan,扔给模型,和 AI Plan 不同的是,Skill 你还可以放一些其他资源、文件、二进制程序、数据库、等等等
简单来说,AI Skill 就是人为定义的一个工作流,是一套能力的组合。
AI 时代,每个人获取知识能力的门槛在降低。过去,写代码需要多年的训练,搞设计需要专业的背景。而现在,AI 可以帮你完成70% 的工作内容。假设你不是这个行业的工作人员,你对编码一窍不通,无所谓,装个 Skill。你不会剪辑,无所谓,装个 Skill。你想点杯奶茶,无所谓,装个 Skill。当然 Skill 仍然是在复杂场景下工作更加适合,因为模型本身的能力,都能完成大部分的工作,他们是不需要 Skill,Skill 更面向于定制化场景。例如我有一个私有工厂,我有自己的 Process,但是传统的 AI 是不知道这些 Process的,这个时候就需要我们自己来定义 Skill,让模型知道怎么做。
Skill 人人都能写,所以说未来的差距并不是你会不会写 Skill,而是你会不会问问题,会不胡判断结果,会不会整合流程。AI 的效果,很大程度取决于你的输入质量,所以现在有很多 Prompt Engineering,它甚至是一门学科。目前的 AI 会产生幻觉,他会认为看起来很对,但不一定真对。复杂任务需要拆解,信息收集、处理、输出。而 AI 更擅长子任务,你要负责的是整体的框架与结构。
同样的有人会问,为什么我不在 Chat 的时候,将 Skill 注入进去,它本质上仍然还是 Prompt,这里就会提到 Skill 的复用了,我们会在模型安装大量Skill,无论是你自己写的,还是别人写的。你都不用关心其底层实现。你只需要安装它,然后向模型描述你的需求,模型会自动的需找和匹配最佳的 Skill。
很多人会混淆这几个概念,我们可以简单区分一下,Tool 是工具,具备的是单一能力,搜索、编辑文件、阅读文件,通常由开发者编写。Function 是函数,明确的定义输入输出,一次调用完成一件事情。Skill 是更高层的抽象,可以包含多个 Tool、Function。
Prompt 让我们能使用AI,Tool 能让 AI 能做事,Skill 是能让 AI 把事情做好。Skill 真正强大的地方在于可以像积木一样组合 Tool 或者其他,构建成一个 AI workflow system。
Skill 简化了普通用户的使用,让每个人都能使用,让每个人都能编辑。Clawhub 出自于最近爆火的 OpenClaw,它可以装在每个人的电脑上,模型根据不同的 Skill 具备了强大的能力。感谢Clawhub 提供的开源 Skill,开源至上。
Code
"""
mini_skills.py
一个最小可运行的 AI Skills 框架(简化版 Claude Code Skills 思想)
运行方式:
python mini_skills.py
"""
from typing import Dict, Any, List
# ======================
# Mock LLM(你可以替换成 OpenAI / Claude API)
# ======================
class SimpleLLM:
def __call__(self, prompt: str) -> str:
prompt_lower = prompt.lower()
# 简单模拟 routing
if "summarize" in prompt_lower or "总结" in prompt_lower:
return "summarize"
if "analyze" in prompt_lower or "分析" in prompt_lower:
return "analyze"
# 默认 fallback
return "summarize"
# ======================
# Skill 抽象
# ======================
class Skill:
def __init__(self, name: str, description: str):
self.name = name
self.description = description
def run(self, input: Dict[str, Any]) -> Dict[str, Any]:
raise NotImplementedError
# ======================
# 示例 Skill 1:总结
# ======================
class SummarizeSkill(Skill):
def __init__(self, llm):
super().__init__(
name="summarize",
description="Summarize a piece of text"
)
self.llm = llm
def run(self, input: Dict[str, Any]) -> Dict[str, Any]:
text = input.get("text", "")
# 模拟总结(真实情况可以调用 LLM)
summary = text[:50] + "..." if len(text) > 50 else text
return {
"skill": self.name,
"summary": summary
}
# ======================
# 示例 Skill 2:分析
# ======================
class AnalyzeSkill(Skill):
def __init__(self, llm):
super().__init__(
name="analyze",
description="Analyze text and return insights"
)
self.llm = llm
def run(self, input: Dict[str, Any]) -> Dict[str, Any]:
text = input.get("text", "")
word_count = len(text.split())
return {
"skill": self.name,
"word_count": word_count,
"insight": "Text is long" if word_count > 20 else "Text is short"
}
# ======================
# Skill Registry
# ======================
class SkillRegistry:
def __init__(self):
self.skills: Dict[str, Skill] = {}
def register(self, skill: Skill):
self.skills[skill.name] = skill
def get(self, name: str) -> Skill:
return self.skills[name]
def list(self) -> List[Skill]:
return list(self.skills.values())
# ======================
# Router(用 LLM 选 Skill)
# ======================
class SkillRouter:
def __init__(self, llm, registry: SkillRegistry):
self.llm = llm
self.registry = registry
def route(self, user_input: str) -> Skill:
skills_desc = "\n".join([
f"{s.name}: {s.description}"
for s in self.registry.list()
])
prompt = f"""
You are a router. Choose the best skill.
Available skills:
{skills_desc}
User request:
{user_input}
Return only the skill name.
"""
skill_name = self.llm(prompt).strip()
if skill_name not in self.registry.skills:
raise ValueError(f"Skill '{skill_name}' not found")
return self.registry.get(skill_name)
# ======================
# Engine(执行系统)
# ======================
class SkillEngine:
def __init__(self, router: SkillRouter):
self.router = router
def run(self, user_input: str, params: Dict[str, Any]):
skill = self.router.route(user_input)
print(f"[Router] Selected skill: {skill.name}")
result = skill.run(params)
return result
# ======================
# 主程序(演示)
# ======================
def main():
llm = SimpleLLM()
# 初始化
registry = SkillRegistry()
registry.register(SummarizeSkill(llm))
registry.register(AnalyzeSkill(llm))
router = SkillRouter(llm, registry)
engine = SkillEngine(router)
# 测试输入
user_input = "帮我总结这段文字"
params = {
"text": "AI is transforming the world. It helps automate tasks, improve efficiency, and unlock new possibilities across industries."
}
result = engine.run(user_input, params)
print("\n[Result]")
print(result)
if __name__ == "__main__":
main()