检查和导入技能包¶
读取本地技能 ZIP 包,检查清单及文件信息,再按调用方选择将同一包导入工作区。
准备¶
技能 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 与版本,再按绑定技能配置使用。
最后更新于