第8章:最佳实践与反模式 - 经验总结
前人栽树,后人乘凉;前人踩坑,后人避坑
本章导读
通过前7章的学习,你已经掌握了技能包的核心设计模式。本章将总结最佳实践、指出常见陷阱,帮助你设计出高质量、可维护的技能包。
你将学到
- ✅ 技能设计的8大原则
- ✅ 10种常见反模式与规避方法
- ✅ 如何设计自己的技能包生态系统
- ✅ 技能包协作的未来趋势
8.1 技能设计原则
原则 1:单一职责原则(SRP)
markdown
# 一个技能只做一件事
✅ Good:
- verification: 只验证
- tdd: 只测试驱动开发
- review: 只审查
❌ Bad:
- do-everything: 验证 + 测试 + 审查 + 部署
判断标准:
能否用一句话描述这个技能的目的?
如果包含"和"、"以及",说明职责过多。原则 2:明确边界原则
markdown
# 清晰的输入输出
每个技能必须有:
Input:
- 明确需要什么
- 从哪里获取
Output:
- 明确产出什么
- 如何被使用
示例:
writing-plans:
Input: requirements document
Output: implementation plan (task_plan.md)
verification:
Input: goal file path
Output: pass/fail + missing items原则 3:无状态原则
markdown
# 技能不应维护状态
❌ Bad:
skill remembers:
- how many times called
- previous results
- user preferences
✅ Good:
skill is stateless:
- each invocation is independent
- no memory of previous calls
- pure functional
优势:
- 易于测试
- 可并发执行
- 结果可预测原则 4:可测试原则
markdown
# 每个技能都应该可独立测试
测试清单:
□ 能否独立调用?
□ 输入是否明确?
□ 输出是否可验证?
□ 错误是否可捕获?
□ 边界条件是否处理?
示例测试:
def test_verification():
result = verification(
goal_file="goals/test-goal.md",
ai_assessment="Completed all tasks"
)
assert result['status'] in ['pass', 'fail']
assert isinstance(result['missing_items'], list)原则 5:错误处理原则
markdown
# 优雅的错误处理
必须包含:
1. 捕获异常
2. 提供清晰的错误信息
3. 建议修复方案
4. 记录日志
示例:
try:
result = execute_skill()
except SkillExecutionError as e:
logger.error(f"Skill execution failed: {e}")
return {
'status': 'error',
'message': 'Failed to execute skill',
'reason': str(e),
'suggestion': 'Check skill configuration and try again'
}原则 6:可组合原则
markdown
# 技能应该易于组合
设计考虑:
- 输出能否作为其他技能的输入?
- 是否定义了标准的接口?
- 是否支持链式调用?
示例:
brainstorming 输出:
- design_doc.md
writing-plans 输入:
- requirements: design_doc.md
链式调用:
brainstorming → writing-plans → executing-plans原则 7:幂等性原则
markdown
# 多次执行结果相同
重要!特别是涉及文件操作时:
✅ Good:
create_file_if_not_exists(path)
- 第一次:创建文件
- 第二次:文件已存在,不创建
- 结果:文件存在
❌ Bad:
append_to_file(path, content)
- 第一次:追加内容
- 第二次:再次追加
- 结果:内容重复
解决方案:
检查状态,避免重复操作原则 8:可观测原则
markdown
# 技能执行过程应该可见
必须记录:
1. 开始时间
2. 执行步骤
3. 关键决策
4. 结束时间
5. 结果状态
示例日志:
[2024-03-24 14:30:15] Starting verification
[2024-03-24 14:30:16] Reading goal file: test-goal.md
[2024-03-24 14:30:17] Checking tests... PASSED
[2024-03-24 14:30:18] Checking requirements... PASSED
[2024-03-24 14:30:19] Checking docs... FAILED (missing updates)
[2024-03-24 14:30:20] Verification result: FAIL
[2024-03-24 14:30:21] Missing items: [Update README, Update CHANGELOG]8.2 常见反模式
反模式 1:上帝技能(God Skill)
markdown
# 问题:一个技能做所有事情
❌ Example:
name: ultimate-development-skill
does:
- planning
- coding
- testing
- deployment
- monitoring
- everything
问题:
- 职责过多
- 难以维护
- 无法复用
- 测试困难
✅ Solution:
拆分为多个技能:
- planning-skill
- coding-skill
- testing-skill
- deployment-skill
- monitoring-skill反模式 2:过度抽象
markdown
# 问题:为了抽象而抽象
❌ Example:
BaseSkill → AbstractSkill → GenericSkill → ConcreteSkill
层级太多,理解成本高
✅ Solution:
保持简单:
Skill (interface) → ConcreteSkill (implementation)
两层足够反模式 3:隐藏的依赖
markdown
# 问题:技能之间有隐式依赖
❌ Example:
skill_a 隐式依赖 skill_b 的全局变量
但文档中没有说明
问题:
- 执行顺序不可预测
- 难以调试
- 无法并行
✅ Solution:
显式声明依赖:
skill_a:
depends_on: [skill_b]
input: skill_b.output反模式 4:配置地狱
markdown
# 问题:配置项过多
❌ Example:
skill 需要配置 50 个参数:
- param1
- param2
- ...
- param50
用户不知道如何配置
✅ Solution:
提供合理默认值:
skill:
required_params: [name] # 必须配置
optional_params:
- timeout: 3600 # 有默认值
- retry: 3 # 有默认值反模式 5:过度并行
markdown
# 问题:不必要地并行化
❌ Example:
并行执行 100 个小任务
问题:
- Agent 启动开销大
- 资源消耗过多
- 实际效率降低
✅ Solution:
评估是否值得并行:
IF 任务数 < 3:
Sequential execution
ELIF 任务独立 AND 资源充足:
Parallel execution (max 10 agents)
ELSE:
Batch processing反模式 6:魔法数字
markdown
# 问题:代码中的硬编码数字
❌ Example:
if result.score > 85:
pass
为什么是 85?为什么不是 80 或 90?
✅ Solution:
使用命名常量:
PASS_THRESHOLD = 85 # Based on industry standard
if result.score > PASS_THRESHOLD:
pass反模式 7:错误的消息传递
markdown
# 问题:错误信息不明确
❌ Example:
Error: Operation failed
用户不知道:
- 什么操作失败?
- 为什么失败?
- 如何修复?
✅ Solution:
提供详细的错误信息:
Error: Verification failed
Reason: 3 tests did not pass
Details:
- test_login: AssertionError at line 45
- test_api: TimeoutError after 30s
- test_db: ConnectionError
Suggestion: Run tests locally to debug反模式 8:过早优化
markdown
# 问题:在需要之前就优化
❌ Example:
为了"可能的高并发"而设计复杂的缓存系统
但实际用户只有 1-2 个
✅ Solution:
先让它工作,再优化:
1. Make it work (MVP)
2. Measure performance
3. Identify bottlenecks
4. Optimize where needed
"Premature optimization is the root of all evil"
- Donald Knuth反模式 9:忽视边界条件
markdown
# 问题:不考虑边界情况
❌ Example:
def process_file(path):
content = read_file(path)
return process(content)
如果:
- path 不存在?
- file 为空?
- file 过大?
- 没有权限?
都会崩溃
✅ Solution:
处理所有边界条件:
def process_file(path):
# Check existence
if not os.path.exists(path):
raise FileNotFoundError(path)
# Check size
size = os.path.getsize(path)
if size > MAX_FILE_SIZE:
raise FileTooLargeError(size)
# Check permission
if not os.access(path, os.R_OK):
raise PermissionError(path)
# Process
content = read_file(path)
return process(content)反模式 10:文档缺失
markdown
# 问题:技能没有文档
❌ Example:
技能代码写好了,但没有说明:
- 如何使用
- 输入输出是什么
- 有什么限制
用户无法使用
✅ Solution:
提供完整文档:
---
name: skill-name
description: What this skill does
---
# Usage
## Input
- param1: Description
- param2: Description
## Output
- result: Description
## Examples
Example 1:Invoke skill with: param1: value1 param2: value2
## Limitations
- Cannot handle X
- Requires Y8.3 如何设计自己的技能包生态系统
步骤 1:需求分析
markdown
# 识别你的需求
问自己:
1. 我经常做什么重复性工作?
2. 哪些流程可以标准化?
3. 哪些工具需要集成?
4. 哪些最佳实践需要固化?
示例:
- 代码审查流程 → code-review skill
- 部署流程 → deployment skill
- 文档更新流程 → documentation skill步骤 2:架构设计
markdown
# 设计技能包架构
1. 识别技能类型:
- 入口技能(Entry)
- 流程技能(Process)
- 工具技能(Tool)
- 守护技能(Guardian)
2. 定义技能关系:
- 依赖关系
- 调用关系
- 互斥关系
3. 画出架构图:
┌─────────────────────────┐
│ Entry Skills │
├─────────────────────────┤
│ Process Skills │
├─────────────────────────┤
│ Tool Skills │
├─────────────────────────┤
│ Guardian Skills │
└─────────────────────────┘步骤 3:技能实现
markdown
# 实现每个技能
遵循模板:
---
name: skill-name
description: Clear description
TRIGGER when: [conditions]
---
# Skill Name
## Purpose
What this skill does
## Input
What it needs
## Output
What it produces
## Steps
1. Step 1
2. Step 2
3. Step 3
## Error Handling
How errors are handled
## Examples
Usage examples步骤 4:测试验证
markdown
# 测试你的技能
单元测试:
□ 测试单个技能的功能
□ 测试边界条件
□ 测试错误处理
集成测试:
□ 测试技能之间的协作
□ 测试完整流程
□ 测试性能
用户测试:
□ 让其他开发者试用
□ 收集反馈
□ 迭代改进步骤 5:持续维护
markdown
# 维护你的技能包
定期:
- 更新依赖
- 修复 bug
- 添加新功能
- 改进文档
- 收集用户反馈
版本管理:
- 使用语义化版本
- 记录 CHANGELOG
- 维护向后兼容性8.4 技能包协作的未来趋势
趋势 1:AI 驱动的智能编排
markdown
未来方向:
AI 自动判断:
- 应该调用哪个技能
- 技能之间的最优顺序
- 是否需要并行执行
示例:
AI 分析用户需求 → 自动生成技能调用流程趋势 2:跨平台技能共享
markdown
未来方向:
技能市场:
- 发布你的技能
- 发现他人的技能
- 评价和推荐
标准化接口:
- 统一的技能格式
- 跨平台兼容
- 即插即用趋势 3:自适应学习
markdown
未来方向:
技能自学习:
- 记录执行历史
- 分析成功率
- 自动优化参数
个性化调整:
- 适应用户习惯
- 优化执行策略
- 提供个性化建议趋势 4:可视化编排
markdown
未来方向:
图形化界面:
- 拖拽式技能组合
- 流程可视化
- 实时监控
调试工具:
- 断点调试
- 单步执行
- 变量查看本章小结
本章总结了:
8大设计原则:单一职责、明确边界、无状态、可测试、错误处理、可组合、幂等性、可观测
10种常见反模式:上帝技能、过度抽象、隐藏依赖、配置地狱、过度并行、魔法数字、错误消息、过早优化、边界条件、文档缺失
设计流程:需求分析 → 架构设计 → 技能实现 → 测试验证 → 持续维护
未来趋势:AI 编排、跨平台共享、自适应学习、可视化编排
课程总结
恭喜你完成了《技能包设计模式:从理论到实践》课程!
你现在掌握了:
- ✅ 技能包的核心设计理念
- ✅ 8种经典设计模式的应用
- ✅ 最佳实践与反模式识别
- ✅ 设计自己技能包生态系统的能力
下一步行动:
- 选择一个实际项目
- 应用学到的模式
- 设计你的第一个技能包
- 持续迭代改进
记住:
- 实践出真知
- 时间是检验真理的唯一标准
- 用AI,但不盲从
- 辩证统一,不神话不妖魔化
延伸阅读
- Design Patterns: Elements of Reusable Object-Oriented Software
- Clean Code: A Handbook of Agile Software Craftsmanship
- The Pragmatic Programmer
最终练习
实践项目:选择一个你经常做的工作流程,设计一个技能包来自动化它。
技能审查:审查一个现有的技能包,识别其中的设计模式和反模式。
生态系统:为你的团队设计一个技能包生态系统架构图。
感谢你的学习!现在去创造属于你自己的技能包吧! 🚀