共计 3038 个字符,预计需要花费 8 分钟才能阅读完成。
Claude Skills 概述
Claude Skills 是 Anthropic 公司为 Claude AI 提供的技能扩展框架,允许开发者创建自定义功能模块。简单来说,就是教会 Claude 完成特定任务的能力。比如查询天气、翻译文本、计算数学公式等。与普通 API 调用不同,Skills 更强调自然语言交互和上下文理解能力。

适用场景包括:
- 企业客服自动化
- 个人效率工具
- 教育辅助应用
- 娱乐互动程序
开发环境准备
- 注册 Anthropic 开发者账号:访问 Anthropic 官网 申请 API 访问权限
- 安装 Python 3.8+:推荐使用 Pyenv 或官方安装包
- 准备代码编辑器:VS Code/PyCharm 等主流 IDE 均可
- 安装必要库:
pip install anthropic python-dotenv requests
- 配置环境变量:在项目根目录创建.env 文件
ANTHROPIC_API_KEY= 你的 API 密钥
WEATHER_API_KEY= 天气服务 API 密钥
第一个技能开发:天气查询
项目结构
weather_skill/
├── main.py # 主逻辑
├── claude_utils.py # Claude 交互封装
├── weather.py # 天气服务实现
└── .env # 密钥配置
核心代码实现
- 首先创建 Claude 交互工具类:
# claude_utils.py
import os
from anthropic import Anthropic
from dotenv import load_dotenv
load_dotenv()
class ClaudeWrapper:
def __init__(self):
self.client = Anthropic(api_key=os.getenv('ANTHROPIC_API_KEY'))
def send_message(self, prompt, model="claude-3-opus-20240229"):
response = self.client.messages.create(
model=model,
max_tokens=1024,
messages=[{"role": "user", "content": prompt}]
)
return response.content[0].text
- 实现天气服务接口:
# weather.py
import requests
import os
from dotenv import load_dotenv
load_dotenv()
class WeatherService:
BASE_URL = "https://api.openweathermap.org/data/2.5/weather"
@staticmethod
def get_weather(city: str) -> str:
params = {
'q': city,
'appid': os.getenv('WEATHER_API_KEY'),
'units': 'metric'
}
response = requests.get(WeatherService.BASE_URL, params=params)
data = response.json()
if response.status_code != 200:
return f"获取天气失败: {data.get('message',' 未知错误 ')}"
weather = data['weather'][0]['description']
temp = data['main']['temp']
return f"{city}当前天气: {weather}, 温度: {temp}°C"
- 主程序整合功能:
# main.py
from claude_utils import ClaudeWrapper
from weather import WeatherService
class WeatherSkill:
def __init__(self):
self.claude = ClaudeWrapper()
self.weather = WeatherService()
def process_query(self, user_input: str) -> str:
# 使用 Claude 识别用户意图
prompt = f""" 用户输入: {user_input}
这是请求天气信息吗?如果是,请回复城市名称;否则回复 NO。"""
claude_response = self.claude.send_message(prompt)
if claude_response.strip().upper() != "NO":
city = claude_response.strip()
return self.weather.get_weather(city)
return "这不是天气查询请求"
if __name__ == "__main__":
skill = WeatherSkill()
print(skill.process_query("上海今天天气怎么样?"))
代码详解
- Claude 交互层:
- 封装了 Anthropic 官方 SDK
- 使用 dotenv 管理 API 密钥
-
提供简化的消息发送接口
-
天气服务层:
- 调用 OpenWeatherMap API
- 处理错误响应
-
格式化返回数据
-
业务逻辑层:
- 先使用 Claude 判断用户意图
- 提取关键参数(城市名)
- 组合两个服务的处理结果
测试与调试
推荐测试方法:
- 单元测试:对每个模块单独测试
# test_weather.py
import unittest
from weather import WeatherService
class TestWeather(unittest.TestCase):
def test_get_weather(self):
result = WeatherService.get_weather("London")
self.assertIn("London 当前天气", result)
- 交互测试:使用不同问法验证意图识别
print(skill.process_query("请问北京气候如何?"))
print(skill.process_query("明天杭州会下雨吗?"))
print(skill.process_query("讲个笑话")) # 非天气请求
- 调试技巧:
- 在.env 中添加
ANTHROPIC_LOG=debug查看详细请求 - 使用 try-catch 捕获 API 异常
- 打印中间变量值检查逻辑流程
生产环境注意事项
- 性能优化:
- 为天气查询添加缓存(redis/memcached)
- 设置 API 调用频率限制
-
使用异步 IO 处理并发请求
-
安全性:
- 永远不要在前端暴露 API 密钥
- 验证用户输入防止注入攻击
-
实施请求签名机制
-
监控:
- 记录关键指标(成功率 / 延迟)
- 设置异常警报
- 定期审查日志
常见问题解答
-
Q:如何获取 Claude API 密钥?
A:目前需要申请加入等待列表,通过后会收到邀请邮件 -
Q:为什么我的天气查询总是失败?
A:请检查:1)API 密钥是否正确 2)城市名称是否含特殊字符 3)网络是否通畅 -
Q:可以同时开发多个 Skills 吗?
A:可以,建议每个 Skill 独立目录,通过路由机制分发请求 -
Q:如何处理用户模糊查询?
A:让 Claude 先澄清问题,如 ” 您想查询哪个城市的天气?” -
Q:技能响应速度慢怎么办?
A:优化方向:1)减少 Claude 调用次数 2)并行化独立操作 3)使用更轻量模型
扩展思考
- 如何让技能记忆用户偏好?(如上次查询的城市)
- 除了天气查询,还有哪些适合初学者的 Skill 创意?
- 如何评估一个 Skill 的实际效果?
进一步学习
正文完
