跳至正文

父子智能体额度与结果 ​

本页阅读位置

完成第一轮对话后,按当前业务需求深入。Spring 常规声明优先使用 RegistrationManifest 与注解;本页的底层 register / publish 或直连方法供协议细化与兼容集成参考。

根 Agent 的额度覆盖整个任务。子 Agent 执行时按自己的定义预留父级剩余额度,实际消耗同时记入全部祖先;结束后归还未用容量。可以分别限制字符处理、供应商 Token 和费用,并读取带执行身份的结构化子结果。

配置额度 ​

在控制台“智能体”中新建或复制版本,在“执行额度与子调用限制”填写;已发布版本只读。SDK 注册时将以下对象放入 Agent definition 的 limits。

字段默认范围含义
maxSteps81–32模型实际尝试总次数,切换候选也计数
maxToolCalls160–64模型返回的函数调用总次数,含 Tool、Agent、UI
maxAgentCalls80–64子调用次数,根入口不计;0 禁止委派
maxDepth30–8自身之下可委派层数,0 禁止继续委派
maxBudgetUnits32000256–1000000序列化输入、工具描述和输出的字符处理保护量
timeoutSeconds1201–600当前调用时限,与所有祖先取较早截止时间
maxProviderTokens不限制0–1000000000000此调用及后代的供应商 Token 总额
maxCost不限制currency、amount此调用及后代的金额上限,amount 为十进制字符串

maxTokens 是旧字符字段,保留读取兼容;新配置使用 maxBudgetUnits,两者不能同时设置。它们不是供应商计量,providerUsage 不会重复扣入字符额度。流式文本到达时立即消费字符量,越界停止继续输出或执行能力。

json
{
  "maxSteps": 8,
  "maxToolCalls": 16,
  "maxAgentCalls": 2,
  "maxDepth": 2,
  "maxBudgetUnits": 32000,
  "timeoutSeconds": 120,
  "maxProviderTokens": 100000,
  "maxCost": {"currency":"USD","amount":"1.00"}
}

子定义不会绕过根限制:根剩余 3 步而子定义允许 8 步时,最多预留 3 步。执行失败不返还已经消费的步数、字符或子调用计数。父调用仍需剩余容量处理子结果;根总步数应覆盖父模型、子模型和父模型总结。

供应商 Token 与费用 ​

精确 Token/金额预留需要模型声明 capabilities.contextWindow;费用还需要完整、相同币种的 pricing。每次发送前按上下文窗口与最大输出上限保守预留,完整结束回执后按实际用量结算。配置 0 表示禁止发送。

根、祖先、当前子调用和应用配额在一个数据库事务内共同预留;任意一项不足都不会发送请求,调用账本保留 NOT_SENT。内部额度桶 period=RUN 固定为原任务周期,跨 UTC 日界不会恢复额度。runId 和 agentCallId 可用于关联查询 /quotas/usage;这些桶由系统创建,不通过公开配额策略编辑。

未知价格、上下文上限或币种不匹配会拒绝发送。已发送请求即使超时或回执丢失,也保留 UNKNOWN 预留;通过模型调用账本凭供应商证据核对,不能把未知消耗填为 0。供应商超出其声明、缓存折扣、税费或实际账单差额需核对,平台不能追回已经发生的外部费用。

SDK 示例 ​

java
var limits = AgentLimits.builder()
    .maxSteps(8).maxAgentCalls(2).maxBudgetUnits(32000)
    .maxProviderTokens(100000).maxCost("USD", "1.00")
    .timeoutSeconds(120).build();
var definition = Map.<String,Object>of(
    "systemPrompt", "按授权处理业务任务",
    "modelProfile", Map.of("id", "balanced", "version", "1.0.0"),
    "limits", limits.definition());
