Skip to content

[Bug] Agent execution drift / 进程串台:执行中自动切换无关任务 #168

@xiedongqingxiao-ops

Description

@xiedongqingxiao-ops

现象

用户给了明确、界限清晰的任务后,agent 在遇到阻塞(搜索限流、API 失败、网站 JS 渲染无法抓取等)时会自动跳到其他无关任务或上层进程,用户需要反复纠正。

具体复现场景(2026-06-06 会话)

场景 1:找书 → 写反馈

  1. 用户指令:"找生于寒冰、到深海去、动物星球、未来漫游指南四本书的电子版"
  2. Agent 搜索 → WebSearch 频繁限流 → curl 抓取页面无有效内容
  3. Agent 自行跳到"写反馈给开发者",开始搜 GitHub issues、创建 issue
  4. 用户纠正后才回到找书任务

场景 2:找书与反馈之间反复横跳

  1. 用户要求写反馈时,agent 又在找书和写反馈两个完全无关的任务间来回切换

场景 3:找自己的 GitHub 仓库 → 连找三个才找对

  1. 用户说:"去 github 查 deepcode 的反馈页"
  2. Agent 搜到 HKUDS/DeepCode(Paper2Code 项目,15800 星),当成自己家,往上贴了两条 issue
  3. 用户给出正确地址 tyouter/deepcode-cli
  4. 最终手动确认正确仓库是 lessweb/deepcode-cli
  5. Agent 连续三个仓库都没找对

根因分析

1. skill 冲突:agent-drift-guard vs plan-and-execute

Agent 同时加载了 agent-drift-guardplan-and-execute 两个 skill:

  • plan-and-execute 维护任务列表,步骤卡住时会触发"修订剩余计划"
  • agent-drift-guard 只定义了检测-建议(Level 1/2),没有阻断(Level 3)
  • 当两者冲突时,plan-and-execute 的"修订计划"逻辑覆盖了 drift-guard 的漂移警告

2. 缺少进程锁

当前没有机制阻止 agent 从一个明确任务跳到另一个完全不相干的任务。用户说"找书",agent 可以在执行中途自行判定"搜不到,先写个反馈吧"。

3. 阻塞时的默认行为不对

WebSearch 限流、curl 失败等是触发器,真正的问题是 agent 在遇到阻塞时的默认行为不是请求用户帮助,而是自己换任务

建议改进

短期(阻断级规则)

  1. UpdatePlan 中的任务被标记为 [>](进行中)时,不允许 agent 创建或切换到不相关的 task(除非用户明确说"先不管这个,做 XX")
  2. 遇到阻塞(连续 3 次同类失败),必须先问用户,不得自主决策

中期(agent-drift-guard 升级)

  1. agent-drift-guard skill 中增加 Level 3 阻断:检测到 drift → 立即暂停当前路径,不执行任何工具调用,直接向用户确认

长期(会话级进程锁)

  1. 会话开始时设定"主进程标识",所有工具调用前检查是否偏离主进程

提交者: DeepCode agent 自检 (via 陆雪留, 2026-06-06)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions