# 查看工作流产物和数据血缘

使用 AI Studio SDK 读取已有产物的概览、节点和输出块，并在需要时为节点创建新的重运行记录。本页不部署或启动工作流；这些操作见[运行并跟踪工作流](workflow-runtime.md)。

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

先提供已确认的产物 ID，读取产物概览。概览或其他已确认的资源结果可提供节点 ID；再读取该节点的详情或输出块。创建节点重运行不会覆盖原运行，而是返回新的重运行记录。

```text
产物 ID
  │
  ▼
读取产物概览和节点
  │
  ▼
节点 ID、节点详情或输出块
  │
  └── 创建新的节点重运行记录
```

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

| 需要的内容 | 如何取得 | 在本页中的作用 |
| --- | --- | --- |
| 已认证的客户端 | 在首次接入流程中创建。 | 访问 AI Studio 资源。 |
| 工作区 ID | 从工作区创建、列表或操作者选择中取得。 | 确定产物的资源作用域。 |
| 产物 ID | 从已确认的资源结果或操作者选择中取得。 | 选择要查看的产物。 |
| 节点 ID | 从产物概览、节点列表或其他已确认资源结果中取得。 | 选择要查看或重运行的节点。 |

(sdk-ai-studio-workflow-lineage-read)=
## 读取产物和节点

下面的示例读取产物概览和指定节点的详情。节点 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>")
artifact = workspace.artifact("<artifact-id>")
overview = artifact.overview()
node = artifact.node("<node-id>")
node_info = node.info()

print(overview)
print(node_info)
```

::::

::::{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)
	}
	artifact, err := workspace.Artifact("<artifact-id>")
	if err != nil {
		panic(err)
	}
	overview, err := artifact.Overview(ctx)
	if err != nil {
		panic(err)
	}
	node, err := artifact.Node("<node-id>")
	if err != nil {
		panic(err)
	}
	nodeInfo, err := node.Info(ctx)
	if err != nil {
		panic(err)
	}
	fmt.Println(overview)
	fmt.Println(nodeInfo)
}
```

::::

:::::

(sdk-ai-studio-workflow-lineage-rerun)=
## 创建节点重运行

继续使用上一步的节点引用创建重运行。返回的新记录表示重运行已被创建；请在运行相关流程中检查其后续状态和结果。

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

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

```python
rerun = node.rerun()
print(rerun)
```

::::

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

```go
rerun, err := node.Rerun(ctx)
if err != nil {
	panic(err)
}
fmt.Println(rerun)
```

::::

:::::

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

- [运行并跟踪工作流](workflow-runtime.md)
- [发布和调用 WorkItem API 服务](workitem-api-services.md)
