Conductor 多语言客户端 SDK 生态指南:从 Clojure、C、Go、Python 到官方七语言 SDK 的跨语言 Worker 开发
2026/9/10 3:26:50 网站建设 项目流程

Conductor 多语言客户端 SDK 生态指南:从 Clojure、C#、Go、Python 到官方七语言 SDK 的跨语言 Worker 开发

【免费下载链接】conductorConductor is an event driven agentic workflow engine providing durable and highly resilient execution engine for applications and AI Agents项目地址: https://gitcode.com/GitHub_Trending/co/conductor

Conductor 是一个事件驱动的 Agentic 工作流引擎,其核心设计之一便是多语言(Polyglot)编程模型:同一个工作流里的不同任务可以由不同语言编写的 Worker 执行,开发者可以按任务场景选择最合适的语言。本文以仓库中 polyglot-clients/README.md 为骨架,结合仓库内 SDK 官方文档与源码模块,系统梳理 Conductor 的客户端 SDK 清单、各语言快速上手方式、底层协议支撑与生态共建路径,读完即可为自己的团队选定语言栈并落地第一个 Worker。

多语言编程模型:一个工作流,多种语言的任务

仓库根目录下的 conductor-clients/README.md 开宗明义地说明了这一设计:

Conductor supports polyglot programming model. A workflow can have tasks written in different languages allowing developers to choose the best language for the task.

这意味着:

  • 编排与执行分离:工作流定义(WorkflowDef)只描述任务拓扑,不绑定具体语言;任务实际由 Worker 进程轮询执行,Worker 可以用任意受支持语言编写;
  • 语言按需选择:数据密集型任务可以用 Go/C++ 风格的高并发 Worker,AI 相关任务可以用 Python/Ruby 的生态,前端团队可以用 TypeScript 维护自己的任务;
  • 任务间通过输入/输出数据交互:语言差异被任务输入输出(inputData/outputData)屏蔽,跨语言任务链无需额外转换层。

正是这种语言无关的架构,催生了仓库内外一整套面向不同语言用户的客户端 SDK。本文聚焦的 polyglot-clients/README.md 正是这份"语言客户端 SDK 清单"的入口文档。

两份 SDK 清单:conductor-sdk 与仓库内官方文档

要摸清 Conductor 的多语言 SDK 全景,需要同时看两份材料:一份是本文主题文档 polyglot-clients/README.md 维护的社区 SDK 清单;另一份是仓库文档 docs/documentation/clientsdks/index.md 记录的七种官方 SDK

polyglot-clients/README.md 中的 SDK 清单

polyglot-clients/README.md 明确指出:各语言客户端 SDK 由独立的conductor-sdk仓库统一维护,并列出当前可用客户端:

语言SDK 名称(仓库内文档记录)状态
Clojureconductor-clojure可用
C#conductor-csharp可用
Goconductor-go可用
Pythonconductor-python可用
JavaScriptconductor-javascript开发中(欢迎提交 PR)

其中 JavaScript SDK 明确标注为In progress (PRs encouraged!),即仓库作者期待社区贡献来补齐这块拼图——这也直接反映了多语言 SDK 生态的开放共建模式。

conductor-clients 与七种官方 SDK

仓库根目录的另一份清单 conductor-clients/README.md 从"支持的语言"角度给出了对应关系:

语言客户端 SDK
Javajava-sdk
Pythonpython-sdk
Golanggo-sdk
Typescripttypescript-sdk
.NETcsharp-sdk

而 docs/documentation/clientsdks/index.md 进一步把官方 SDK 扩充为七种语言,每种都有独立的参考文档页(安装、Worker 编写、可运行示例),并声明所有 SDK 均为开源:

语言SDK 文档核心特性(摘自官方文档)
Javajava-sdk.mdSpring Boot 集成、注解式 Worker、线程管理、测试框架
Pythonpython-sdk.md装饰器定义任务、异步支持、工作流管理
Gogo-sdk.md类型安全的任务定义、struct 输入输出、并发 Worker 执行
JavaScript / TypeScriptjs-sdk.md完整 TypeScript 支持、Promise 风格 API、工作流管理
C# / .NETcsharp-sdk.md依赖注入、async/await 模式、NuGet 包
Rubyruby-sdk.md惯用 Ruby 的任务定义与工作流管理
Rustrust-sdk.md类型安全任务定义、异步运行时、零成本抽象

