Skip to content

[BUG][P2] 独立 ReAct 的 UsageUpdate 应发送调用级累计用量而非单轮用量 #279

Closed

Description

@Aias00

已确认问题

AgentEvent 明确规定 UsageUpdate 是调用级累计快照,消费者应覆盖而非相加。ReAct 非流式模型调用虽然执行 usage.add,却向外发送 response.usage;流式路径也直接转发当前模型流的 USAGE。因此多轮工具循环中,对外事件与最终累计结果不一致。

契约:https://github.com/agentic-ai-java/argi/blob/b34835354b27f1f320ea8438edf2e9d170e69c84/argi-agent/argi-agent-api/src/main/java/io/github/agentic/ai/agent/AgentEvent.java#L25;实现:https://github.com/agentic-ai-java/argi/blob/b34835354b27f1f320ea8438edf2e9d170e69c84/argi-agent/argi-agent-core/src/main/java/io/github/agentic/ai/agent/react/ReActAgent.java#L387、https://github.com/agentic-ai-java/argi/blob/b34835354b27f1f320ea8438edf2e9d170e69c84/argi-agent/argi-agent-core/src/main/java/io/github/agentic/ai/agent/react/ReActAgent.java#L431。

最小复现与证据

假模型第一轮返回工具调用、usage.totalTokens=2,工具成功后第二轮返回终态、usage.totalTokens=3。订阅独立 ReAct 事件直到 onComplete。

实测 UsageUpdate 为 [2, 3],Finished.outcome.usage.totalTokens 为 5。遵守覆盖语义的消费者最终显示 3,而不是 5;正确的已知累计快照应为 [2, 5]。

交付与验收

  • 非流式与流式 UsageUpdate 均遵循调用级累计快照语义,正常完成时与最终 outcome 的已知用量一致。
  • 流式单轮的多次 usage 快照不能被重复累加;先区分当前轮快照与已完成轮次累计值。
  • 未知/部分未知字段保留 unknown,不能用精确零伪装缺失统计;取消或失败时不猜测远端未返回的实际消耗。
  • 覆盖单轮、多轮、同轮重复 usage、部分未知、并发运行及流式/非流式一致性。
  • 通过按契约覆盖事件的消费者验证结果,不能只验证 Finished 里的总数;不要要求现有消费者改成相加来绕过实现错误。

与既有任务的边界

关联 #196、#236、#249。#249 是分类明细及整体去重语义增强;本单是现有三字段事件已违反自身累计契约的具体 bug。#207 的额外修复调用漏统计仍独立验收,不在本单建设价格或预算系统。

验证基线与变更约束

Core b34835354b27f1f320ea8438edf2e9d170e69c84;Extensions cb2635ab2fc338e8aade28a132a15f48b4e655fc。本轮 Core 19 模块 clean install 通过,2517 个测试中 173 个跳过;此处缺陷由额外的独立 Java 探针确认,说明已有测试尚未覆盖对应行为,不代表真实模型或生产环境验收。

优先修复现有契约的实现,不强制拆模块或重命名,不让独立 Agent/Workflow 反向依赖 Graph/Loop,不向 Core 引入供应商 SDK。若必须改变公开 API、事件、配置或持久格式,说明较小替代方案、消费者影响、收益、迁移成本与目标版本;不得通过删测试、吞错误或弱化取消保证获得通过。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions