Skip to content

[Bug] analyze_music 成功后可被 Agent 以相同参数连续重复执行并刷屏 #116

Description

@ShallM

版本

main 源码,commit 320c07f

平台 / 功能

macOS Apple Silicon;AI Agent 对话剪辑 / 音乐分析。

问题描述

一次 analyze_music 已成功返回后,Codex 仍可能在后续 turn 反复发出完全相同的 tool call。Server run 是无 turn 上限循环,且没有针对昂贵纯工具的连续重复保护,因此每次都会重新跑本地节拍和 CLAP 分析,并把完整 JSON 结果重复写入聊天。

实际观测

同一 run、同一 itemId、force=true、相同 args digest:连续执行 4 次成功分析,第 5 次仍在开始;人工停止后 run 才结束。每次都返回相同的 120 BPM / 38 beats 结果,只是 analysisRef/profile digest 有变化。

复现步骤

  1. 使用 Codex 后端请求只调用一次 analyze_music
  2. 参数为固定 itemId 和 force=true
  3. 某些模型采样下,首个成功结果返回后会再次发出同一调用。
  4. 查看 run ledger 和聊天工具卡片。

期望行为

对相邻、字节等价参数的昂贵纯工具,首个成功结果应成为权威结果;重复请求应复用结果并终止循环,不能再次消耗本地算力或 Codex 额度。不同参数或中间发生状态修改时仍应允许重跑。

实际行为

runner 无条件执行每个重复调用,造成长时间占用、重复 JSON 和额度浪费。

根因定位

无界 turn loop 依赖模型自行停止;executeBrowserTool 没有成功结果的短期幂等 guard。

建议修复

  • 仅缓存“紧邻的同工具 + 同 args digest + 已成功”的纯工具结果。
  • 任意不同工具/参数调用立即清除缓存,避免读到状态变更前的旧结果。
  • 重复请求不创建新的 browser tool-request,不重跑模型。
  • 将 run 正常完成,并留下简短 guard 说明。
  • 添加相同/不同 digest 和跨工具回归测试。

本地验证

加入窄范围 guard 后,全量测试通过;真实界面运行只有 1 个 tool_requested 和 1 个 success outcome,run 状态为 completed,聊天只显示一句摘要。

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions