工作流定义

当前 Python 和 Go SDK 对工作流定义只提供创建操作;没有列表、详情、更新或删除方法。若自动化需要完整生命周期管理,应先确认目标 MOI 实例的 Product API,并通过受支持的 API 客户端调用,不能根据权限常量猜测端点。

使用内置文档处理链

高层 helper 接收工作流名称、源 Volume ID 和目标 Volume ID,返回工作流 ID。它创建以下固定节点链:

RootNode → DocumentParseNode → ChunkNode → EmbeddingNode/EmbeddingNodeV2 → WriteNode

Python 实现当前使用 EmbeddingNodeV2,Go 实现使用 EmbedNode。两者都设置 interval = -1,在文件载入源 Volume 时触发。

from moi import RawClient, SDKClient

raw = RawClient("https://api.example.com", "your-api-key")
client = SDKClient(raw)

workflow_id = client.create_document_processing_workflow(
    "contract-processing",
    "source-volume-id",
    "target-volume-id",
)
print(workflow_id)
package main

import (
    "context"
    "fmt"
    "log"

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

func main() {
    raw, err := sdk.NewRawClient("https://api.example.com", "your-api-key")
    if err != nil {
        log.Fatal(err)
    }
    client := sdk.NewSDKClient(raw)

    workflowID, err := client.CreateDocumentProcessingWorkflow(
        context.Background(),
        "contract-processing",
        sdk.VolumeID("source-volume-id"),
        sdk.VolumeID("target-volume-id"),
    )
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(workflowID)
}

该 helper 支持源码中列出的文本、PDF、Office、CSV 和 HTML 文件类型。它是固定模板,不接受节点替换、模型选择或分块参数;需要这些能力时使用低层创建接口。

创建自定义节点图

Python 的 RawClient.create_workflow(request) 接收字典。Go 的 RawClient.CreateWorkflow(ctx, *WorkflowMetadata) 使用公开类型:

  • WorkflowMetadata:名称、源/目标 Volume、ProcessMode、文件类型和节点图;

  • CatalogWorkflowNodesConnections

  • CatalogWorkflowNodeIDTypeInitParameters

  • CatalogWorkflowConnection:发送/接收节点及可选端口。

source_volume_namessource_volume_idsprocess_mode 以及每个节点的 init_parameters 不能序列化为 null。两个 RawClient 会将缺失集合补为空集合,将缺失的 process_mode 补为 {"interval": -1, "offset": 0}

不要从 SDK helper 中复制节点类型后假定目标实例一定支持。产品侧可用 WorkItem 以目标实例的实时清单为准;当前 SDK 没有封装该清单。

创建响应包含 idversion、源/目标 Volume、时间和流程间隔等元数据。至少持久化返回的 id;后续作业查询需要它。

更新和删除

当前 SDK 不公开读取、更新和删除工作流的方法。创建前应在测试工作区验证节点图和目标写入方式,避免依赖“创建后再补配置”。需要修改时,使用目标实例明确发布的 Product API 或 UI;不要调用 RawClient 的内部 _request_json/postJSON 自行拼接未公开路径。