共计 1696 个字符,预计需要花费 5 分钟才能阅读完成。
什么是 Claude 原生 Skill?
Claude 原生 Skill 是运行在 Claude AI 平台上的独立功能模块,可以理解为 AI 的 ” 技能插件 ”。与传统聊天机器人最大的区别在于:

- 主动式服务:Skill 能根据用户需求主动触发(比如 ” 查天气 ” 自动唤起天气 Skill)
- 上下文感知:支持跨轮次对话状态保持(比如先问 ” 上海天气 ” 再问 ” 明天呢 ”)
- 生态集成:可通过 Claude 技能商店分发,被数百万用户直接使用
开发环境准备
-
安装 Python 3.8+(推荐使用 pyenv 管理多版本)
brew install pyenv pyenv install 3.8.12 -
创建虚拟环境
python -m venv skill_env source skill_env/bin/activate -
安装 Claude SDK
pip install claude-sdk
Skill Manifest 编写
在项目根目录创建manifest.json,这是技能的身份证:
{
"skill_id": "weather_query",
"name": "天气查询",
"version": "1.0.0",
"required_permissions": [
"location",
"network"
],
"description": "提供全球城市天气查询服务"
}
关键字段说明:
required_permissions:声明技能需要的权限,常用的有:location:获取用户地理位置network:访问外部 APIuser_profile:读取基础用户信息
意图模式设计
创建 intents.yml 定义技能理解的指令:
intents:
- name: query_weather
examples:
- "[上海]的天气"
- "[北京]明天会下雨吗"
- "[纽约]最近三天的天气预报"
slots:
city:
type: string
prompts:
- "请问您想查询哪个城市?"
核心代码实现
weather_skill.py基础实现:
import asyncio
from claude.skill import Skill, DialogContext
class WeatherSkill(Skill):
async def handle_query(self, ctx: DialogContext):
city = ctx.slot("city")
# 模拟异步调用天气 API
weather = await self._fetch_weather(city)
# 对话状态管理
ctx.keep_context(minutes=5) # 保持 5 分钟上下文
return f"{city}天气:{weather}"
async def _fetch_weather(self, city):
# 实际项目替换为真实 API 调用
await asyncio.sleep(0.5)
return "晴,25℃" if "上海" in city else "多云,20℃"
关键点注释:
DialogContext对象管理整个对话生命周期ctx.slot()提取用户语句中的关键信息(如城市名)keep_context()控制多轮对话的记忆时长
调试与部署
使用 Claude CLI 测试技能:
claude skill test ./weather_skill -i "上海天气怎么样"
生产环境打包:
- 创建
requirements.txt声明依赖 - 使用 Docker 构建镜像(官方提供基础镜像)
- 通过
claude skill deploy命令发布
避坑指南
新手常见问题:
- 上下文滥用:
- 错误做法:记住所有历史对话
-
正确做法:只保留必要信息(如当前查询城市)
-
歧义处理:
-
当用户说 ” 那里 ” 时,应主动确认:
if not ctx.has_slot("city"): return "您是想查询哪个城市的天气呢?" -
性能优化:
- 预加载常用资源(如城市数据库)
- 使用
@lru_cache缓存 API 响应
扩展思考
尝试设计餐厅预订 Skill:
- 需要哪些 intents?(订位、改期、取消等)
- 如何设计 slot?(人数、日期、时段)
- 多轮对话怎么衔接?(确认→修改→最终预订)
建议先用纸笔画出对话流程图,再转化为 intents.yml 和代码实现。记住:好的 Skill 设计应该让用户感觉在和真人助手交流!
正文完
