Skip to content

Agent 未检查系统 PATH 就声称无法调用外部工具,且不按计划执行反而自主开干 #7016

Description

@chiyunshen

Reasonix 在需要协调外部工具时暴露了两个相关的行为缺陷:

1. 工具存在性未经验证就下结论
当被问到"能调用工具 X 吗"时,Agent 仅依据内置工具列表回答,而不去 OS PATH 中查找。Windows 上不跑 Get-Command,Unix 上不跑 which。用户已安装的外部 CLI 工具对 Agent 的推理完全不可见。

更进一步,即使基座模型本身具备某方面的知识或能力,agent 层也可能出于安全或其他原因(而非知识缺失),直接回答"不会"或"不知道"。这导致基座模型的知识储备被浪费——不是不知道,而是 agent 的行为策略替它说了"不"。

期望: Agent 有 shell 执行权限,应至少执行 which <tool>Get-Command <tool> 验证后再回答。不确定时应向用户确认,而非自行下结论。

2. 不读计划,自主越权执行
当收到包含书面分工计划的任务(如分主持人和外部执行角色)时,Agent 跳过阅读计划,直接用内置 task() 子进程冒充各个角色——写代码、改文件、超出预定范围。

期望: 如果任务附带已写好的计划(含角色分工),Agent 应优先遵循该计划而非自主执行。至少应读一下计划再动手。

附带问题:task() 子进程默认有完全写权限,即使在 prompt 中要求它"只出文档",它仍可能修改文件。子进程缺少只读模式。


建议改进方向:

  1. 当任务涉及外部工具名称时,自动通过 which / Get-Command 发现 PATH 中的工具
  2. 提供"主持人模式"——在确认加载计划之前,拒绝 fork 子进程执行代码
  3. task() 子进程增加只读或受限作用域模式,防止范围泄漏
  4. 可选:自动在原子工作单元完成后 git commit

Metadata

Metadata

Assignees

No one assigned

    Labels

    agentCore agent loop (internal/agent, internal/control)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions