## 已确认问题 独立 ReAct 在进入拦截器链前解析 `availableTools`。拦截器可以通过 `ModelRequest.toolRegistry(...)` 替换调用级工具,模型请求使用替换后的声明,但返回 ToolCall 后的执行仍使用链前的 `availableTools`。相同名称可以因此对应不同实现,实际执行偏离已披露的绑定。 代码: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#L319;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#L333;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#L379。 ## 最小复现场景与证据 1. 注册原始 `lookup` 工具 A,执行时递增 `original`。 2. 拦截器用只包含同名工具 B 的 ToolRegistry 替换 ModelRequest,B 执行时递增 `replacement`。 3. 假模型第一轮返回 `lookup` 调用,第二轮返回最终回答。 实际:`original=1, replacement=0`;期望:`original=0, replacement=1`。此场景无需真实模型或外部工具。 ## 交付与验收 - [ ] 为成功模型轮次保留最终有效的可执行绑定,工具声明、参数校验、执行与上下文补丁使用同一份绑定。 - [ ] retry/fallback 修改注册表时,以实际成功的请求对应绑定为准,不复用失败尝试或其他调用的工具。 - [ ] 同名替换执行 B;新增动态名称能执行;被移除名称不能回退执行 A。 - [ ] 覆盖同名但不同 schema/实现、顺序多轮、并发运行、冷流多次订阅和流式工具调用。 - [ ] 保留当前可信上下文授权检查;修复不能通过放宽授权或用全局可变注册表实现。 ## 关联与范围 关联 #196、#191。工具筛选/动态披露另行跟踪;本单聚焦“模型实际看到的声明”和“运行时实际执行的实现”一致,不要求引入 Graph 的配置或节点绑定机制。 ## 验证基线与变更约束 审阅基线:Core `b34835354b27f1f320ea8438edf2e9d170e69c84` / Extensions `cb2635ab2fc338e8aade28a132a15f48b4e655fc`。以下为离线 stub、独立 Java 探针或候选工件编译验证的结果,不代表真实模型、外部服务或生产环境验收。 修复保持独立 ReAct/Workflow 不依赖 Graph/Loop,不向 Core 引入供应商 SDK。优先修正现有契约的执行行为;确需改变公开 API、配置或定义格式时,说明较小替代方案、收益、消费者影响、目标版本与迁移方式。不得以跳过测试或删除能力换取通过。 ## 配套缺陷 https://github.com/agentic-ai-java/argi/issues/268
Activity
konlue commentedon Nov 1, 2026
您好,我想认领 #269。
现状分析(#333 已合并,main
cfe40bd):#333 的生效工具集回传通道已覆盖本票的主场景——拦截器经ModelRequest.toolRegistry(...)换入的 registry 会进入effectiveToolSet的计算结果并回传执行侧,issue repro 的同名替换(original=1/replacement=0)在当前 main 上已不可复现;跨 turn 无残留(每 turn 重建局部引用)。残余缺口:issue 验收条件要求的六个行为测试场景(同名替换执行 B / 新增动态名可执行 / 被移除名不回退执行 A / 多轮次序 / 流式工具调用 / 并发无泄漏)在 ReActAgentTest 中一个都不存在——正确行为没有被测试锁定;retry/fallback 多 attempt 下「实际成功轮次的绑定」语义也未证明。
方案(单 PR):补齐 AC 测试套件(ScriptedClient 离线模式,含 issue repro 的 original/replacement 双计数用例与 fallback 多 attempt 的绑定归属用例);若测试暴露残余缺口(如多 attempt 回写时序),在测试红的基础上修复。重名策略沿用 #333 的静态优先遮蔽,授权检查与未知工具错误路径不动。
test(agent): lock the execution binding of the successful model turn …
Merge pull request #343 from konlue/fix/issue269-execution-binding