Skip to content

[Feature] 运维专家 Bash 命令 Human-in-the-Loop 审批 #24

Description

@databufflabs

背景 / 问题

运维专家(expertId=ops)可通过 Bash / BashOutput / KillShell 在本机容器或远程主机(ssh/sshpass)执行 shell 命令。当前无人工审批,存在误操作与安全风险:

  • AgentScopePermissionSupport 使用 PermissionMode.BYPASS,注释写明:"Our chat UI does not collect confirmations yet"
  • AgentScopeToolConfirmSupport 对 pending 工具调用自动确认
  • 前端 ThinkingProcess.vue 仅展示工具调用时间线,无 Approve / Deny 按钮
  • Bash 在 ai-apm-web 容器内以 JVM 进程权限运行,非沙箱;远程 SSH 可触达主机级操作

典型风险命令:rm -rfkill -9docker stopsshpass ... ssh ... "..." 等。

期望方案

1. 启用 AgentScope 审批流(P0)

  • 对运维专家的 BashKillShell(及可选 BashOutput)从 BYPASS 改为 ASK 模式
  • 移除或按策略关闭 AgentScopeToolConfirmSupport 的自动确认
  • Agent 进入 ToolCallState.ASKING暂停 ReAct 循环,等待用户操作

2. 后端 Pending Approval API(P0)

新增接口(路径可调整):

接口 说明
GET /api/v1/ai/sessions/{sessionId}/pending-approvals 列出待审批工具调用
POST /api/v1/ai/sessions/{sessionId}/approvals/{toolCallId} { approved: true|false, reason?: string }
  • 持久化 pending 状态:sessionId、toolCallId、toolName、command、expertId、taskId、创建时间
  • Approve → 注入 ConfirmResult(true) 并恢复 Agent 执行
  • Deny → 注入 ConfirmResult(false),Agent 重新规划或向用户说明
  • Brain → Ops 异步派发ExpertTaskService)路径同样支持暂停/恢复

3. 前端审批 UI(P0)

  • 在 AI 平台聊天区,当 Bash/KillShell 待审批时展示:
    • 完整命令预览(复用 formatBashToolParamsDisplay
    • 批准 / 拒绝 按钮
    • 远程命令(含 ssh/sshpass)额外警告标识
  • 审批期间可选禁用发送新消息,避免状态冲突
  • 审批结果写入对话时间线

4. 审批策略(P1,可配置)

策略 行为
默认 所有 Bash / KillShell 需审批
只读白名单 lscatdf -hpsdocker ps 等自动放行
高危黑名单 rmkillshutdowncurl | bash 等强制审批
按专家配置 BuiltInExpertCatalog 中为 ops 增加 requireCommandApproval: true

配置可通过环境变量或系统设置页管理。

5. 审计与脱敏(P1)

  • 记录:审批人、时间、完整命令、执行结果、exit code
  • 存储时对 sshpass -p 密码脱敏
  • 可选导出审计日志

6. 超时与并发(P2)

  • Pending 超过 N 分钟(如 30)自动过期,Agent 提示用户重新发起
  • 同一 session 同时仅一个 pending approval

不在本期范围

  • 容器级沙箱 / 命令 allowlist 硬拦截(可与 HITL 并行规划)
  • 多用户审批链(如「需两人批准」)
  • RBAC 按角色限制谁可批准高危命令

验收标准

  • 运维专家发起 Bash 命令时,UI 出现待审批卡片,命令未立即执行
  • 点击「批准」后命令执行,结果正常回显
  • 点击「拒绝」后命令不执行,Agent 给出合理反馈
  • Brain 派发 Ops 任务时,Ops 侧 Bash 同样走审批
  • 审计日志可查审批人与命令(密码已脱敏)
  • 单元/集成测试覆盖 approve/deny/resume 流程

相关代码

  • ai-apm-web/.../ai/platform/runtime/AgentScopePermissionSupport.java
  • ai-apm-web/.../ai/platform/runtime/AgentScopeToolConfirmSupport.java
  • ai-apm-web/.../ai/platform/runtime/AgentScopeExpertRuntime.java
  • ai-apm-web/.../tools/local/BashTools.java
  • ai-apm-web/.../ai/platform/task/ExpertTaskService.java
  • ai-apm-frontend/src/views/aiPlatform/chat/(ThinkingProcess 等)

安全说明

HITL 降低误执行风险,但批准后命令仍以容器/SSH 权限运行。生产环境建议配合:网络 egress 限制、只读文件系统、专用执行 sidecar 等(可另开 hardening Issue)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions