Conductor Framework Agents 完全指南:把 OpenAI Agents、LangChain、LangGraph、ADK 的 Agent 变成可复用、可观测的持久化工作流步骤
Conductor Framework Agents 完全指南把 OpenAI Agents、LangChain、LangGraph、ADK 的 Agent 变成可复用、可观测的持久化工作流步骤【免费下载链接】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 中「框架 AgentFramework Agents」能力的核心参考它讲解如何把你在 OpenAI Agents、Google ADK、LangChain、LangGraph以及 Vercel AI SDK等框架中已经写好的 Agent 对象交给 Conductor SDK 编译并作为**持久化durable、可观测inspectable、可复用reusable**的 Conductor Agent 运行。读完本文你将掌握框架与语言的支持矩阵、run / plan / deploy / serve四步生命周期、AGENT任务的调用契约、输出/恢复/取消语义以及仓库中可运行的工作流配方从而把现有 Agent 平滑接入 Conductor 的事件驱动执行引擎。为什么需要 Framework Agents保留框架创作面获得 Conductor 持久化执行Conductor 是一个事件驱动的 agentic 工作流引擎为应用与 AI Agent 提供持久化、高弹性的执行能力。Framework Agents 解决的是这样一个现实问题团队往往已经在某个主流 Agent 框架中沉淀了大量代码不希望因为引入编排引擎而重写。Framework Agents 的核心设计是SDK 即边界the SDK is the boundary你的框架OpenAI Agents、LangChain、LangGraph、ADK 等仍然是创作面authoring surface——Agent 对象、工具、提示词全部保持原样Conductor 在其外围提供持久化执行——SDK 把框架 Agent 编译成一张普通的工作流图于是每一次 LLM 调用、工具调用、等待、重试与分支都变成工作流中的可见节点。Conductor Agents 是构建 AI 行为的两种方式之一。另一种是声明式 AI 工作流即把LLM_CHAT_COMPLETE、MCP、控制流任务直接写进工作流定义。当编排本身任务、分支、审批、调度就是你要构建的对象时选择声明式路径当 Agent 的逻辑活在代码里、且需要跑在持久化进程中时选择 Conductor Agent含本文的框架 Agent 路径。支持的框架一览框架从哪里开始OpenAI AgentsOpenAI Agents 快速开始Google ADKGoogle ADK 快速开始LangChain / LangChain4jLangChain 快速开始LangGraph / LangGraph4jLangGraph 快速开始Vercel AI SDKVercel AI SDK 示例JavaScript SDK 仓库Conductor Agents你的第一个 Agent每一条路线都把框架特有的代码、依赖与可执行示例保留在所属的 Conductor SDK 中SDK 是边界框架保持创作面Conductor 提供持久化执行。从框架对象到工作流步骤统一的四条路径无论哪个框架从你的代码到一个可复用的工作流步骤都走同一条路迭代时直接运行Run it while you iterate把框架的 Agent 对象传给 Conductor SDK 并运行。SDK 会把 Agent 编译出来并在 Conductor 上执行因此从第一次运行起这次持久化执行就能在 UI 中看到。稳定后部署Deploy it when it stabilizes部署会把编译后的 Agent 在服务端注册为一个带名字、带版本的 Conductor Agent。此后调用方无需导入你的框架或它的依赖即可调用它。服务它的工具Serve its workersSDK 把 Agent 的工具当作本地函数执行因此必须有一个 worker 进程在跑才能执行这些工具。只要部署的 Agent 还在被使用这个进程就要保持运行。从工作流中调用Invoke it from a workflow父工作流通过AGENT任务调用已部署的 Agent就像调用任何其他持久化步骤一样。在 Python SDK 中这四个步骤是对同一个运行时AgentRuntime的四次调用。以下是以 LangChain 为例的完整代码from conductor.ai.agents import AgentRuntime from langchain.agents import create_agent from langchain_core.tools import tool tool def check_token() - str: Check a token. return available agent create_agent(openai:gpt-4o-mini, tools[check_token], system_promptYou are a helpful assistant.) with AgentRuntime() as runtime: runtime.run(agent, Is the token set?) # develop: compile and execute once runtime.plan(agent) # CI: inspect the compiled graph runtime.deploy(agent) # release: register without executing runtime.serve(agent) # operate: run tool workers and block注意serve()是阻塞调用所以生产环境中它应该作为独立的长生命周期 worker 进程运行而deploy()放在 CI/CD 中执行。生命周期动词的源码印证在agentspan模块嵌入式的 Conductor Agent 运行时中这些 SDK 动词对应到服务端的真实操作。AgentService.java 提供了compile、deploy、start、getStatus、respond、cancelAgent、pauseAgent、resumeAgent、signalAgent等方法AgentController.java 则暴露了对应的 REST 端点/compile、/deploy、/start、/{executionId}/status、/{executionId}/cancel等。也就是说SDK 层的run / plan / deploy / serve最终都落在这套 Agent 控制面control plane服务上。从源码结构还可以看到每个框架都有独立的规范化器Normalizer把框架的 Agent 配置转换为 Conductor 的统一 Agent 配置AgentConfig例如OpenAINormalizer、LangChainNormalizer、LangGraphNormalizer、GoogleADKNormalizer、VercelAINormalizer、ClaudeAgentSdkNormalizer统一由NormalizerRegistry按frameworkId分发。这印证了「框架只是创作面、Conductor 统一编译执行」的架构无论你从哪个框架进来最终都会归一化并编译成一张 Conductor 工作流图。前置条件连接服务端并启用 AI 集成在运行或部署框架 Agent 之前需要完成两件事。1. 让 SDK 能连上你的 Conductor 服务端参考连接 Conductor推荐Orkes Developer Edition。创建应用与访问密钥后设置环境变量export CONDUCTOR_SERVER_URLhttps://developer.orkescloud.com/api export CONDUCTOR_AUTH_KEYyour-access-key export CONDUCTOR_AUTH_SECRETyour-access-secret本地服务器。要求 Java 21 与 Node.jsconductor server start export CONDUCTOR_SERVER_URLhttp://localhost:8080/api conductor workflow list2. 服务端启用 AI 集成开关部署或调用 Conductor Agent 前必须在服务端启用 AI 集成conductor.integrations.ai.enabledtrue当该属性为false或缺省时已部署 Agent 的控制面以及agentType: conductor执行模式均不可用。这一点在源码中有明确体现AGENT任务映射器 AgentTaskMapper.java 与AGENT/GET_AGENT_CARD/CANCEL_AGENTworkerA2AWorkers.java都通过 AIIntegrationEnabledCondition.java 条件装配而该条件正是ConditionalOnProperty(name conductor.integrations.ai.enabled, havingValue true)。也就是说开关未打开时这些系统任务根本不会注册。3. 配置模型提供方凭证Developer Edition在 AI/LLM 集成中为你的模型提供方添加集成。本地服务器在启动前导出提供方 API Key让服务器继承环境变量例如export OPENAI_API_KEYyour-openai-api-key conductor server start各框架示例大多使用 OpenAI 模型Google ADK 示例使用 Gemini请提供对应的凭证。Conductor 支持的主流 LLM 提供方Anthropic Claude、OpenAI GPT、Azure OpenAI、Google Gemini、AWS Bedrock、Mistral、Cohere、HuggingFace、Ollama、Perplexity、Grok 等及原生工具能力详见 LLM orchestration 文档。快速开始把已有框架 Agent 跑起来以下四个小节分别给出 OpenAI Agents、LangChain、LangGraph、Google ADK 的最小可运行示例来自框架 Agent 快速开始。它们的共同规律是框架代码零改动唯一变化的是 runner 的导入。OpenAI Agents SDK安装带 OpenAI Agents 支持的 Conductor SDKpip install conductor-python保存为openai_agent.pyfrom conductor.ai import Runner from agents import Agent, function_tool function_tool def get_weather(city: str) - str: return f72F and sunny in {city} agent Agent( nameweather_assistant, modelgpt-4o-mini, tools[get_weather], instructionsYou are a helpful assistant., ) result Runner.run_sync(agent, Whats the weather in NYC?) print(result.final_output)运行python openai_agent.py然后在 Conductor UI 中核对输出与执行记录。唯一的 runner 导入变化使用conductor.ai.Runner而不是框架自己的 runner。LangChainpip install conductor-python[langchain]from conductor.ai.agents import AgentRuntime from langchain.agents import create_agent from langchain_core.tools import tool tool def check_token() - str: Check a token. return available agent create_agent(openai:gpt-4o-mini, tools[check_token], system_promptYou are a helpful assistant.) with AgentRuntime() as runtime: result runtime.run(agent, Is the token set?) result.print_result()LangGraphpip install conductor-python[langgraph]import math from conductor.ai.agents import AgentRuntime from langchain_core.tools import tool from langchain_openai import ChatOpenAI from langgraph.prebuilt import create_react_agent tool def calculate(expression: str) - str: Evaluate a limited math expression. return str(eval(expression, {__builtins__: {}}, {sqrt: math.sqrt, pi: math.pi})) graph create_react_agent( ChatOpenAI(modelgpt-4o-mini, temperature0), tools[calculate], namemath_agent ) with AgentRuntime() as runtime: result runtime.run(graph, What is sqrt(256) 2**10?) result.print_result()Google ADKpython -m pip install conductor-python[adk]from conductor.ai.agents import AgentRuntime from google.adk.agents import Agent agent Agent( nameadk_greeter, modelgemini-2.0-flash, instructionYou are friendly and concise., ) with AgentRuntime() as runtime: result runtime.run(agent, Say hello and share an ML fact.) result.print_result()保存为adk_agent.py并运行python adk_agent.py。验证与故障恢复对每个框架都要做两件事核对打印结果以及在 Conductor UI 中找到对应的执行记录第一次运行就应该可见。如果失败按以下顺序排查检查运行时服务器的 URLCONDUCTOR_SERVER_URL是否正确可达检查框架包是否安装正确conductor-python[...]附加依赖是否完整检查模型提供方凭证是否有效服务端是否拿到了 API Key。在重试之前先检查失败任务本身。对于可能已产生外部副作用的 Agent 动作在确认其幂等性与恢复策略之前不要贸然重试——这是接入任何持久化执行引擎时的基本纪律。部署后如何被工作流调用AGENT 任务契约一旦 Agent 部署完成父工作流就通过AGENT任务按名字调用它。以下是文档给出的最小调用定义{ name: run_agent, taskReferenceName: run_agent_ref, type: AGENT, inputParameters: { agentType: conductor, name: deployed-agent-name, prompt: ${workflow.input.prompt} } }agentType选择执行模式而非创作框架关键概念agentType选择的是执行模式execution mode不是创作框架。OpenAI Agents、Google ADK、LangGraph 等是 SDK 侧的创作路径它们本身不是agentType的值。在Conductor Agents 文档与源码 A2AService.java 中可以看到当前定义agentType: a2a默认——调用远端 A2A 端点null/空白同样默认走 A2AagentType: conductor——运行已部署的 Conductor Agent按name选择agentType: bedrock——选择 AWS Bedrock Agent 运行时agentType: azure-foundry——选择 Azure AI Foundry 运行时Entra ID 认证 A2A 协议。AGENT任务本身由 AgentTaskMapper.java 映射为带重试默认值的SCHEDULED任务再由 A2AWorkers.java 中的AGENTworker 异步执行——它是嵌入式系统任务也可以作为 Java SDK 的远端轮询 worker 运行。完整输入参数在一个全新调用fresh call中name与prompt是必需的其余参数按需提供参数说明name已部署 Agent 的名字全新调用必需prompt发给 Agent 的提示词全新调用必需version可选固定部署版本缺省使用最新版agentTypeconductor本地部署 Agent/a2a默认远端 A2A等sessionId可选跨调用的会话标识runId/context/media/model在部署 Agent 契约需要时使用timeoutSeconds可选单次调用超时idempotencyKey可选调用幂等键不提供时运行时自动生成重启稳定的幂等键pollIntervalSeconds轮询间隔默认 5maxDurationSeconds整个运行的最大时长默认 86400 秒maxPollFailures连续瞬时轮询失败上限默认 30例如带可选参数的生产调用{ name: run_agent, taskReferenceName: run_agent_ref, type: AGENT, inputParameters: { agentType: conductor, name: planner, prompt: ${workflow.input.prompt}, version: 3, pollIntervalSeconds: 5, maxDurationSeconds: 3600, maxPollFailures: 30 } }输出与持久化执行契约AGENT任务会写出executionId、agentName、state、text以及在完成时给出结构化output。其state是标准化的 A2A 生命周期值working、input-required、completed、failed或canceled。运行时状态到 Conductor 任务状态的映射如下运行时状态 / 输出stateConductor 任务状态含义RUNNING/workingIN_PROGRESS任务在pollIntervalSeconds默认 5后再次轮询WAITING/input-requiredCOMPLETED运行因等待人工或工具输入而暂停输出包含waiting: true可能包含pendingToolCOMPLETED/completedCOMPLETED输出包含最终text与结构化outputFAILED/failedFAILED任务包含完成原因CANCELED/canceledCANCELED任务在可能的情况下包含取消原因maxDurationSeconds约束整个运行默认 86400 秒maxPollFailures约束连续瞬时轮询失败次数默认 30。两者都会终态失败任务并对子执行做尽力而为best-effort的取消。这些守卫是独立于普通任务定义超时的第二道防线。这些默认值在源码中有直接对应ConductorAgentDelegate.java 中定义DEFAULT_POLL_SECONDS 5、DEFAULT_MAX_DURATION_SECONDS 24 * 60 * 60、DEFAULT_MAX_POLL_FAILURES 30且所有取值都有下限保护至少为 1。输出键则在 ConductorAgentResults.java 中定义executionId、agentName、state、agentStartTime、agentEndTime、agentPollFailures、waiting、pendingTool、text、output。该文件同时会把结果整理成规范的 A2A 任务表示task/artifact/message保证本地conductor分支与远端 A2A 分支输出一致。值得注意的实现细节ConductorAgentDelegate把持久化状态存放在所属 Conductor 任务的输出里每次调用只是一次简短的 start/respond/status 调用详见 ConductorAgentClient.java 的可移植边界接口。这就是为什么同一套代码既能作为嵌入式注解系统任务、也能作为远端轮询的 Java SDK worker 运行——轮询进程崩溃后从任务输出恢复executionId即可继续。这也解释了idempotencyKey的自动生成格式conductor-agent-{workflowInstanceId}:{referenceTaskName}:{iteration}保证同一任务的多次重试不会重复启动 Agent 执行。生命周期深入Create / Plan / Deploy / Serve / Run每个 Conductor Agent 都经历相同的五个操作下面的名字就是你在代码中会看到的 SDK 动词来自Conductor Agents 文档Create创建在代码中定义 Agent可以来自 SDK 自带的Agent类也可以来自某个受支持框架的对象。Plan规划检查 Agent 将被编译成的工作流图。开发期与 CI 中非常有用——在部署之前就能看到图长什么样。Deploy部署把编译后的 Agent 在服务端注册为可复用、带版本的 Conductor Agent。Serve服务启动执行 Agent 工具的 worker 进程在框架需要时。Run运行执行 Agent。开发期run是「编译 执行」一步到位生产期则是工作流通过AGENT任务按名字调用已部署版本。一句话总结迭代期用run稳定后deployserve让工作流和其他调用方都能启动这个稳定的已部署版本。挂起、恢复与取消和 HUMAN 任务配合当 Agent 等待外部输入人工答复或工具结果时它的第一个AGENT任务会直接COMPLETED而不是占住一个 worker。工作流可以用HUMAN任务收集答复再用另一个AGENT任务恢复同一次运行{ name: resume_agent, taskReferenceName: resume_agent_ref, type: AGENT, inputParameters: { agentType: conductor, executionId: ${run_agent_ref.output.executionId}, prompt: ${collect_answer_ref.output.answer} } }恢复调用时executionId标识这次运行、prompt提供答复name不再需要。源码 ConductorAgentDelegate.java 的startOrResume方法印证了这一行为检测到请求中的executionId时走respond分支并强制要求prompt否则走startAgent全新启动分支。工作流的取消会以尽力而为的方式传播到正在飞行中的 Conductor Agent。组合成更大的 Agentic 工作流图框架 Agent 的价值在于它能与工作流中其他一切元素组合。参考构建你的第一个 Agentic 工作流图中给出的分工模型SDK AgentConductor Agent 或框架 Agent负责推理、工具与模型行为工作流图负责上下文收集、分支、重试、人工闸门、扇出/汇合fan-out/join、调度与取消。例如一个典型的「上下文获取 → Agent 决策 → 人工审批 → 落地执行」流水线HTTP任务负责取上下文AGENT任务把上下文交给已部署的 AgentHUMAN任务做人审SWITCH做分支。所有这些都发生在同一张持久化、可观测的工作流图里。仓库中的工作流集成配方Conductor Agents 文档 提供了四个刻意只包含稳定工作流契约的仓库示例——它们是框架无关的framework-agnostic用你选择的框架的 Conductor SDK 创建并部署planner/researcher即可配方演示内容31-conductor-agent-basic.json把可复用已部署 Agent 作为工作流中的一个步骤32-conductor-agent-human-in-loop.jsonWAITING→HUMAN→ 用executionId恢复33-conductor-agent-multi-agent.json在FORK_JOIN/JOIN图中并行运行多个专业 Agent34-conductor-agent-cancel.json从父图传播取消这些配方文件就在本仓库的ai/examples/目录下可以直接作为工作流定义注册运行基础调用31单个AGENT任务调用已部署的planner到完成并通过outputParameters把text、output、state透出为工作流输出人机协同32第一个AGENT任务暂停WAITING→COMPLETED输出waiting: true与一个pendingTool问题SWITCH依据waiting分流到HUMAN任务收集答复第二个AGENT任务用executionId恢复同一次运行多 Agent33FORK_JOIN扇出两个分支分别调用已部署的planner与researcherJOIN收集两条分支每个分支拥有独立的executionId且轮询不阻塞任何 worker 线程取消34FORK_JOIN让一个长运行AGENT任务与控制分支赛跑控制分支用TERMINATE终止工作流从而把取消传播给飞行中的 Agent 任务。维护的 SDK 示例矩阵各框架、各语言组合的完整可运行示例由所属 Conductor SDK 仓库维护python-sdk / java-sdk / javascript-sdk / csharp-sdk行内即可参考框架 Agent 快速开始。「—」表示该组合没有维护示例框架PythonJavaTypeScript / JavaScriptC#OpenAI Agents示例示例示例示例Google ADK示例示例示例示例LangChain示例LangChain4j 示例示例—LangGraph示例LangGraph4j 示例示例—Vercel AI SDK——示例—生产化路径从开发到生产建议按以下顺序推进跑通快速开始框架 Agent 快速开始 让已有 Agent 通过 Conductor 产生一次可检查的执行组合成工作流图构建你的第一个 Agentic 工作流图 把已部署 Agent 与普通 Conductor 任务组合起来上护栏与评测晋升前应用Agent 护栏并对记录的行为做Agent 评测远端独立部署场景当 Agent 独立部署且保持远端时使用 A2A 集成完整生产架构生产 Agent 架构 覆盖治理、评测、部署、组合与运维进阶配方Design Patterns → Agent Recipes 中的每一条都是完整可运行的示例——handoffs、memory、guardrails、并行 Agent 等。【免费下载链接】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),仅供参考