# 部署工作流

使用 AI Studio SDK 将工作流定义部署到指定工作区。部署时由调用方提供工作流 ID；部署成功后返回绑定该 ID 的工作流引用，可继续用于启动运行。

(sdk-ai-studio-workflow-deploy-flow)=
## 任务流程

准备工作区、工作流名称、DSL 内容和工作流 ID。提交部署后保存工作流引用；部署请求返回不表示该工作流已经运行。需要执行时，在运行页面使用同一工作流 ID 启动一次运行。

(sdk-ai-studio-workflow-deploy-prepare)=
## 准备

| 需要的内容 | 如何取得 | 在本页中的作用 |
| --- | --- | --- |
| 已认证的客户端和工作区 ID | [绑定已有工作区](../getting-started/resource-model.md#sdk-ai-studio-resource-model-bind-workspace)。 | 确定部署的资源作用域。 |
| 工作流名称、DSL 内容和工作流 ID | 由工作流设计和调用方提供。 | 创建工作流定义并确定后续运行使用的标识。 |

本页只提交工作流定义，不解释 DSL 的语义，也不启动运行。

(sdk-ai-studio-workflow-deploy-submit)=
## 提交部署

下面的示例部署工作流，并保存返回的工作流引用。工作流 ID 必须由调用方提供；后续读取或启动运行时继续使用同一标识。

:::::{tab-set}
:sync-group: sdk-language

::::{tab-item} Python
:sync: python

```python
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>")
workflow, deployment = workspace.deploy_workflow(
    "<workflow-name>",
    "<workflow-dsl-yaml>",
    "<workflow-id>",
    sdk.with_workflow_description("<workflow-description>"),
)

print(workflow.id)
print(deployment)
```

::::

::::{tab-item} Go
:sync: go

```go
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)
	}
	workflow, deployment, err := workspace.DeployWorkflow(
	ctx,
	"<workflow-name>",
	"<workflow-dsl-yaml>",
	"<workflow-id>",
	sdk.WithWorkflowDescription("<workflow-description>"),
)
if err != nil {
	panic(err)
}

	fmt.Println(workflow.ID())
	fmt.Println(deployment)
}
```

::::

:::::

(sdk-ai-studio-workflow-deploy-next)=
## 下一步

部署后的工作流引用和工作流 ID 可交给[运行并跟踪工作流](workflow-runtime.md#sdk-ai-studio-workflow-run-start)启动一次运行。运行前仍需根据该工作流的输入定义准备本次输入。
