共计 2224 个字符,预计需要花费 6 分钟才能阅读完成。
核心概念:Agent Skill 是什么?
可以把 Agent Skill 想象成手机里的各种小程序:每个技能专注解决一个特定问题(比如查天气、订餐厅),而 Cherry Studio 就是运行这些技能的智能手机平台。当用户说 ” 明天会下雨吗 ” 时,系统会自动匹配天气查询技能,你的代码负责处理这个请求并返回答案。

关键组件:
- 意图(Intent):用户想要做什么(如 ” 查询天气 ”)
- 实体(Entity):关键参数(如 ” 北京 ”、” 明天 ”)
- 对话流(Dialog Flow):多轮交互逻辑
环境准备
- 注册 Cherry Studio 开发者账号
- 安装必备工具:
- Python 3.8+ 或 Node.js 16+
- VS Code 或其他 IDE
- 安装 SDK(以 Python 为例):
pip install cherry-sdk - 获取 API 密钥:在开发者控制台创建新项目后获取
开发实战:天气查询技能
1. 创建技能骨架
# weather_skill.py
from cherry import AgentSkill, Request, Response
class WeatherSkill(AgentSkill):
def __init__(self):
super().__init__(
name="weather",
description="查询城市天气情况"
)
async def execute(self, request: Request) -> Response:
"""处理天气查询请求"""
city = request.entities.get("city") # 获取城市参数
# 这里会继续补充...
2. 处理地理参数
# 在 execute 方法中添加:if not city:
return Response(
text="请问您想查询哪个城市的天气?",
requires_slot="city" # 要求用户补充信息
)
3. 调用天气 API(示例用 OpenWeatherMap)
import os
import requests
# 在类中添加方法
async def _get_weather(self, city: str) -> dict:
api_key = os.getenv("WEATHER_API_KEY")
url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}"
try:
response = requests.get(url)
data = response.json()
return {"temp": round(data["main"]["temp"] - 273.15, 1), # 转摄氏度
"desc": data["weather"][0]["description"]
}
except Exception as e:
print(f"API 调用失败: {e}")
return None
4. 返回结构化响应
# 完善 execute 方法
weather_data = await self._get_weather(city)
if not weather_data:
return Response(text="暂时无法获取天气信息,请稍后再试")
return Response(text=f"{city}当前天气:{weather_data['desc']},气温{weather_data['temp']}℃",
entities={"city": city} # 记住上下文
)
调试与测试
本地测试方法
-
模拟请求对象:
test_request = Request( intent="query_weather", entities={"city": "北京"} ) print(await WeatherSkill().execute(test_request)) -
使用 SDK 测试工具:
cherry-cli test --skill weather_skill.py
云端调试技巧
- 在开发者控制台查看请求日志
- 使用 ” 对话回放 ” 功能重现问题场景
- 设置断点调试(需配置远程调试)
生产部署
-
打包技能:
cherry-cli pack --skill weather_skill.py --output weather.zip -
发布流程:
- 控制台上传 zip 包
- 填写版本说明
-
选择发布环境(测试 / 生产)
-
性能优化:
-
添加缓存(示例):
from datetime import timedelta from cachetools import TTLCache # 在__init__中添加:self.cache = TTLCache(maxsize=100, ttl=timedelta(minutes=30)) -
安全注意事项:
- 永远不要硬编码 API 密钥
- 验证用户输入(防止 SQL 注入等)
- 设置合理的 API 调用频率限制
避坑指南
-
报错:Missing required slot
→ 检查是否所有必填参数都设置了requires_slot提示 -
API 响应慢
→ 添加超时设置和重试机制response = requests.get(url, timeout=3) -
中文乱码
→ 确保响应头包含Content-Type: application/json; charset=utf-8 -
技能不触发
→ 检查控制台中的意图匹配配置是否正确 -
变量未定义
→ 使用类型提示和 mypy 静态检查
下一步学习建议
掌握基础技能后,可以尝试:
- 添加多轮对话(如询问具体日期)
- 集成数据库存储用户偏好
- 开发包含 UI 组件的富交互技能
- 学习技能组合(Chain Skill)实现复杂流程
官方文档中还有更多高级功能等待探索,祝你开发愉快!
正文完