此外,该文档还提到 Java、Python、JavaScript/TypeScript、C# 四种 SDK 额外支持统一的 Conductor Agent 上手路径。如果你是初学者,官方推荐先走 快速开始(first-workflow.md、first-worker.md、connect.md),再回到各语言参考页研究细节。

各语言 SDK 快速上手

下面的示例均继承自仓库内各 SDK 官方文档,可直接对照原文复制运行。所有示例都假设你已经有一个可访问的 Conductor Server(默认http://localhost:8080)。

Java:注解与自动轮询的 Worker 框架

Java SDK 要求Java 21+,通过 Maven Central 分发(java-sdk.md)。

Gradle 引入:

dependencies { implementation 'org.conductoross:conductor-client:VERSION' // 可选:引入 Spring 模块以获得自动配置 // implementation 'org.conductoross:conductor-client-spring:VERSION' }

Maven 引入:

<dependency> <groupId>org.conductoross</groupId> <artifactId>conductor-client</artifactId> <version>VERSION</version> </dependency>

编写 Worker:Worker 是实现Worker接口的 Java 类,负责轮询 Conductor 上的任务并执行:

public class GreetWorker implements Worker { @Override public String getTaskDefName() { return "greet"; } @Override public TaskResult execute(Task task) { String name = (String) task.getInputData().get("name"); TaskResult result = new TaskResult(task); result.setStatus(TaskResult.Status.COMPLETED); result.addOutputData("greeting", "Hello, " + name + "!"); return result; } }

主程序通过OrkesClients构建 API 客户端、用TaskRunnerConfigurer启动自动轮询线程,并通过WorkflowExecutor以代码方式注册并启动工作流,完整的Main.java示例见 java-sdk.md。

Python:装饰器风格的 Worker

Python SDK 一条命令安装(python-sdk.md):

pip install conductor-python

Step 1:以代码定义工作流。ConductorWorkflow构建名为greetings的工作流,用>>运算符串起任务,并声明输出参数:

from conductor.client.workflow.conductor_workflow import ConductorWorkflow workflow = ConductorWorkflow(name='greetings', version=1, executor=executor) greet_task = greet(task_ref_name='greet_ref', name=workflow.input('name')) workflow >> greet_task workflow.output_parameters({'result': greet_task.output('result')}) workflow.register(overwrite=True)

Step 2:用装饰器写 Worker。Worker 就是被@worker_task装饰的普通 Python 函数:

from conductor.client.worker.worker_task import worker_task # register_task_def=True 便于本地快速验证;生产环境建议单独管理任务定义 @worker_task(task_definition_name='greet', register_task_def=True) def greet(name: str) -> str: return f'Hello {name}'

Step 3:组装并运行。quickstart.py中通过ConfigurationOrkesClientsTaskHandlerstart_processes()启动多进程轮询)把 Worker 注册进 Conductor,随后通过WorkflowExecutor启动工作流并打印workflow_id。完整的可运行代码见 python-sdk.md。

Go:类型安全的流程定义

Go SDK 支持go mod初始化后直接拉取(go-sdk.md):

mkdir hello_world cd hello_world go mod init hello_world go get github.com/conductor-sdk/conductor-go

hello_world示例中的CreateWorkflow函数为例,工作流完全由类型安全的 Go 代码构建:

func CreateWorkflow(executor *executor.WorkflowExecutor) *workflow.ConductorWorkflow { wf := workflow.NewConductorWorkflow(executor). Name("greetings"). Version(1). Description("Greetings workflow - Greets a user by their name"). TimeoutPolicy(workflow.TimeOutWorkflow, 600) greet := workflow.NewSimpleTask("greet", "greet_ref"). Input("person_to_be_greated", "${workflow.input.name}") wf.Add(greet) // 通过 OutputParameters 声明工作流输出,例如将 greet 任务的输出暴露为 "greetings" // ... }

其中${workflow.input.name}是工作流输入参数引用语法,greet_ref是任务引用名(task reference name),后续输出参数通过OutputRef引用任务结果。完整的三步走(建工作流 → 写 Worker → 启动执行器)示例见 go-sdk.md。

JavaScript / TypeScript:Promise 风格 API

JavaScript SDK 面向 TypeScript 优先(js-sdk.md):

npm install @io-orkes/conductor-javascript

Step 1:以代码定义工作流:

import { ConductorWorkflow, simpleTask } from "@io-orkes/conductor-javascript"; const workflow = new ConductorWorkflow(executor, "greetings") .add(simpleTask("greet_ref", "greet", { name: "${workflow.input.name}" })) .outputParameters({ result: "${greet_ref.output.result}" }); await workflow.register();

Step 2:用@worker装饰器写 Worker:

import { worker } from "@io-orkes/conductor-javascript"; @worker({ taskDefName: "greet" }) async function greet(task: Task) { return { status: "COMPLETED", outputData: { result: `Hello ${task.inputData.name}` }, }; }

Step 3:quickstart.ts中组合OrkesClientsTaskHandler与上述ConductorWorkflow完成注册与启动,完整示例见 js-sdk.md。

C# / .NET:DI 与 async/await

C# SDK 通过 NuGet 分发(csharp-sdk.md):

dotnet add package conductor-csharp --version VERSION

快速上手代码展示了从配置到启动的完整链路:

using Conductor.Client; using Conductor.Definition; using Conductor.Definition.TaskType; using Conductor.Executor; var configuration = new Configuration { BasePath = Environment.GetEnvironmentVariable("CONDUCTOR_SERVER_URL") ?? "http://localhost:8080/api" }; var workflow = new ConductorWorkflow() .WithName("greetings") .WithVersion(1); var greetTask = new SimpleTask("greet", "greet_ref") .WithInput("name", workflow.Input("name")); workflow.WithTask(greetTask); var executor = new WorkflowExecutor(configuration); executor.RegisterWorkflow(workflow, overwrite: true); var workflowId = executor.StartWorkflow(new StartWorkflowRequest { Name = "greetings", Version = 1, Input = new Dictionary<string, object> { ["name"] = "Conductor" } });

值得注意的是,SDK 默认从环境变量CONDUCTOR_SERVER_URL读取服务端地址;若对接 Orkes 云服务,需要手动构造Configuration.AuthenticationSettingsOrkesAuthenticationSettings,读取CONDUCTOR_AUTH_KEY/CONDUCTOR_AUTH_SECRET),SDK 不会自动做这一层环境变量映射。

Ruby:Python SDK 的全功能对等实现

Ruby SDK 以 gem 形式发布(ruby-sdk.md):

gem 'conductor_ruby' # 加入 Gemfile # 或直接安装 gem install conductor_ruby

其官方文档声明的核心特性包括:

  • 与 Python SDK 功能完全对等(Full Feature Parity);
  • Ruby 惯用工作流 DSL——基于块的语法,覆盖 25+ 任务类型;
  • Worker 框架——多线程任务执行,支持类式与块式两种 Worker;
  • LLM/AI 任务——Chat Completion、Embeddings、RAG、图像/音频生成;
  • Orkes 云支持——认证、Secrets、集成与 Prompt;
  • 测试完备——400+ 单元测试、110 集成测试。

快速开始代码从读取环境变量CONDUCTOR_SERVER_URL构造Conductor::Configuration开始,完整示例见 ruby-sdk.md。

Rust:宏驱动与零成本抽象

Rust SDK 以 crate 形式引入(rust-sdk.md):

[dependencies] conductor = "VERSION" tokio = { version = "1", features = ["full"] }

若想使用#[worker]宏(类似 Python 的@worker_task装饰器),需要启用macrosfeature:

[dependencies] conductor = { version = "VERSION", features = ["macros"] } conductor-macros = "VERSION" tokio = { version = "1", features = ["full"] }

工作流定义同样是类型安全、链式调用的:

use conductor::models::{WorkflowDef, WorkflowTask}; fn greetings_workflow() -> WorkflowDef { WorkflowDef::new("greetings") .with_version(1) .with_task( WorkflowTask::simple("greet", "greet_ref") .with_input_param("name", "${workflow.input.name}") ) .with_output_param("result", "${greet_ref.output.result}") }

协议层支撑:HTTP 与 gRPC 双通道

多语言 SDK 之所以能"百花齐放",底层依赖的是语言无关的通信协议。仓库 grpc/src/main/proto 目录下完整定义了 gRPC 接口层:

  • workflow_service.proto——工作流启停、状态查询;
  • task_service.proto——任务轮询、确认、更新(Worker 的核心通道);
  • metadata_service.proto——工作流/任务定义的注册与查询;
  • event_service.proto——事件订阅与发布;
  • search.proto——按条件检索执行记录。

grpc/目录下另有model/子目录承载数据模型,仓库中的 grpc-client 与grpc-server模块则实现了协议的服务端与 Java 客户端。任何语言只要实现了这套协议(或等价的 HTTP REST API),就能成为 Conductor 的"一等公民"客户端——这正是 polyglot 生态得以成立的基础设施。

如何选择合适的 SDK

综合前文两份清单,可以按以下维度决策:

  • 团队语言栈优先:编排与任务混排的场景下,用团队最熟的语言写 Worker 的维护成本最低;官方七种 SDK(Java、Python、Go、JS/TS、C#、Ruby、Rust)已覆盖主流后端语言;
  • AI/LLM 任务密集:优先考虑 Python 与 Ruby SDK——两者都原生支持装饰器/块式任务定义,且 Ruby 官方文档明确声明了 LLM/AI 任务(Chat Completion、Embeddings、RAG、图像/音频生成)支持;
  • 性能敏感的高并发 Worker:Go(并发 Worker 执行、struct 输入输出)与 Rust(零成本抽象、异步运行时)更契合;
  • 已有 Spring Boot 或 .NET 基础设施:Java(Spring 自动配置)与 C#(依赖注入、async/await)能无缝融入现有工程;
  • 社区维护清单:polyglot-clients/README.md 记录的 Clojure SDK 可作为 JVM 生态的补充选项。

生态共建:开发中 SDK 与贡献路径

polyglot-clients/README.md 特别将JavaScript SDK 标记为开发中(In progress,PRs encouraged)。如果你恰好是某语言的拥趸,且该语言尚无官方 SDK,最直接的参与方式就是参照已有 SDK 的实现(协议定义见 grpc/src/main/proto,Java 客户端实现见 grpc-client)提交 PR,填补生态空白。

需要说明的是,各语言 SDK 的最终发布物(如 Maven 坐标org.conductoross:conductor-client、pip 包conductor-python、npm 包@io-orkes/conductor-javascript、NuGet 包conductor-csharp、gemconductor_ruby)由官方在对应仓库独立维护,本仓库内的 docs/documentation/clientsdks 目录提供了每一门语言的最新安装方式、Worker 编写指南与可运行示例,是开发时最直接的参考。

参考文档(仓库内)

  • SDK 清单入口:polyglot-clients/README.md
  • 语言支持总览:conductor-clients/README.md
  • 七语言官方 SDK 索引:docs/documentation/clientsdks/index.md
  • 各语言 SDK 详解:Java java-sdk.md / Python python-sdk.md / Go go-sdk.md / JS js-sdk.md / C# csharp-sdk.md / Ruby ruby-sdk.md / Rust rust-sdk.md
  • 上手路径:docs/quickstart/index.md、first-workflow.md、first-worker.md
  • 协议与客户端实现:grpc/src/main/proto/grpc/task_service.proto、grpc-client

【免费下载链接】conductorConductor is an event driven agentic workflow engine providing durable and highly resilient execution engine for applications and AI Agents项目地址: https://gitcode.com/GitHub_Trending/co/conductor

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询