Skip to content

[business-logic] subgoal_track: recordToolCall 工具名子串匹配洗白未处理子目标(系统性漏报) #2758

Description

@topcheer

位置

internal/agent/subgoal_track.go recordToolCall(约 196 行)

问题

if strings.Contains(argLower, kw) || strings.Contains(toolLower, kw) {
    s.subgoals[i].addressed = true

工具名(tc.Name,如 read_file/edit_file/search_files/run_command)与子目标关键词做子串匹配。file/search/test/grep/command/edit 等高频词不在 sgStopWords,导致无关工具调用把子目标误标 addressed,且 addressed 单向置位无恢复。

复现场景(subagent 实测复现)

计划:

Plan:
1. Modify the config file
2. Update database schema
3. Refactor payment service

一次完全无关的 read_file /tmp/README.md 即将子目标 1 标为 addressed(read_file 含 file)。

影响

  • 方向:漏报(false negative)——subgoal warning 被系统性抑制,missing-step 早期感知失效
  • 严重度:低(advisory 非阻塞,且整个 subgoal 检测被 claimsSupervision 门控,agent.go:1978 opt-in)
  • 含 file/test/search 等词根的子目标基本全部失效

独立复核

subagent 已确认:匹配路径存在、无抵消机制、调用方传入原始工具名、构造场景实测复现。

建议修复

删除 strings.Contains(toolLower, kw) 分支(工具名是固定小集合,命中与子目标内容无关,几乎纯噪声),仅依赖 args 匹配;或对关键词加长度 ≥5 + 工具名词根黑名单过滤。

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