You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Argo Python SDK提交工作流时如何传入params.json参数文件

解决方案

Argo官方Python SDK没有封装CLI的-f参数文件读取逻辑,CLI执行argo submit -f params.json时,本质是先读取参数文件内容,将参数合并到工作流清单的spec.arguments.parameters字段后再提交给服务端,SDK没有单独接收params文件的接口参数,你需要手动实现这部分逻辑。

实现步骤

  • 读取params.json的文件内容,得到扁平键值对格式的参数
  • 将键值对转换为Argo工作流要求的参数结构:每个参数为{"name": "参数名", "value": "参数值"}的字典
  • 将转换后的参数合并到加载好的workflow manifest中,同名参数直接覆盖,不存在的参数追加;如果manifest原本没有对应的参数层级结构,先初始化避免KeyError
  • 将合并完参数的manifest传入create_workflow接口提交即可

修改后的完整代码

import os
import json
from pprint import pprint
import yaml
from pathlib import Path

import argo_workflows
from argo_workflows.api import workflow_service_api
from argo_workflows.model.io_argoproj_workflow_v1alpha1_workflow_create_request import \
    IoArgoprojWorkflowV1alpha1WorkflowCreateRequest

configuration = argo_workflows.Configuration(host="https://localhost:2746")
configuration.verify_ssl = False

# 加载工作流清单
with open("workflows/workflow.yaml", "r") as f:
    manifest = yaml.safe_load(f)

# 处理params.json参数
with open("params.json", "r") as f:
    file_params = json.load(f)

# 转换为Argo标准参数格式
params_to_apply = [{"name": k, "value": v} for k, v in file_params.items()]

# 初始化manifest参数结构,避免KeyError
manifest.setdefault("spec", {}).setdefault("arguments", {}).setdefault("parameters", [])
existing_params = manifest["spec"]["arguments"]["parameters"]
existing_param_index = {p["name"]: idx for idx, p in enumerate(existing_params)}

# 合并参数:同名覆盖,异名追加
for param in params_to_apply:
    if param["name"] in existing_param_index:
        existing_params[existing_param_index[param["name"]]]["value"] = param["value"]
    else:
        existing_params.append(param)

api_client = argo_workflows.ApiClient(configuration)
api_instance = workflow_service_api.WorkflowServiceApi(api_client)
api_response = api_instance.create_workflow(
    namespace="argo",
    body=IoArgoprojWorkflowV1alpha1WorkflowCreateRequest(workflow=manifest, _check_type=False),
    _check_return_type=False)
pprint(api_response)

注意事项

  • 上述逻辑和官方CLI的-f参数行为完全一致:不会提前校验参数是否在工作流中定义,传入的额外参数会随请求提交,工作流运行时未引用的参数会自动忽略
  • params.json中的非字符串类型值(数字、布尔值等)不需要手动转字符串,SDK序列化时会自动处理为Argo兼容格式

内容的提问来源于stack exchange,提问作者user10283726

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:45:40