20 KiB
Note
本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
English · 原始项目 · 上游 README
原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
Conductor - 互联网规模的智能体工作流引擎
编排分布式系统意味着要应对故障、重试和状态恢复。Conductor 会替你处理这一切。
Conductor 是在 Netflix 构建的开源持久化(durable)工作流引擎,用于在互联网规模上编排微服务、AI 智能体(agent)和持久化工作流。Netflix、Tesla、LinkedIn 和 J.P. Morgan 均已在生产环境中信赖并使用。由 Orkes 和不断壮大的 community. 积极维护。
60 秒快速启动
前置条件: 必须安装 Node.js v16+ 和 Java 21+。
npm install -g @conductor-oss/conductor-cli
conductor server start
打开 http://localhost:8080 — 你的服务器已运行,并带有内置的 ui-next UI。
从旧版本升级? CLI 会在
~/.conductor-cli/缓存服务器 JAR。如果缓存了旧版本,请强制重新下载:conductor server start latest # or delete the cache manually rm ~/.conductor-cli/conductor-server-latest.jar && conductor server start
运行你的第一个工作流:
# Create a workflow that calls an API and parses the response — no workers needed
curl -s https://raw.githubusercontent.com/conductor-oss/conductor/main/docs/quickstart/workflow.json -o workflow.json
conductor workflow create workflow.json
注意: 连续运行两次该命令会在第二次调用时返回错误——工作流已存在。这是预期行为。使用
conductor workflow update修改现有工作流。
conductor workflow start -w hello_workflow --sync
查看 Quickstart guide 了解完整演练,包括编写 worker 和重放工作流。
Conductor 的 Docker 镜像(包含 ui-next UI):
# UI at http://localhost:5000 | API at http://localhost:8080
docker run -p 5000:5000 -p 8080:8080 conductoross/conductor:next
所有 CLI 命令都有等效的 cURL/API 调用。详见 Quickstart。
为什么 Conductor 是开发者首选的工作流引擎
| 持久化执行(Durable execution) | 每一步都会持久化。可承受崩溃、重启和网络故障,并支持可配置的重试和超时。 |
| 设计即确定性(Deterministic by design) | 编排与业务逻辑分离——确定性是架构层面的,而非靠开发者自律。Worker 可运行任意代码;工作流图在构建上保持确定性。 |
| AI 智能体编排 | 14+ 原生 LLM 提供商、MCP 工具调用、函数调用、人在回路(human-in-the-loop)审批,以及用于 RAG 的向量数据库。 |
| 运行时动态化 | 动态分叉、任务和子工作流在运行时解析。LLM 生成 JSON 工作流定义,Conductor 立即执行。 |
| 完全可重放 | 可从开头重启、从任意任务重新运行,或仅重试失败步骤——适用于任何工作流,任何时候都可以。 |
| 互联网规模 | 在 Netflix、Tesla、LinkedIn 和 J.P. Morgan 久经考验。可水平扩展至数十亿次工作流执行。 |
| 多语言 Worker | 支持 Java、Python、Go、JavaScript、C#、Ruby 或 Rust 编写的 Worker。Worker 轮询、执行并上报——可在任意位置运行。 |
| 自托管,无厂商锁定 | Apache 2.0。5 种持久化后端、6 种消息代理。可在任何能运行 Docker 或 JVM 的环境中运行。 |
交付智能体,而非框架代码
Conductor 的 worker 就是普通代码——任意语言、任意库、任意 I/O。没有确定性约束,没有 SDK 仪式。编排层是声明式且机器可读的,因此 LLM 可以原生生成和组合工作流。如果智能体在第 12 次迭代时崩溃,它会从第 12 次迭代恢复。
Conductor 中的自主思考-行动(think-act)智能体: 通过 MCP 发现工具,用 LLM 推理,调用所选工具,重复直至完成。
{
"name": "autonomous_agent",
"description": "Agent that loops until the task is complete",
"version": 1,
"tasks": [
{
"name": "discover_tools",
"taskReferenceName": "discover",
"type": "LIST_MCP_TOOLS",
"inputParameters": {
"mcpServer": "${workflow.input.mcpServerUrl}"
}
},
{
"name": "agent_loop",
"taskReferenceName": "loop",
"type": "DO_WHILE",
"loopCondition": "if ($.loop['think'].output.result.done == true) { false; } else { true; }",
"loopOver": [
{
"name": "think",
"taskReferenceName": "think",
"type": "LLM_CHAT_COMPLETE",
"inputParameters": {
"llmProvider": "openai",
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"message": "You are an autonomous agent. Available tools: ${discover.output.tools}. Previous results: ${loop.output.results}. Respond with JSON: {\"action\": \"tool_name\", \"arguments\": {}, \"done\": false} or {\"answer\": \"final answer\", \"done\": true}."
},
{ "role": "user", "message": "${workflow.input.task}" }
]
}
},
{
"name": "act",
"taskReferenceName": "act",
"type": "SWITCH",
"expression": "$.think.output.result.done ? 'done' : 'call_tool'",
"decisionCases": {
"call_tool": [
{
"name": "execute_tool",
"taskReferenceName": "tool_call",
"type": "CALL_MCP_TOOL",
"inputParameters": {
"mcpServer": "${workflow.input.mcpServerUrl}",
"method": "${think.output.result.action}",
"arguments": "${think.output.result.arguments}"
}
}
]
}
}
]
}
]
}
每一步都持久化保存——无框架、无 SDK 锁定。代码优先(code-first)引擎要求你的代码具有确定性,以便框架可以重放。Conductor 让引擎具有确定性——因此你的代码不必如此。
查看 Build Your First AI Agent 指南了解完整演练。
面向 AI 编程助手的 Conductor Skills
Conductor Skills 让 AI 编程助手(Claude Code、Gemini CLI 等)可直接从你的终端创建、管理和部署 Conductor 工作流。
Claude
# Install Skills for Claude Code
/plugin marketplace add conductor-oss/conductor-skills
/plugin install conductor@conductor-skills
为所有检测到的 agent 安装
一条命令即可自动检测系统上所有受支持的 agent,并在可能的情况下进行全局安装。可随时重新运行——仅会为新检测到的 agent 安装。
macOS / Linux
curl -sSL https://conductor-oss.github.io/conductor-skills/install.sh | bash -s -- --all
Windows (PowerShell) / (cmd)
# powershell
irm https://conductor-oss.github.io/conductor-skills/install.ps1 -OutFile install.ps1; .\install.ps1 -All
# cmd
powershell -c "irm https://conductor-oss.github.io/conductor-skills/install.ps1 -OutFile install.ps1; .\install.ps1 -All"
SDKs
| 语言 | 仓库 | 安装 |
|---|---|---|
| ☕ Java | conductor-oss/java-sdk | Maven Central |
| 🐍 Python | conductor-oss/python-sdk | pip install conductor-python |
| 🟨 JavaScript | conductor-oss/javascript-sdk | npm install @io-orkes/conductor-javascript |
| 🐹 Go | conductor-oss/go-sdk | go get github.com/conductor-sdk/conductor-go |
| 🟣 C# | conductor-oss/csharp-sdk | dotnet add package conductor-csharp |
| 💎 Ruby | conductor-oss/ruby-sdk | (incubating) |
| 🦀 Rust | conductor-oss/rust-sdk | (incubating) |
文档与社区
后端配置
| 后端 | 配置 |
|---|---|
| Redis + ES7(默认) | config-redis.properties |
| Redis + ES8 | config-redis-es8.properties |
| Redis + OpenSearch | config-redis-os.properties |
| Postgres | config-postgres.properties |
| Postgres + ES7 | config-postgres-es7.properties |
| MySQL + ES7 | config-mysql.properties |
从源码构建
要求与说明
要求: Docker Desktop、Java (JDK) 21+、Node.js 18+ 以及 pnpm(用于 UI)
git clone https://github.com/conductor-oss/conductor
cd conductor
./gradlew build
# (optional) Build UI (ui-next) and embed it in the server
# ./build_ui_next.sh
# Start local server
cd server
../gradlew bootRun
以开发模式运行 UI(在 http://localhost:1234): 热重载**
需要在 http://localhost:8080 上运行 Conductor 服务器。如果尚未启用,请先启用 corepack:
corepack enable
然后启动开发服务器:
cd ui-next
pnpm install
pnpm dev
打开 http://localhost:1234 — 文件变更时 UI 会自动重载。
详见完整构建指南。
FAQ
这与 Netflix Conductor 相同吗?
是的。Conductor OSS 是原版 Netflix Conductor 仓库的延续,Netflix 将该项目贡献给开源基金会之后由社区继续维护。
Conductor 是开源的吗?
是的。Conductor 是完全开源的工作流引擎,采用 Apache 2.0 许可证。你可以在自己的基础设施上自托管,支持 5 种持久化后端和 6 种消息代理(message broker)。
该项目是否在积极维护?
是的。Orkes 是主要维护方,并在所有主流云服务商上提供 Conductor 的企业级 SaaS 平台。
Conductor 能否扩展以应对我的工作负载?
可以。Conductor 诞生于 Netflix,在互联网规模下经过实战检验。它可跨多个服务器实例水平扩展,处理数十亿次工作流执行。
Conductor 是否支持持久化执行(durable execution)?
是的。Conductor 开创了持久化执行模式,确保工作流和持久化 agent 在基础设施故障或崩溃时仍能可靠完成。每一步都会持久化并可恢复。
工作流完成或失败后,我可以重放吗?
可以。Conductor 会无限期保留完整执行历史。你可以从头重新开始、从特定任务重新运行,或仅重试失败步骤——通过 API 或 UI 均可。
Conductor 能否编排 AI agent 和 LLM?
是的。Conductor 原生集成 14+ 家 LLM 提供商(Anthropic、OpenAI、Gemini、Bedrock 等),支持 MCP 工具调用、函数调用(function calling)、人在回路(human-in-the-loop)审批,以及用于 RAG 的向量数据库集成。
为什么 Conductor 将编排与代码分离?
将编排逻辑与业务逻辑耦合,会迫使开发者在工作流定义中手动维持确定性约束——不能直接 I/O、不能使用系统时间、不能引入随机性。Conductor 通过让编排层在结构上保持确定性,消除了整类此类 bug。Worker 是普通代码,零框架约束——可用任意语言编写,使用任意库,调用任意 API。
用代码编写工作流不是比 JSON 更强大吗?
这取决于你对「强大」的定义。在代码优先(code-first)引擎中,工作流定义与业务逻辑运行在同一运行时中——这意味着引擎必须重放你的代码才能恢复状态。这会迫使业务逻辑满足确定性约束:不能直接 I/O、不能使用系统时间、不能使用线程、不能引入随机性。Conductor 将这些关注点分离。编排图是声明式的(JSON),因此在结构上就是确定性的。你的 Worker 是普通代码,零约束——可使用任意语言、任意库,调用任意 API。你在真正需要的地方(业务逻辑)获得代码的全部能力,而在不需要的地方(编排)避免框架负担。
JSON 工作流能否处理分支、循环和错误处理等复杂逻辑?
可以。Conductor 支持 SWITCH(条件分支)、DO_WHILE(可配置迭代清理的循环)、FORK_JOIN(动态扇出的并行执行)、SUB_WORKFLOW(组合),以及运行时解析的 DYNAMIC 任务。这些能力可组合——你可以在 fork 内的分支中嵌套循环。对于错误处理,每个任务都支持可配置的重试、超时,以及可选/补偿任务。声明式模型不会限制复杂度——它让复杂度可见且可调试。
Conductor 如何处理工作流版本控制?
工作流定义按编号进行版本管理。正在运行的执行会继续使用启动时的版本——部署新版本永远不会破坏进行中的工作流。不存在重放兼容性问题,因为 Conductor 不会重放你的代码。编排图是唯一真相来源,每次执行都固定在其定义版本上。更新编排逻辑时无需重新部署 worker,也无需担心破坏正在运行的工作流。
开发者体验如何——IDE 支持、类型检查、调试?
Conductor 提供内置可视化 UI,用于设计、运行和调试工作流。每次执行都可完全观测:你可以检查每个任务的输入、输出、时序和重试历史。为实现类型安全(type safety),Conductor 会根据 JSON Schema 验证工作流输入和任务 I/O。Worker 是你所选语言中的普通代码——你的业务逻辑可获得完整的 IDE 支持、类型检查和调试能力。编排层在 UI 中可见,而非隐藏在框架内部。
Conductor 能处理长时间运行的工作流(数天、数周、数月)吗?
可以。Conductor 专为长时间运行的工作流而设计。执行状态会完整持久化——工作流可以暂停数月,等待人工审批、外部信号或定时器,并在中断处精确恢复。不存在会丢失的内存状态。这正是让 AI agent 循环具备持久性的机制:如果第 12 次迭代等待人工审核三周,第 13 次迭代会从中断处继续。
不把编排写在代码里,会不会失去灵活性?
你会获得更大的灵活性。由于工作流是 JSON 格式,LLM 可以在运行时生成和修改它们——无需编译/部署周期。动态分叉(dynamic forks)可让你扇出(fan out)到运行时确定的可变数量的并行任务。动态子工作流(dynamic sub-workflows)允许一个工作流按名称组合其他工作流。由于 worker 与编排解耦,你可以独立更新工作流图或替换 worker 实现。代码优先(code-first)引擎将两者耦合在一起,因此更改编排意味着重新部署和重新版本化你的代码。
Conductor 与其他工作流引擎相比如何?
Conductor 是开源工作流引擎,原生支持 14+ 提供商的 LLM 任务类型,内置 MCP 集成、持久化执行、完整可重放性,以及 7 种语言的 SDK。与代码优先引擎不同,Conductor 将编排与业务逻辑分离——确定性是架构层面的保证,而非开发者的约束。你的 worker 是普通代码,零框架规则。编排层是声明式的,因此可被 LLM 观测、版本化和组合。已在 Netflix、Tesla、LinkedIn 和 J.P. Morgan 经实战检验。
Orkes Conductor 与 Conductor OSS 兼容吗?
100% 兼容。Orkes Conductor 构建于 Conductor OSS 之上,具备完整的 API 和工作流兼容性。
贡献
我们欢迎所有人贡献!
- 报告问题: 在 GitHub 上提交 issue.
- 贡献代码: 查看我们的贡献指南和适合新手的 issue.
- 改进文档: 帮助维护我们的文档。
贡献者
路线图
查看 Conductor OSS 路线图。想参与?联系我们.
许可证
Conductor 采用 Apache 2.0 License 许可证。