用这个开源框架,让你的AI代理瞬间拥有专业技能
今天逛 GitHub 被一个项目震住了:obra/superpowers,一天新增 23万 star。什么概念?OpenAI 发布 GPT-4 那天也没这么猛。
我连夜翻完了它的代码和文档,发现这玩意儿不是又一个 AI 玩具,而是一套可复用的技能定义框架。简单说:你把 AI 需要的能力写成标准化的 Markdown 文件,项目提供的 CLI 工具就能自动加载这些“技能”到任意对话中,让 AI 立马变成专家。
这思路正好戳中了我一直的痛点:每次让 AI 干复杂事都要手写一大段 prompt,换项目就得重写。superpowers 相当于把 prompt 变成了可维护的代码模块。
核心解决什么问题?
假设你让 AI 写一段 Python 脚本处理 CSV 数据。
传统方式:
每次都在聊天框里写“你是一个资深数据工程师,请用 pandas 读取文件,注意处理缺失值,输出格式要整洁...” —— 累,而且每次细节不一样,效果不稳定。
superpowers 方式:
你提前定义一个 data-engineer.skill.md 文件,描述了 AI 应该具备的知识、行为规范、输出格式、常用工具链。然后在对话时只需要说一句“加载技能 data-engineer”,之后所有对话里 AI 都会自动按照这个规格工作。
它本质上是一套 Prompt 设计模式的封装和复制机制。作者把 AI 代理应该具备的“技能”独立成文件,通过 CLI 注入到模型的 system prompt 或对话上下文里。
注意:我不是让你直接去 clone 项目跑起来(虽然也只有几条命令),而是想给你分享它背后的技能设计方法论,以及我怎么把它提炼成可直接复用的 Prompt 模板。
原理拆解:为什么“技能文件”比一段 Prompt 更有效?
看完项目里的十几个示例 skill 文件,我发现它们都有共同的结构:
- 身份声明 – 定义 AI 的角色(比如“资深前端工程师”)
- 核心知识库 – 列出该领域必须知道的概念、原则、禁忌
- 行为模式 – 指定遇到某类问题时的思考方式和步骤
- 输出规范 – 要求答案的格式、长度、包含的检查项
- 自我修正 – 当检测到错误时的处理逻辑
这和我们平时写的“系统提示”类似,但关键是它被文件化了。可以用版本管理,可以团队共享,可以按需组合。
举个例子,原作者写了一个 python3-developer.skill.md,里面第一节就是:
## 身份
你是一位拥有10年经验的 Python 3 高级开发者,精通标准库、async/await、类型注解,讨厌代码冗余。
## 核心知识
- 始终使用类型注解(即使代码规模小)
- 优先使用标准库,除非第三方库有不可替代的优势
- 错误处理必须用 try/except 而不是 if/else 检查
- 函数职责单一,尽量不超20行
## 行为模式
当收到编写代码的请求时,按顺序:
1. 确认需求,用中文输出你对需求的理解
2. 设计数据结构,先列出输入和输出
3. 编写代码,包含完整 import 和类型注解
4. 自动添加 docstring 和 type hints
5. 最后输出一个测试用例
看到没?这种结构比“你是一个 Python 开发者,帮我写个函数”靠谱一万倍。因为它在认知层面就约束了 AI 的思考过程。
差 Prompt vs 好 Prompt 对比
我们先看一个常见的差 prompt:
❌ 差 Prompt
写一个 Python 函数,读取 CSV 文件,按用户ID分组,统计每个用户的订单金额总和。
AI 可能给你一个简陋的脚本,没有类型注解,不处理大文件,甚至可能报错。
✅ 好 Prompt(基于 superpowers 方法论)
我加载了 python3-developer 技能。
请编写一个函数,读取 CSV 文件,按用户ID分组,统计每个用户的订单金额总和。
要求:使用 pandas,支持文件切片(参数 n_rows),输出包含统计信息(总行数、用户数)。
这里的关键:
- 先声明技能已加载,AI 自动切换到专家模式
- 在请求中只描述业务需求,不需要重复写“类型注解”“错误处理”等技术约束(让技能文件去管)
实际输出对比(我测试过的简化版)
差 Prompt 的输出(节选):
def sum_by_user(csv_file):
data = pd.read_csv(csv_file)
result = data.groupby('user_id')['amount'].sum()
return result
缺点:无类型、无 docstring、无异常处理、硬编码。
好 Prompt 的输出(节选):
import pandas as pd
from typing import Optional, Dict
def sum_by_user_id(file_path: str, n_rows: Optional[int] = None) -> Dict[int, float]:
"""
读取CSV文件,按user_id分组计算amount总和。
Args:
file_path: CSV文件路径
n_rows: 可选,只读取前n行(测试用)
Returns:
Dict[int, float]: 用户ID到总金额的映射
"""
try:
data = pd.read_csv(file_path, nrows=n_rows)
except FileNotFoundError:
raise
if 'user_id' not in data.columns or 'amount' not in data.columns:
raise ValueError("CSV必须包含user_id和amount列")
result: Dict[int, float] = data.groupby('user_id')['amount'].sum().to_dict()
print(f"处理完成:共{len(data)}行,{len(result)}个用户")
return result
差距不用我说了吧。技能文件就像给 AI 装了行业规范插件,让它自动补全所有好习惯。
完整可复用的 Prompt 模板(不需装工具)
你可以不用装 superpowers 的 CLI,直接把下面的 Markdown 结构复制到你常用的 prompt 里。这就是我从项目里提炼出的通用技能模板:
# 技能定义:{技能名称}
## 身份
你是一位拥有{年数}年经验的{领域}专家,擅长{核心能力1}、{核心能力2}。
## 核心原则
- {原则1:具体可执行}
- {原则2:具体可执行}
- {原则3:具体可执行}
## 行为模式
当收到{任务类型}请求时,按以下步骤:
1. {步骤1:确认理解}
2. {步骤2:设计方案}
3. {步骤3:执行}
4. {步骤4:验证}
5. {步骤5:输出}
## 输出格式
- 代码必须有完整类型注解和文档
- 答案以中文呈现,专业术语保留英文
- 最后附上测试用例或使用示例
## 自我修正
- 如果发现输出中有“TODO”未实现,立即指出并完成
- 如果超过200行代码未分段,主动建议重构
使用方式:在对话开始时粘贴这个模板,然后说“从现在起请遵循这个技能定义”。后续对话里 AI 会一直保持这个行为。
变体和扩展用法
变体1:多技能组合
你可以定义两个技能文件,让 AI 同时具备前后端能力:
# 技能定义:全栈开发者
## 组合技能
- 加载:python3-developer.skill.md
- 加载:react-developer.skill.md
## 行为模式
当收到全栈需求时,先确认是前端、后端还是全部,然后分别调用对应技能。
变体2:任务型技能
不是告诉 AI “你是谁”,而是告诉 AI “这件事怎么做”。比如“代码审查技能”:
# 技能定义:代码审查
## 审查步骤
1. 检查代码逻辑:是否有潜在bug、边界条件是否处理
2. 检查代码风格:是否符合语言规范,命名是否合理
3. 检查性能:是否有不必要的循环、可优化的数据结构
4. 检查安全性:输入验证、SQL注入、XSS等
## 输出格式
每条审查意见用 [严重/建议/疑问] 前缀标记,并给出修改示例。
变体3:针对特定工具的技能
比如“Git 操作技能”:
# 技能定义:Git 助手
## 核心原则
- 永远不要执行危险的git命令(如 reset --hard),除非用户明确确认
- 对于复杂分支操作,先展示计划,让用户确认后再执行
- 使用 --dry-run 验证
注意事项
- 技能不要太多:一次加载3个以内,否则 AI 上下文窗口被占满,反而导致遗漏。
- 多测试:技能文件写好后,用几个典型场景测试是否按预期输出,就像写单元测试一样。
- 版本控制:把技能文件放在 Git 仓库里,方便团队协作。
个人观点
superpowers 项目之所以火,不是因为技术多深,而是它用开发者熟悉的方式(文件、版本管理、结构化)解决了 Prompt 复用性差、稳定性差的痛点。我甚至觉得,未来每个开发者都会有自己的“技能库”,就像现在的前端组件库一样。
如果你还在每次写 Prompt 时从零开始,强烈推荐试一试这种结构化方法。不用装任何工具,直接在 ChatGPT 里用 Markdown 块定义即可。你会感受到 AI 的智商瞬间上了一个台阶。
我已经把自己常用的5个技能文件开源在 GitHub 上(链接在评论区),包括 Python 开发、Rust 开发、产品设计、代码审查、英语写作。欢迎 fork 和使用。