在 C/.NET 中使用 conductor-ai-openai:让 OpenAI 风格 Agent 跑在 Conductor 持久化运行时上
2026/9/10 13:41:41 网站建设 项目流程

在 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-mini

3. 运行前配置 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)都遵循同一条路径:

  1. 开发期运行(run):把框架的 Agent 对象传给 SDK 并运行,SDK 将其编译为工作流图并在 Conductor 上执行,首次运行即可在 UI 中看到持久化执行。
  2. 稳定后部署(deploy):部署会把编译后的 Agent 以"命名、带版本"的 Conductor Agent 注册到服务器,调用方无需引入你的框架及其依赖即可调用它。
  3. 常驻服务(serve):SDK 把工具当作本地函数执行时,需要有一个 worker 进程在运行以执行这些工具;部署的 Agent 在被使用的整个周期内都应保持该进程运行。
  4. 工作流调用:父工作流通过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任务会记录executionIdagentNamestatetext以及(运行完成时的)结构化outputstate是规范化的 A2A 生命周期取值:workinginput-requiredcompletedfailedcanceled。当 Agent 等待外部输入时,首个AGENT任务以完成态结束而非占用 worker,工作流可用HUMAN任务收集答复,再用带executionIdAGENT任务恢复同一运行。完整的任务契约、恢复与取消语义见 Conductor Agents。仓库还提供了若干框架无关的 workflow 集成示例 JSON(如 31-conductor-agent-basic.json、32-conductor-agent-human-in-loop.json),可直接参考其稳定的工作流契约。

6. 相关 C# 适配器一览

适配器包编写形态最小示例骨架
conductor-ai原生 Agentnew Agent("greeter") { Model = ..., Instructions = ... }
conductor-ai-openaiOpenAI Agents 风格OpenAIAgent.Builder().Name(...).Instructions(...).Model(...).Build()
conductor-ai-google-adkGoogle ADK 风格GoogleADKAgent.Builder().Name(...).Model("gemini-2.0-flash").Instruction(...).Build()
conductor-ai-semantic-kernelSemantic Kernel保留[KernelFunction]方法类,SemanticKernelAgent.From(name, model, instructions, plugin)

所有形态都共用Conductor.AI.AgentRuntimeRunAsync(...)/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),仅供参考

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

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

立即咨询