最佳实践
本文档总结了使用 agent_skills 协议开发技能时的最佳实践和推荐做法,帮助开发者构建高质量、可维护的技能系统。
技能设计最佳实践
1. 清晰的技能定义
推荐做法:
- 提供清晰、准确的技能名称和描述
- 详细说明输入输出参数
- 使用标准的 JSON Schema 定义数据结构
- 提供使用示例
# ✅ 好的示例
skill_definition = {
"skill_id": "text-sentiment-analysis",
"name": "文本情感分析",
"description": "分析文本的情感倾向,返回正面、负面或中性的概率分布。支持中文和英文文本。",
"input_schema": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "待分析的文本内容,长度建议在 1000 字符以内",
"minLength": 1,
"maxLength": 10000
},
"language": {
"type": "string",
"description": "文本语言代码,支持 'zh'(中文)和 'en'(英文)",
"enum": ["zh", "en"],
"default": "zh"
}
},
"required": ["text"]
},
"output_schema": {
"type": "object",
"properties": {
"sentiment": {
"type": "string",
"enum": ["positive", "negative", "neutral"],
"description": "情感倾向"
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "置信度分数"
}
}
}
}
# ❌ 不好的示例
bad_skill_definition = {
"skill_id": "analyze",
"name": "分析",
"description": "分析文本",
# 缺少详细的输入输出定义
}
2. 单一职责原则
推荐做法:
- 每个技能应该专注于单一功能
- 避免创建"万能"技能
- 将复杂功能拆分为多个简单技能
# ✅ 好的做法:拆分为多个专门技能
skills = [
{"skill_id": "text-preprocessing", "name": "文本预处理"},
{"skill_id": "text-sentiment-analysis", "name": "情感分析"},
{"skill_id": "text-summarization", "name": "文本摘要"}
]
# ❌ 不好的做法:一个技能做所有事情
bad_skill = {
"skill_id": "text-processor",
"name": "文本处理器",
# 包含预处理、情感分析、摘要等多个功能
}
3. 版本管理
推荐做法:
- 使用语义化版本号(Semantic Versioning)
- 提供版本迁移指南
- 保持向后兼容性
- 明确标记废弃版本
# 语义化版本:主版本号.次版本号.修订号
version = "1.2.3" # 主版本:不兼容的 API 修改
# 次版本:向后兼容的功能新增
# 修订号:向后兼容的问题修复
# 版本兼容性声明
skill_definition = {
"version": "2.0.0",
"backward_compatible": False, # 不向后兼容
"migration_guide": "https://docs.example.com/migration-v2",
"deprecated_versions": ["1.x.x"]
}