Conductor 工作流如何调用远程 A2A Agent(AGENT 任务)?

发布时间:2026/9/12 12:15:34

Conductor 工作流如何调用远程 A2A Agent(AGENT 任务)? Conductor 工作流如何调用远程 A2A AgentAGENT 任务【免费下载链接】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如果你的工作流需要调用一个部署在别处的 A2AAgent2Agent远程 Agent——比如官方的a2a-sdk参考 Agent 或其他框架实现的 A2A 服务——Conductor 提供了AGENT这类持久化系统任务来完成这件事工作流向远程 Agent 发送message/send由引擎负责轮询、超时、重试和重启恢复远程 Agent 的返回结果状态、文本、artifacts会作为该任务的 output 供下游任务引用。本文的完整操作路径是启用 AI 集成 → 准备一个可被调用的 A2A Agent → 编写并注册包含AGENT任务的工作流 → 运行 → 核对任务输出。主要依据是 A2A 集成文档 与 A2A 端到端测试说明。前置条件启用 AI 集成并放行 Agent 地址AGENT、GET_AGENT_CARD、CANCEL_AGENT这几个任务要求 Conductor 开启 AI 集成默认关闭conductor.integrations.ai.enabledtrue同时注意文档中的 SSRF 防护agentUrl解析到 loopback、RFC-1918 私有网段、link-local 或 IPv6 unique-localfc00::/7地址时会被拒绝云元数据地址则始终被阻断。开发环境里调用本机 Agent如http://localhost:9999需要额外打开conductor.a2a.client.allow-private-networktrue打开该开关后云元数据地址依然被拒。文档建议生产环境优先用网络层出口防火墙控制访问。如果任务报错信息包含… SSRF blocked就是这一层拦截按上面处理即可。准备一个可被调用的远程 A2A Agent测试目标要真正跑通链路你需要一个真实的 A2A 服务端点。仓库自带一个基于官方 Pythona2a-sdk的最小 echo Agentecho_agent.py。副作用说明下面的命令会创建一个 Python 虚拟环境并联网安装a2a-sdk与uvicorn需要uv工具。它不修改 Conductor 仓库本身只在本机准备一个独立的 Agent 进程。uv venv --python 3.12 uv pip install a2a-sdk0.2,0.3 uvicorn AGENT_MODEtask python ai/src/test/resources/a2a/echo_agent.py # serves http://localhost:9999AGENT_MODEtask表示该 Agent 返回一个 A2A Task可轮询AGENT_MODEmessage则直接返回一条 message。该 Agent 起在http://localhost:9999其 Agent Card 位于/.well-known/agent-card.json。如果你有自己部署的 A2A 服务直接把它的基础 URL 当agentUrl用即可——工作流只需要这一个信息。编写工作流AGENT 任务的定义与关键输入agentType决定AGENT任务调用哪一类运行时agentType: a2a默认——调用远程 Agent2Agent 端点agentUrl即本文场景agentType: conductor——按name运行已部署的 Conductor Agent见 Conductor Agents。它不是用来选框架OpenAI Agents、Google ADK、LangGraph 等的无法识别的值会直接让任务失败。完整输入字段参照A2ACallRequest本文用到的字段如下字段说明agentTypea2a默认调远程端点conductor运行已部署 Conductor Agent其他值被拒绝agentUrl远程 Agent 基础 URL必填text/prompt单文本 part 的简写parts/message完整 A2A 消息多 part / data part替代textcontextId、taskId续接已有会话 / 恢复远程 Agent 任务多轮headers每次调用的 HTTP 头如鉴权凭据建议走工作流 input/secrets 而不是硬编码pollIntervalSecondspoll 模式的轮询间隔默认 5streamingtrue→ 消费message/streamSSE并聚合到完成pushNotificationtrue→ 任务完成时由 Agent 回调 Conductor 的 webhookmaxDurationSeconds绝对截止时间默认 86400maxPollFailures容忍的连续瞬时轮询失败次数默认 30示例工作流仓库内ai/examples/10-a2a-call-agent.json展示了最小形态{ name: a2a_agent, version: 1, schemaVersion: 2, tasks: [ { name: call_currency_agent, taskReferenceName: agent, type: AGENT, inputParameters: { agentType: a2a, agentUrl: http://localhost:9999, text: convert 100 USD to EUR, pollIntervalSeconds: 5, headers: { Authorization: Bearer ${workflow.input.agentToken} } } } }上面的${workflow.input.agentToken}是模板表达式启动工作流时通过 input 传入如果你的 Agent 不需要鉴权删掉整个headers块即可。文档还给出一个更完整的参考工作流a2a_interop_echo先用GET_AGENT_CARD发现 Agent 的 card再调用它agentUrl和 prompt 作为工作流输入同一份定义可以对接任意 A2A Agent{ name: a2a_interop_echo, version: 1, schemaVersion: 2, description: Discover a remote A2A agent, then call it., ownerEmail: a2aexample.com, tasks: [ { name: discover_agent, taskReferenceName: discover, type: GET_AGENT_CARD, inputParameters: { agentUrl: ${workflow.input.agentUrl} } }, { name: call_agent, taskReferenceName: call, type: AGENT, inputParameters: { agentUrl: ${workflow.input.agentUrl}, text: ${workflow.input.prompt}, pollIntervalSeconds: 2 } } ] }GET_AGENT_CARD从/.well-known/agent-card.json解析找不到时回退到旧路径/.well-known/agent.json返回解析后的 skills/capabilities可喂给 LLM 在运行时选 skill。注册并运行工作流把上面的定义保存为a2a_interop_echo.json然后注册、启动# register curl -X POST localhost:8080/api/metadata/workflow \ -H Content-Type: application/json -d a2a_interop_echo.json # run against a reachable A2A agent curl -X POST localhost:8080/api/workflow/a2a_interop_echo \ -H Content-Type: application/json \ -d {agentUrl:http://localhost:9999,prompt:convert 100 USD to EUR}这里agentUrl指向前面启动的 echo Agentlocalhost:9999替换成你自己的 A2A 服务地址即可。验证调用结果仓库的 interop 演示脚本 用下面的方式查询工作流状态与任务输出轮询到终态curl -sS localhost:8080/api/workflow/workflowId判定成功的依据来自 A2A 测试说明 的 Full-server verification工作流状态为COMPLETEDAGENT任务的 output 携带 Agent 返回的state、text、artifacts、taskId、contextId。AGENT任务的 output下称agent.output字段为stateA2A 任务状态、taskId与contextId用于恢复、artifacts、text提取出的文本、agentMessage以及完整task对象。完成调用时文档给出的示例输出文档示例非固定预期{ state: completed, taskId: task-7f3a, contextId: ctx-7f3a, text: 100 USD 92.40 EUR, artifacts: [ { artifactId: result, parts: [ { kind: text, text: 100 USD 92.40 EUR } ] } ] }下游任务用${agent.output.text}、${agent.output.taskId}等表达式引用这些值。仓库还提供了一个端到端演示脚本 run-interop-demo.sh要求 Java 21、curl、uv或已装a2a-sdk的A2A_VENV不需要 Docker、Redis 或 API key。副作用说明它会删除/tmp下的conductor-a2a-interop*状态文件、在/tmp创建 Python venv 并安装依赖、启动本地 Conductor端口 7002与 echo Agent端口 9998进程退出时自动终止这两个进程。运行它可以直接看到文档给出的预期输出示例workflow status : COMPLETED discovered agent: Echo Agent agent state : completed agent reply : echo-task: convert 100 USD to EUR ✓ Conductor discovered and called a real third-party A2A agent. That is A2A interop.长任务三种执行模式怎么选AGENT任务是非阻塞的快速回复立即完成长任务进入IN_PROGRESS后被轮询期间不占 worker 线程重启也能恢复。三种模式Poll默认——任务为IN_PROGRESS按pollIntervalSeconds通过tasks/get轮询轮询之间不占线程调用在重启后存活。Streamingstreaming: true——消费 Agent 的 SSE 流并聚合事件要求 Agent Card 声明capabilities.streamingtrue否则行为退化为 poll。流期间占线程文档建议交互式/短流场景用 streaming长任务优先 poll 或 push。PushpushNotification: true——任务完成时 Agent 回调 Conductor 的 webhook期间不轮询要求配置对外可达的conductor.a2a.callback.url且仍有pushBackstopPollSeconds默认 300兜底轮询防止 webhook 丢失挂死任务。conductor.integrations.ai.enabledtrue conductor.a2a.callback.urlhttps://conductor.example.com失败语义与排查AGENT把远程结果映射到 Conductor 任务状态引擎的正常重试/超时机制随之生效。重试会复用确定性的messageId由workflowInstanceId referenceTaskName iteration派生对按messageId去重的 Agent 相当于 effectively-once 投递。失败原因记录在task.reasonForIncompletion。条件任务状态会重试HTTP 408/429/5xx、连接/读超时、流中断/空流FAILED是JSON-RPC 瞬时错误如-32603internalFAILED是远程 Agent 任务结束为failed/rejectedFAILED是HTTP 4xx408/429 除外FAILED_WITH_TERMINAL_ERROR否JSON-RPC 终态码-32700/-32600/-32601/-32602/-3200{1..5,7}FAILED_WITH_TERMINAL_ERROR否缺agentUrl/ 空消息 /SSRF 拦截FAILED_WITH_TERMINAL_ERROR否超过maxDurationSeconds或连续maxPollFailures次轮询失败FAILED_WITH_TERMINAL_ERROR否文档给出的常见现象对照现象原因 / 处理… SSRF blockedagentUrl解析到私有/loopback/元数据地址。用公网 URL或为可信/开发环境设conductor.a2a.client.allow-private-networktrue云元数据始终拦截streaming: true却表现为 pollAgent Card 是capabilities.streamingfalse客户端只在 Agent 声明支持时才走流N 次轮询失败后失败Agent 不可达——调大maxPollFailures或检查连通性挂起后在截止时间失败Agent 在maxDurationSeconds内未到达终态多轮交互input-required与取消远程任务到达input-required或auth-required时AGENT任务会完成并在 output 中带出 Agent 的问题与taskId/contextId。工作流按状态分支SWITCH再用相同的taskId和contextId发一个新AGENT任务带回答案——这是恢复同一个远程任务而不是开新会话。完整示例见 29-a2a-client-multi-turn.json。取消运行中的远程 Agent 任务用CANCEL_AGENT引用前一步拿到的 taskId{ name: cancel_agent_task, taskReferenceName: cancel, type: CANCEL_AGENT, inputParameters: { agentUrl: https://currency-agent.example.com, taskId: ${agent.output.taskId} } }下一步AGENT是普通持久化任务可用常规 Conductor 算子编排多个 AgentFORK_JOIN并行调用多个 Agent、JOIN汇合结果每条分支各自 crash-safe。仓库内的相关示例10-a2a-call-agent.json — poll 模式调用远程 Agent11-a2a-get-agent-card.json — 发现 Agent 的 skills27-a2a-multi-agent.json —FORK_JOIN → JOIN并行多 Agent28-a2a-llm-pick-skill.json — 发现 → LLM 选 prompt → 调用反向场景把 Conductor 工作流暴露为 A2A Agent 供外部客户端调用与流式服务端行为见 A2A 集成文档 的 server 部分【免费下载链接】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),仅供参考
延伸阅读

