发布和调用 WorkItem API 服务

使用 AI Studio SDK 管理一个指定 WorkItem 节点和版本的 API 服务。服务的发布、启用、调用和停用都使用同一节点 ID 与版本。

任务流程

先用节点 ID 和版本绑定服务,再提交发布配置并读取服务信息。启用后可发起调用;调用结果包含状态、结果或错误信息。停止接受调用时,停用服务并重新读取服务信息确认状态。

准备

需要的内容

如何取得

在本页中的作用

已认证的客户端和工作区 ID

在首次接入流程中创建或选择。

确定资源访问和发布范围。

WorkItem 节点 ID 和版本

从已确认的 WorkItem 资源结果取得。

选择要管理的服务版本。

发布配置

由服务负责人确定版本,必要时提供计算资源、超时、并发和限流设置。

发布或更新服务。

调用信息

由服务定义提供服务名、类型、版本和负载。

发起一次服务调用。

发布并启用服务

下面的示例发布服务并启用它。发布和启用都返回服务信息;在把服务用于业务调用前,读取返回信息或执行应用自己的可用性检查。

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 = client.workspace("<workspace-id>")
service = workspace.workitem_api_service("<node-id>", "<version>")
published = service.publish(
    sdk.WorkitemAPIServicePublishSpec(
        version="<version>",
        compute_resource_id="<compute-resource-id>",
        timeout_seconds=30,
        max_concurrency=1,
        rate_limit_per_min=60,
    )
)
enabled = service.enable()

print(published.service.status)
print(enabled.service.status)
package main

import (
	"context"
	"fmt"
	"os"

	sdk "github.com/matrixorigin/matrixflow/sdk/go-sdk"
)

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)
	}
	workspace, err := client.Workspace("<workspace-id>")
	if err != nil {
		panic(err)
	}
	service, err := workspace.WorkitemAPIService("<node-id>", "<version>")
	if err != nil {
		panic(err)
	}
	published, err := service.Publish(ctx, sdk.WorkitemAPIServicePublishSpec{
		Version:           "<version>",
		ComputeResourceID: "<compute-resource-id>",
		TimeoutSeconds:    30,
		MaxConcurrency:    1,
		RateLimitPerMin:   60,
	})
	if err != nil {
		panic(err)
	}
	enabled, err := service.Enable(ctx)
	if err != nil {
		panic(err)
	}

	fmt.Println(published.GetService().GetStatus())
	fmt.Println(enabled.GetService().GetStatus())
}

调用服务

继续使用同一服务引用,提供服务名、类型、版本和非空负载。调用响应中的状态、结果和错误信息用于判断本次业务调用的结果;请求返回不代表业务已经成功。

response = service.invoke(
    sdk.WorkitemAPIServiceInvokeSpec(
        "<service-name>",
        "<service-type>",
        "<version>",
        {"<input-name>": "<input-value>"},
    )
)

print(response.result.status)
print(response.result.result)
print(response.result.error)
response, err := service.Invoke(ctx, sdk.WorkitemAPIServiceInvokeSpec{
	ServiceName: "<service-name>",
	Type:        "<service-type>",
	Version:     "<version>",
	Payload:     map[string]any{"<input-name>": "<input-value>"},
})
if err != nil {
	panic(err)
}

fmt.Println(response.GetResult().GetStatus())
fmt.Println(response.GetResult().GetResult())
fmt.Println(response.GetResult().GetError())

停用服务

不再接受调用前,停用服务并读取服务信息确认当前状态。服务引用没有独立删除操作;WorkItem 本身的生命周期应按对应资源流程处理。

disabled = service.disable()
current = service.info()

print(disabled.service.status)
print(current.service.status)
disabled, err := service.Disable(ctx)
if err != nil {
	panic(err)
}
current, err := service.Info(ctx)
if err != nil {
	panic(err)
}

fmt.Println(disabled.GetService().GetStatus())
fmt.Println(current.GetService().GetStatus())

下一步

最后更新于