在 C#/.NET 中使用 conductor-ai-openai:让 OpenAI 风格 Agent 跑在 Conductor 持久化运行时上
【免费下载链接】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
本文面向在 .NET 生态中编写 AI Agent 的开发者,讲解如何通过conductor-ai-openai适配器,把以 OpenAI Agents 风格(builder 链式调用)编写的 Agent 编译成 Conductor 工作流并交给其持久化运行时执行。读完本文,你将掌握包的安装、Agent 的构建与运行、Conductor 服务器连接配置,以及这类"框架 Agent"在 Conductor 中的生命周期(run / deploy / serve)与AGENT任务集成方式。
Conductor 是一个事件驱动的 Agentic 工作流引擎,为应用与 AI Agent 提供持久、高弹性的执行能力。它的 C# SDK 提供了一套 AI 适配器族:conductor-ai(原生 Agent)、conductor-ai-openai(OpenAI Agents 形态)、conductor-ai-google-adk(Google ADK 形态)与conductor-ai-semantic-kernel(Semantic Kernel 形态)。本指南聚焦其中 OpenAI 适配器的完整用法与底层运行机制。
1. 安装 OpenAI 适配器
在 .NET 项目中通过dotnetCLI 添加包引用:
dotnet add package conductor-ai-openai该适配器镜像了 OpenAI Agents 的编写形态(builder 模式配置 Agent),但将执行结果路由到 Conductor 的持久化运行时。也就是说,你仍然使用 OpenAI 风格的 Agent 对象作为编写面,模型调用、工具调用与多轮执行则由 Conductor 以可审计、可恢复的工作流方式托管。
同一目录下还提供了其他 C# Agent 指南,可按需选择编写形态:
- 原生 Agent(conductor-ai):
new Agent(...)直接定义- Google ADK 适配器(conductor-ai-google-adk)
- Semantic Kernel 适配器(conductor-ai-semantic-kernel)
2. 编写一个 OpenAI 风格 Agent
下面是最小可运行示例:构建一个名为openai_style_greeter的 Agent,指定指令与模型,然后通过AgentRuntime执行一次对话并打印结果。
using Conductor.AI; using Conductor.AI.OpenAI; var agent = OpenAIAgent.Builder() .Name("openai_style_greeter") .Instructions("You are friendly and concise.") .Model("openai/gpt-4o-mini") .Build(); await using var runtime = new AgentRuntime(); var result = await runtime.RunAsync(agent, "Share a durable execution fact."); result.PrintResult();几个关键点说明:
- Builder 链式 API:
.Name()设置 Agent 名称,.Instructions()设置系统指令,.Model()指定模型标识,最后.Build()生成 Agent 对象。这与 OpenAI Agents 框架的作者体验保持一致。 - 模型标识格式:模型使用
openai/gpt-4o-mini这种provider/model前缀格式。Conductor 服务端的 AI 模块内置了对 OpenAI、Anthropic、Google Gemini、Azure OpenAI、AWS Bedrock、Mistral、Cohere、Grok、Perplexity、HuggingFace、Ollama、LiteLLM、Stability AI 等 13 家 LLM 提供商的内置集成(详见 ai/README.md),模型标识的前缀决定了实际调用的提供商通道。 - 运行时执行:
AgentRuntime.RunAsync(agent, prompt)是开发期的一步式操作——SDK 先把 Agent 编译成 Conductor 工作流图,再立即执行一次,因此从第一次运行起,执行记录就会出现在 Conductor UI 中。PrintResult()负责输出最终文本结果。
如果希望用环境变量指定默认模型(而非在代码里硬编码),可参考原生 Agent 指南中的做法:
export CONDUCTOR_AGENT_LLM_MODEL=openai/gpt-4o-mini3. 运行前配置 Conductor 服务器连接
Agent 的执行需要路由到一个 Conductor 服务器。运行前通过环境变量完成连接配置:
export CONDUCTOR_SERVER_URL={{CONDUCTOR_SERVER_URL}} # 对于需要认证的 Conductor 服务器: # export CONDUCTOR_AUTH_KEY=<YOUR_AUTH_KEY> # export CONDUCTOR_AUTH_SECRET=<YOUR_AUTH_SECRET>说明:
CONDUCTOR_SERVER_URL是必填项,占位符{{CONDUCTOR_SERVER_URL}}需替换为你的 Conductor 服务器地址(本地开发版或已托管的实例)。CONDUCTOR_AUTH_KEY/CONDUCTOR_AUTH_SECRET仅在服务器启用认证时需要。完整的连接与凭据配置流程见 连接 Conductor。- 服务器还需能够访问所选模型提供商。在 Developer Edition 上以 AI/LLM 集成方式配置提供商;在本地服务器上,则在启动前为提供商导出 API Key(如
OPENAI_API_KEY),参见 LLM 编排文档 与 ai/README.md 的环境变量表。
配置完成后运行项目:
dotnet run随后在 Conductor UI 中找到本次执行记录,核对最终状态、任务时间线、输入与输出。若运行无法触达模型,先确认运行环境中的服务器 URL 与提供商凭据,再查看失败任务并重试。
4. 底层原理:从框架 Agent 对象到可复用的工作流步骤
conductor-ai-openai的意义不仅在于"能跑通一次对话",而在于它把 OpenAI 风格的 Agent 变成 Conductor 中可编排、可恢复、可复用的持久化执行。从框架对象到工作流步骤,所有受支持的框架 Agent(OpenAI Agents、Google ADK、LangChain、LangGraph、Vercel AI SDK)都遵循同一条路径:
- 开发期运行(run):把框架的 Agent 对象传给 SDK 并运行,SDK 将其编译为工作流图并在 Conductor 上执行,首次运行即可在 UI 中看到持久化执行。
- 稳定后部署(deploy):部署会把编译后的 Agent 以"命名、带版本"的 Conductor Agent 注册到服务器,调用方无需引入你的框架及其依赖即可调用它。
- 常驻服务(serve):SDK 把工具当作本地函数执行时,需要有一个 worker 进程在运行以执行这些工具;部署的 Agent 在被使用的整个周期内都应保持该进程运行。
- 工作流调用:父工作流通过
AGENT任务按名称调用已部署的 Agent,就像调用其他任何持久化步骤一样。
上述四步在 Python SDK 中表现为同一个 runtime 上的四个调用(run/plan/deploy/serve),具体可参见 框架 Agent 参考。从源码结构看,C# 的AgentRuntime同样围绕"编译 Agent → 在 Conductor 上执行"这一核心契约设计:服务端 AI 模块通过 ConductorAgentClient 这一控制面接口提供startAgent/getAgentStatus/respond/cancelAgent四类操作,默认的agentType即"conductor",外部 worker 通过 SDK 支撑的适配器注入实现。
5. 部署后在父工作流中以 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: "a2a"(默认)调用远程 A2A 端点,agentType: "conductor"按name运行已部署的 Conductor Agent。OpenAI Agents、Google ADK 等只是 SDK 侧的编写路径,并不是agentType的取值。
AGENT任务会记录executionId、agentName、state、text以及(运行完成时的)结构化output;state是规范化的 A2A 生命周期取值:working、input-required、completed、failed或canceled。当 Agent 等待外部输入时,首个AGENT任务以完成态结束而非占用 worker,工作流可用HUMAN任务收集答复,再用带executionId的AGENT任务恢复同一运行。完整的任务契约、恢复与取消语义见 Conductor Agents。仓库还提供了若干框架无关的 workflow 集成示例 JSON(如 31-conductor-agent-basic.json、32-conductor-agent-human-in-loop.json),可直接参考其稳定的工作流契约。
6. 相关 C# 适配器一览
| 适配器包 | 编写形态 | 最小示例骨架 |
|---|---|---|
conductor-ai | 原生 Agent | new Agent("greeter") { Model = ..., Instructions = ... } |
conductor-ai-openai | OpenAI Agents 风格 | OpenAIAgent.Builder().Name(...).Instructions(...).Model(...).Build() |
conductor-ai-google-adk | Google ADK 风格 | GoogleADKAgent.Builder().Name(...).Model("gemini-2.0-flash").Instruction(...).Build() |
conductor-ai-semantic-kernel | Semantic Kernel | 保留[KernelFunction]方法类,SemanticKernelAgent.From(name, model, instructions, plugin) |
所有形态都共用Conductor.AI.AgentRuntime与RunAsync(...)/PrintResult()这套运行时契约,配置服务器连接的环境变量也完全一致,因此从一种形态切换到另一种形态的学习成本很低。
7. 常见问题与排查
- 执行失败或 UI 中无记录:先确认
CONDUCTOR_SERVER_URL指向正确的服务器,conductor-ai-openai包已正确安装,且模型提供商凭据已导出;再在 UI 中定位失败的执行任务,检查其输入与错误信息。 - 模型不可达:确认服务器端 AI 集成已启用(
conductor.integrations.ai.enabled=true,默认关闭),且所选模型的提供商已配置 API Key。 - 涉及外部副作用的 Agent 操作:在重试之前,务必先确认该操作的重试与幂等策略(是否有外部副作用),避免重复执行造成脏数据。
更多框架 Agent 的完整安装、运行与支持矩阵,可继续阅读 框架 Agent 快速开始、框架 Agent 参考 与 Conductor Agents;C# 原生 Agent 的完整入门见 你的第一个 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),仅供参考