ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

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

Conductor 多语言客户端 SDK 生态指南:从 Clojure、C、Go、Python 到官方七语言 SDK 的跨语言 Worker 开发 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/conductorConductor 是一个事件驱动的 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 风格的高并发 WorkerAI 相关任务可以用 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 从支持的语言角度给出了对应关系语言客户端 SDKJavajava-sdkPythonpython-sdkGolanggo-sdkTypescripttypescript-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 groupIdorg.conductoross/groupId artifactIdconductor-client/artifactId versionVERSION/version /dependency编写 WorkerWorker 是实现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装饰器风格的 WorkerPython SDK 一条命令安装python-sdk.mdpip install conductor-pythonStep 1以代码定义工作流。用ConductorWorkflow构建名为greetings的工作流用运算符串起任务并声明输出参数from conductor.client.workflow.conductor_workflow import ConductorWorkflow workflow ConductorWorkflow(namegreetings, version1, executorexecutor) greet_task greet(task_ref_namegreet_ref, nameworkflow.input(name)) workflow greet_task workflow.output_parameters({result: greet_task.output(result)}) workflow.register(overwriteTrue)Step 2用装饰器写 Worker。Worker 就是被worker_task装饰的普通 Python 函数from conductor.client.worker.worker_task import worker_task # register_task_defTrue 便于本地快速验证生产环境建议单独管理任务定义 worker_task(task_definition_namegreet, register_task_defTrue) def greet(name: str) - str: return fHello {name}Step 3组装并运行。在quickstart.py中通过Configuration、OrkesClients与TaskHandlerstart_processes()启动多进程轮询把 Worker 注册进 Conductor随后通过WorkflowExecutor启动工作流并打印workflow_id。完整的可运行代码见 python-sdk.md。Go类型安全的流程定义Go SDK 支持go mod初始化后直接拉取go-sdk.mdmkdir 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 / TypeScriptPromise 风格 APIJavaScript SDK 面向 TypeScript 优先js-sdk.mdnpm install io-orkes/conductor-javascriptStep 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装饰器写 Workerimport { 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中组合OrkesClients、TaskHandler与上述ConductorWorkflow完成注册与启动完整示例见 js-sdk.md。C# / .NETDI 与 async/awaitC# SDK 通过 NuGet 分发csharp-sdk.mddotnet 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 Dictionarystring, object { [name] Conductor } });值得注意的是SDK 默认从环境变量CONDUCTOR_SERVER_URL读取服务端地址若对接 Orkes 云服务需要手动构造Configuration.AuthenticationSettingsOrkesAuthenticationSettings读取CONDUCTOR_AUTH_KEY/CONDUCTOR_AUTH_SECRETSDK 不会自动做这一层环境变量映射。RubyPython SDK 的全功能对等实现Ruby SDK 以 gem 形式发布ruby-sdk.mdgem conductor_ruby # 加入 Gemfile # 或直接安装 gem install conductor_ruby其官方文档声明的核心特性包括与 Python SDK 功能完全对等Full Feature ParityRuby 惯用工作流 DSL——基于块的语法覆盖 25 任务类型Worker 框架——多线程任务执行支持类式与块式两种 WorkerLLM/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 的维护成本最低官方七种 SDKJava、Python、Go、JS/TS、C#、Ruby、Rust已覆盖主流后端语言AI/LLM 任务密集优先考虑 Python 与 Ruby SDK——两者都原生支持装饰器/块式任务定义且 Ruby 官方文档明确声明了 LLM/AI 任务Chat Completion、Embeddings、RAG、图像/音频生成支持性能敏感的高并发 WorkerGo并发 Worker 执行、struct 输入输出与 Rust零成本抽象、异步运行时更契合已有 Spring Boot 或 .NET 基础设施JavaSpring 自动配置与 C#依赖注入、async/await能无缝融入现有工程社区维护清单polyglot-clients/README.md 记录的 Clojure SDK 可作为 JVM 生态的补充选项。生态共建开发中 SDK 与贡献路径polyglot-clients/README.md 特别将JavaScript SDK 标记为开发中In progressPRs encouraged。如果你恰好是某语言的拥趸且该语言尚无官方 SDK最直接的参与方式就是参照已有 SDK 的实现协议定义见 grpc/src/main/protoJava 客户端实现见 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),仅供参考
返回列表