第28讲:Skill 部署与发布

第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
# config.py
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 部署

步骤:

  1. 创建 Bot

    • 登录 Coze 平台
    • 点击 "Create Bot"
    • 填写名称和描述
  2. 配置 Prompt

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # Role
    你是财务智能助手,专门帮助财务人员处理发票和报表。

    # Skills
    - 发票识别与录入
    - 财务报表生成
    - 数据统计分析

    # Constraints
    - 只处理财务相关数据
    - 保护用户数据隐私
  3. 添加插件

    • 搜索并添加所需插件
    • 配置插件参数
  4. 测试验证

    • 在测试窗口验证功能
    • 检查响应是否符合预期
  5. 发布上线

    • 点击 "Publish"
    • 选择发布渠道(Discord、Telegram 等)

2.2 OpenClaw 部署

步骤:

  1. 准备代码

    1
    2
    3
    4
    5
    # 项目结构
    my_skill/
    ├── skill.py # Skill 主文件
    ├── requirements.txt # 依赖
    └── README.md # 说明文档
  2. 编写 Skill

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # skill.py
    from openclaw import Skill, Tool

    class MySkill(Skill):
    name = "财务智能助手"
    description = "自动化财务处理"

    @Tool
    def recognize_invoice(self, image: str) -> str:
    """识别发票"""
    # 实现逻辑
    return "识别结果"
  3. 配置依赖

    1
    2
    3
    4
    # requirements.txt
    openpyxl>=3.0.0
    pandas>=1.3.0
    paddleocr>=2.6.0
  4. 提交部署

    1
    2
    # 使用 OpenClaw CLI
    openclaw deploy .

2.3 飞书 CLI 部署

步骤:

  1. 创建应用

    • 登录飞书开放平台
    • 创建企业自建应用
    • 获取 App ID 和 App Secret
  2. 配置权限

    • 申请所需权限
    • 配置事件订阅
  3. 开发 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)
  4. 部署上线

    • 配置服务器地址
    • 发布应用版本
    • 提交审核

三、版本管理

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
# utils/logger.py
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
# health_check.py
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())

# 注册 API 检查
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
# rollback.py
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 创建版本发布流程,包括:

  • 更新版本号
  • 编写 CHANGELOG
  • 打标签

练习 3:监控配置

配置日志监控和健康检查。

七、下节预告

下一讲我们将学习 用户反馈与迭代优化


加入学习群

👉 加入AI编程学习交流群

点击加入


本讲是《AI Skills 从入门到实践》系列课程的第28讲。

🎓 AI 编程实战课程

想系统学习 AI 编程?程序员晚枫的 AI 编程实战课 帮你从零上手!