共计 2039 个字符,预计需要花费 6 分钟才能阅读完成。
OpenCode Skill 核心概念解析
在开始动手开发之前,我们需要先理解几个关键概念:

-
技能类型:OpenCode 中的 Skill 可以分为对话型、工具型和混合型。对话型技能以自然语言交互为主,比如客服机器人;工具型技能则更像一个功能插件,比如天气查询;混合型则兼具两者特点。
-
触发机制:Skill 的触发方式主要有两种:通过特定关键词(intent)触发,或者通过用户主动调用(比如输入 ” 天气查询 ”)。
-
数据流:一个典型的 Skill 数据流包括:用户输入 -> 平台解析 -> 触发 Skill -> Skill 处理 -> 返回结果 -> 平台渲染输出。理解这个流程对后续调试非常重要。
开发环境配置
-
安装 CLI 工具:
npm install -g opencode-cli安装完成后,可以通过
opencode --version验证是否成功。 -
项目初始化:
opencode init weather-skill cd weather-skill这个命令会创建一个标准的 Skill 项目结构,包含
manifest.json(技能元数据)和src目录(代码存放处)。 -
安装依赖:
pip install -r requirements.txt
实战:开发天气查询 Skill
技能元数据配置
编辑 manifest.json 文件,这是技能的 ” 身份证 ”:
{
"name": "weather-skill",
"description": "查询指定城市的天气情况",
"version": "1.0.0",
"triggers": ["天气", "weather"],
"slots": ["city"]
}
核心逻辑实现
在 src/main.py 中编写核心代码:
import logging
from opencode.sdk import Skill, Response
logger = logging.getLogger(__name__)
class WeatherSkill(Skill):
def __init__(self):
super().__init__()
# 模拟天气数据
self.weather_data = {
"北京": "晴,25°C",
"上海": "多云,23°C",
"广州": "雷阵雨,28°C"
}
def handle(self, request):
try:
city = request.slot("city")
if not city:
return Response.text("请问您想查询哪个城市的天气?")
weather = self.weather_data.get(city, "暂无该城市天气信息")
logger.info(f"查询 {city} 天气成功")
return Response.text(f"{city}的天气是:{weather}")
except Exception as e:
logger.error(f"处理天气查询出错: {str(e)}")
return Response.text("天气查询服务暂时不可用,请稍后再试")
# 注册技能
def create_skill():
return WeatherSkill()
输入输出规范
- 输入 :平台会传递一个包含
intent和slots的 JSON 对象 - 输出 :需要返回一个
Response对象,支持文本、卡片等多种形式
本地调试与测试
-
启动本地调试服务器:
opencode serve -
测试请求示例:
curl -X POST http://localhost:8080 \ -H "Content-Type: application/json" \ -d '{"intent":"weather","slots":{"city":" 北京 "}}' -
单元测试:创建
tests/test_weather.py:
import unittest
from src.main import WeatherSkill
class TestWeatherSkill(unittest.TestCase):
def test_weather_query(self):
skill = WeatherSkill()
response = skill.handle({"slots": {"city": "北京"}})
self.assertIn("北京", response.text)
生产环境部署
-
构建技能包:
opencode build -
上传到 OpenCode 平台:通过开发者后台或 CLI 工具上传 zip 包
-
配置技能权限:确保你的技能有访问天气 API 的权限
常见问题排查
- 错误码:
- 400:请求参数错误
- 403:权限不足
-
500:服务端内部错误
-
查看日志:
opencode logs --skill=weather-skill
扩展练习建议
- 添加多语言支持,根据用户语言返回不同语言的天气信息
- 集成真实天气 API,如和风天气或 OpenWeatherMap
- 增加天气预警功能,当有极端天气时主动提醒用户
通过这个简单的天气查询 Skill 开发,你应该已经掌握了 OpenCode 技能开发的基本流程。在实际项目中,你可能需要处理更复杂的交互逻辑和业务场景,但核心的开发模式和调试方法都是相通的。