更多相关文章

2026/9/12 12:10:34

EasyClaw实测:个人效能提升200%的6大应用场景

1. 项目概述"一个人EasyClaw能顶几个人?真实用户的6个使用场景实测报告"这个标题揭示了现代生产力工具如何赋能个人工作效能的主题。EasyClaw作为一款新兴的效率工具,正在改变传统工作模式中的人力资源配置方式。通过6个真实使用场景的实测数据…

2026/9/12 12:10:33

SonarQube在Windows环境下的部署与代码质量管理实践

1. SonarQube核心价值解析SonarQube作为静态代码分析领域的标杆工具,其核心价值在于将代码质量管控从"事后检查"转变为"持续监测"。不同于传统IDE自带的代码检查功能,SonarQube通过独立服务的形式,实现了以下关键能力&am…

2026/9/12 13:05:35

基于CASADI的自动驾驶路径规划与动态避障实现

1. 项目概述在自动驾驶和智能车辆控制领域,车道跟踪与动态避障是两项核心功能,直接关系到行车安全性和乘坐舒适性。这个项目采用CASADI优化框架,结合Matlab实现了一套集成化的路径规划与控制系统,能够同时处理车道保持和突发障碍物…

2026/9/12 13:05:35

AI时代GEO优化:企业流量获取新策略

1. AI搜索时代的企业流量争夺战当ChatGPT每天处理2亿次搜索请求,Google全面整合AI概览功能时,传统SEO规则正在被改写。最近帮一家跨境电商客户做诊断时发现,他们精心优化的关键词页面在AI搜索中的曝光量骤降40%,而竞品采用GEO策略…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/12 10:09:03

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码