Skip to main content

功能说明

invoke_skill 和 poll_skill 提供非阻塞的技能任务执行能力。invoke_skill 通过 A2A 协议向 AgentKit 技能沙箱发送非阻塞请求,创建一个技能任务并立即返回初始任务对象;poll_skill 根据任务 ID 获取任务的当前状态快照。两者配合使用,开发者可以在不阻塞智能体推理的情况下启动长时间运行的技能工作流,并按需轮询任务状态。 与 execute_skills 的区别: 适用场景:
  • 技能工作流执行时间较长,不希望在单次工具调用中阻塞等待;
  • 需要在启动技能任务后执行其他操作,再在合适时机查询结果;
  • 需要对任务状态进行自定义的轮询控制。
invoke_skill 和 poll_skill 复用 execute_skills 的沙箱基础设施与凭证配置。环境变量、Tool ID、入站身份凭证等前提条件与代码沙箱页面中的说明一致,此处不再重复。

使用方法

导入路径:
将两个工具直接注册到 Agent 的 tools 列表,智能体即可在推理过程中按需调用:先通过 invoke_skill 启动技能任务,再通过 poll_skill 查询任务状态。
skill_tasks_agent.py

任务对象

invoke_skill 和 poll_skill 均返回 A2A 任务对象(dict),包含以下关键字段: 任务状态包括: submitted 与 working 表示任务尚未完成,unknown 表示无法确定当前状态。completed、failed、canceled、rejected 为结束状态;input-required 与 auth-required 表示流程需要外部处理,不能当作成功。VeADK 的等待工具会在后两种状态停止等待,但这不意味着 A2A 协议禁止任务后续继续变化。poll_skill 每次重新查询服务端,不保证返回不可变快照

invoke_skill

创建一个 A2A 技能任务并返回初始任务对象。调用时发送非阻塞的 message/send 请求,不等待任务完成。
tool_context 在签名中标记为可选,但实际调用时必须提供,否则会报错。VeADK 在智能体运行时自动注入该参数,无需手动传入。

poll_skill

获取一个 A2A 技能任务的当前状态快照。调用时发送 tasks/get 请求,返回任务对象。
tool_context 在签名中标记为可选,但实际调用时必须提供,否则会报错。VeADK 在智能体运行时自动注入该参数,无需手动传入。

安全边界

invoke_skill 和 poll_skill 在远端技能沙箱中执行工作流,沙箱中的代码可以访问沙箱网络可达的服务并读写文件。运行前应确认技能来源可信,并限制沙箱可访问的数据、网络和权限。入站身份凭证(凭证键 inbound_auth)会以 inbound_auth 请求头转发给技能沙箱,使沙箱中的工作流能够以原始用户身份执行;当前请求未携带入站凭证时不附加该请求头,不转发该用户身份,但访问沙箱仍需有效的云服务凭证与权限。入站身份凭证的来源与配置方式参见入站认证。

任务查询的上下文

invoke_skill 返回前仍需建立沙箱会话并完成一次网络请求,因此非阻塞仅指不等待整个工作流结束。查询时保留原任务 id,使用相同的 Tool ID、用户和会话上下文;更换会话后不能假定仍能访问同一任务 状态查询不创建新任务。应用应限制轮询频率并在 input-required 或 auth-required 时处理所需输入或授权;不要反复提交相同工作流。completed 后还需读取任务的输出或产物,不能仅凭任务 ID 或状态字符串交付结果
最后修改于 2026年9月19日