manager.register("agents", "main", "1.0.0", definition);
// USER 客户端读取自己的任务结果;子完成不会替代根任务终态。
var results = userClient.agentResults(runId, 0).toCompletableFuture().get();
for (AgentResult result : results) {
    System.out.println(result.agentId() + "@" + result.agentVersion());
    System.out.println(result.outputType()); // TEXT / JSON
    System.out.println(result.output());
    System.out.println(result.usage().get("modelInvocationIds"));
}
kotlin
val limits = agentLimits {
    maxSteps = 8
    maxAgentCalls = 2
    maxBudgetUnits = 32000
    maxProviderTokens = 100000L
    timeoutSeconds = 120
    maxCost("USD", "1.00")
}
manager.register("agents", "main", "1.0.0") {
    field("systemPrompt", "按授权处理业务任务")
    reference("modelProfile", "balanced", "1.0.0")
    field("limits", limits.definition())
}.awaitResult()
val results = userClient.agentResultsSuspend(runId)

Java 示例说明:

注册只是创建草稿,仍需发布;委派还需要 allowedAgents 与 delegatedCapabilities 的授权上限。

前端 SDK ​

typescript
for await (const result of client.agentResults(runId)) {
  if (result.output.type === 'JSON') {
    console.log(result.output.value)
  }
  console.log(result.usage.modelInvocationIds)
}
// React/Vue 共用 ChatSession,成功结果会加入快照。
const snapshot = session.getSnapshot()
console.log(snapshot.agentResults)

结果携带 agentCallId、parentAgentCallId、depth、agentId、agentVersion、status、text、output、usage。TEXT 的 value 为文字;JSON 的 value 为通过 Model Profile 输出 Schema 校验的对象。身份、引用和用量由运行时生成,模型不能用同名 JSON 字段覆盖。引用列表去重、累计到祖先,模型调用编号和引用编号各最多 256 个,越界拒绝继续生成。

text 保留兼容,output 表达类型;向父模型传入完整结果而非只有字符串。结果可从授权事件读取,子文字不会追加进主回复 text.delta。前端和 Java SDK 会验证结果与完成事件身份一致并冻结快照。旧 agent.completed 没有 result 时仍可消费。

只用 message.completed 判断任务终态。子 Agent 失败/超时会让当前任务失败并保留证据;没有自动重放工具或整个任务。这里的额度支持原子分配,当前执行顺序仍为串行,不把它解释为并发子 Agent 执行。

管理页面查看结果 ​

在“运行记录 → 详情”查看父子调用、精确版本、结构化输出、作用域用量和模型/引用编号。结果包含业务正文,读取仍受任务所有者身份及当前文档/业务权限校验;管理员凭据不能自动读取。面板允许输入运行所有者的应用凭据,此凭据只用于本次读取,提交后清空。无结果权限不影响管理员查看工具和模型事实账本。已超过事件保留窗口或归档的任务显示说明,不伪造历史结果。

在“配额与预算 → 周期使用量”中,RUN 桶显示为“智能体调用额度”,列出任务和调用编号,区别于应用 UTC 周期策略。费用未知仍保留预留,需在模型调用账本核对供应商事实。

验证与排障 ​

现象检查
BUDGET_EXCEEDED当前 Agent 和全部祖先额度、应用预留、模型尝试次数
QUOTA_PRICE_UNKNOWN金额限制要求完整价目,不能把未知当免费
QUOTA_TOKEN_BOUND_UNKNOWN补齐模型上下文窗口,再发布新模型版本
QUOTA_CURRENCY_MISMATCH所有当前生效金额预算须与模型币种一致
AGENT_TIMED_OUT子调用独立时限和祖先截止时间;网络与审批同样受限
CONFIRMATION_EXPIRED子调用已超时,审批不能继续执行危险操作

实际隔离平台已通过 SDK 注册父子 Agent、JSON 子结果、3 次供应商调用/45 Token 的根汇总、费用结算及零额度发送前拒绝。单元测试覆盖并发预留不超发、嵌套回收、局部耗尽、引用上限和较早截止时间;HTTP 测试覆盖无额度、子步骤不足、子超时与唯一任务结束。

状态:已确认;日期:2026-09-30;责任人:SparkTide 维护者;关联任务:R04;来源:AgentBudgets、ExecutionEngine、Quotas、AgentBudgetCompatibilityTest;证据:本地构建、HTTP 与 SDK 隔离实例验证。真实厂商计费与生产容量需按部署环境验证。

适用版本:0.1 发布线 · 最近核对:2026-10-09 · SparkTide 产品文档

汇聚智能,驱动涌现。