## 已确认问题 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