
第28讲:Skill 部署与发布
掌握 Skill 的部署发布流程,让你的 Skill 正式上线服务用户。
一、部署前准备
1.1 发布检查清单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| □ 功能完整性 □ 核心功能已实现 □ 异常处理完善 □ 边界情况覆盖
□ 代码质量 □ 代码审查通过 □ 测试覆盖率达标 □ 无安全漏洞
□ 文档完善 □ 使用说明文档 □ API 文档 □ 更新日志
□ 配置准备 □ 生产环境配置 □ 密钥和凭证 □ 监控告警配置
|
1.2 环境配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import os
class Config: """基础配置""" DEBUG = False LOG_LEVEL = 'INFO' class DevelopmentConfig(Config): """开发环境""" DEBUG = True LOG_LEVEL = 'DEBUG' DATABASE_URL = 'sqlite:///dev.db'
class ProductionConfig(Config): """生产环境""" LOG_LEVEL = 'WARNING' DATABASE_URL = os.getenv('DATABASE_URL') API_KEY = os.getenv('API_KEY') config = { 'development': DevelopmentConfig, 'production': ProductionConfig, 'default': DevelopmentConfig }
|
二、各平台部署流程
2.1 Coze 部署
步骤:
创建 Bot
- 登录 Coze 平台
- 点击 "Create Bot"
- 填写名称和描述
配置 Prompt
1 2 3 4 5 6 7 8 9 10 11
| # Role 你是财务智能助手,专门帮助财务人员处理发票和报表。
# Skills - 发票识别与录入 - 财务报表生成 - 数据统计分析
# Constraints - 只处理财务相关数据 - 保护用户数据隐私
|
添加插件
测试验证
发布上线
- 点击 "Publish"
- 选择发布渠道(Discord、Telegram 等)
2.2 OpenClaw 部署
步骤:
准备代码
1 2 3 4 5
| my_skill/ ├── skill.py ├── requirements.txt └── README.md
|
编写 Skill
1 2 3 4 5 6 7 8 9 10 11 12
| from openclaw import Skill, Tool
class MySkill(Skill): name = "财务智能助手" description = "自动化财务处理" @Tool def recognize_invoice(self, image: str) -> str: """识别发票""" return "识别结果"
|
配置依赖
1 2 3 4
| # requirements.txt openpyxl>=3.0.0 pandas>=1.3.0 paddleocr>=2.6.0
|
提交部署
2.3 飞书 CLI 部署
步骤:
创建应用
- 登录飞书开放平台
- 创建企业自建应用
- 获取 App ID 和 App Secret
配置权限
开发 Skill
1 2 3 4 5 6 7
| from lark_cli import Skill, Message
class FeishuSkill(Skill): def on_message(self, message: Message): reply = self.process(message.text) self.send_message(message.chat_id, reply)
|
部署上线
三、版本管理
3.1 版本号规范
采用语义化版本(Semantic Versioning):
1 2 3 4 5 6
| 版本格式:主版本号.次版本号.修订号 示例:1.2.3
主版本号:重大更新,不兼容的 API 修改 次版本号:功能新增,向下兼容 修订号:问题修复,向下兼容
|
3.2 版本发布流程
1 2 3 4 5
| 1. 开发完成 → 2. 测试通过 → 3. 更新版本号 ↓ 4. 更新 CHANGELOG → 5. 打标签 → 6. 部署上线 ↓ 7. 验证功能 → 8. 通知用户
|
3.3 CHANGELOG 模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # Changelog
## [1.2.0] - 2024-01-15
### Added - 新增发票批量识别功能 - 支持 PDF 格式发票
### Changed - 优化报表生成速度,提升 50%
### Fixed - 修复日期格式识别错误
## [1.1.0] - 2024-01-01 ...
|
四、监控与运维
4.1 日志监控
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| import logging import sys
class SkillLogger: """Skill 日志记录器""" def __init__(self, name: str): self.logger = logging.getLogger(name) self.logger.setLevel(logging.INFO) console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) file_handler = logging.FileHandler(f'logs/{name}.log') file_handler.setLevel(logging.DEBUG) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) self.logger.addHandler(console_handler) self.logger.addHandler(file_handler) def info(self, message: str): self.logger.info(message) def error(self, message: str, exc_info=False): self.logger.error(message, exc_info=exc_info) def metric(self, name: str, value: float): """记录指标""" self.logger.info(f"METRIC: {name}={value}")
|
4.2 健康检查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| from typing import Dict import time
class HealthChecker: """健康检查""" def __init__(self): self.checks = {} def register(self, name: str, check_func): """注册检查项""" self.checks[name] = check_func def check_all(self) -> Dict: """执行所有检查""" results = {} for name, check_func in self.checks.items(): try: start = time.time() check_func() elapsed = time.time() - start results[name] = { 'status': 'healthy', 'response_time': elapsed } except Exception as e: results[name] = { 'status': 'unhealthy', 'error': str(e) } return results
health_checker = HealthChecker()
health_checker.register('database', lambda: db.ping())
health_checker.register('api', lambda: requests.get('/health'))
|
五、故障处理
5.1 故障分级
| 级别 | 描述 | 响应时间 | 处理措施 |
|---|
| P0 | 服务完全不可用 | 15分钟 | 立即回滚 |
| P1 | 核心功能异常 | 1小时 | 紧急修复 |
| P2 | 非核心功能异常 | 4小时 | 计划修复 |
| P3 | 轻微问题 | 24小时 | 下次迭代 |
5.2 回滚策略
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class RollbackManager: """回滚管理器""" def __init__(self): self.versions = [] self.current_version = None def deploy(self, version: str): """部署新版本""" if self.current_version: self.versions.append(self.current_version) self._do_deploy(version) self.current_version = version def rollback(self): """回滚到上一版本""" if not self.versions: raise Exception("没有可回滚的版本") previous_version = self.versions.pop() self._do_deploy(previous_version) self.current_version = previous_version def _do_deploy(self, version: str): """执行部署""" pass
|
六、实战练习
练习 1:部署到 Coze
将一个 Skill 部署到 Coze 平台并测试。
练习 2:版本发布
为一个 Skill 创建版本发布流程,包括:
练习 3:监控配置
配置日志监控和健康检查。
七、下节预告
下一讲我们将学习 用户反馈与迭代优化。
加入学习群
👉 加入AI编程学习交流群

本讲是《AI Skills 从入门到实践》系列课程的第28讲。
🎓 AI 编程实战课程
想系统学习 AI 编程?程序员晚枫的 AI 编程实战课 帮你从零上手!