检查和导入技能包

读取本地技能 ZIP 包,检查清单及文件信息,再按调用方选择将同一包导入工作区。

准备

  1. 配置 SDK 和个人访问令牌。

  2. 选择工作区并获取工作区 ID。

  3. 技能 ZIP 包:从技能提供方取得,或按技能包格式打包一个含 SKILL.md 的目录,保存到本地。

检查并按需导入技能包

先设置 SKILL_ARCHIVE,例如 export SKILL_ARCHIVE='./skill-package.zip'。默认仅检查并输出名称、摘要和警告;确认包内容后,设置 IMPORT_SKILL=1 再运行会创建技能。

import os

import moi_product_sdk as sdk

client = sdk.new_with_personal_access_token(
    os.environ["PRODUCT_API_BASE_URL"], os.environ["PRODUCT_API_KEY"]
)
workspace_id = os.environ["WORKSPACE_ID"]
workspace = client.workspace(workspace_id)
from pathlib import Path
archive = Path(os.environ["SKILL_ARCHIVE"])
data = archive.read_bytes()
service = workspace.agents()
inspection = service.inspect_skill_package(archive.name, data)
print("技能名称:", inspection.get("name"))
print("包摘要:", inspection.get("archive_digest"))
print("警告:", inspection.get("warnings"))
if os.environ.get("IMPORT_SKILL") == "1":
    result = service.import_skill_package(archive.name, data)
    skill = result.get("skill") or {}
    print("技能 ID:", skill.get("id"), "名称:", skill.get("name"), "版本:", skill.get("version"))
package main

import (
	"bytes"
	"context"
	"fmt"
	sdk "github.com/matrixorigin/matrixflow/sdk/go-sdk"
	"os"
	"path/filepath"
)

func main() {
	ctx := context.Background()
	client, err := sdk.NewWithPersonalAccessToken(os.Getenv("PRODUCT_API_BASE_URL"), os.Getenv("PRODUCT_API_KEY"))
	if err != nil {
		panic(err)
	}
	workspaceID := os.Getenv("WORKSPACE_ID")
	workspace, err := client.Workspace(workspaceID)
	if err != nil {
		panic(err)
	}
	_ = workspace
	archivePath := os.Getenv("SKILL_ARCHIVE")
	data, err := os.ReadFile(archivePath)
	if err != nil {
		panic(err)
	}
	service := workspace.Agents()
	inspection, err := service.InspectSkillPackage(ctx, filepath.Base(archivePath), bytes.NewReader(data))
	if err != nil {
		panic(err)
	}
	values, ok := inspection.AsMap()
	if !ok {
		panic("检查返回值不是对象")
	}
	fmt.Println("技能名称:", values["name"], "包摘要:", values["archive_digest"], "警告:", values["warnings"])
	if os.Getenv("IMPORT_SKILL") == "1" {
		imported, err := service.ImportSkillPackage(ctx, filepath.Base(archivePath), bytes.NewReader(data))
		if err != nil {
			panic(err)
		}
		result, ok := imported.AsMap()
		if !ok {
			panic("导入返回值不是对象")
		}
		skill, ok := result["skill"].(map[string]any)
		if !ok {
			panic("导入结果缺少技能对象")
		}
		fmt.Println("技能 ID:", skill["id"], "名称:", skill["name"], "版本:", skill["version"])
	}
}

检查后核对技能名称、包摘要和警告。导入成功后保存技能 ID 与版本,再按绑定技能配置使用。

最后更新于