当前位置: 首页 > news >正文

转载--AI Agent 架构设计:人和 Agent 的边界在哪里(OpenClaw、Claude Code、Hermes Agent 对比)

原文:https://mp.weixin.qq.com/s/wQ4ueEypquQp8i5P49eXGw

为什么要谈人和 Agent 的边界?

Agent 越来越能干,能做的事越来越多。但有一个现实没有因此改变:

Agent 能做某件事,不等于它应该做某件事。

一个 Agent 能调用数据库删除命令,能发送外部邮件,能修改生产服务器配置——这些在技术上都不困难。但这些操作一旦出错,后果是不可逆的。

这不是能力问题,是责任问题。

语言模型生成的是高度自信的推理轨迹,但不具备对后果的真实理解。Agent 不会"感受到"删除了错误的数据,不会"意识到"发出的邮件去到了错误的人,不会"担心"改坏了生产环境。它只知道它执行了一个动作,然后输出了下一步的推理。

这是为什么边界很重要——不是因为 Agent 不够聪明,而是因为在某些决策上,智能不是问题所在,责任才是。

不可逆性是核心判断标准

在确定人和 Agent 的边界时,有一个最重要的判断维度:

这个操作是可逆的吗?

可逆操作出了错,可以回滚、撤销、纠正。代价是时间和成本,但损害是有界的。

不可逆操作出了错,没有撤销按钮。删了就是删了,发了就是发了,改了就是改了。

EU AI Act(欧盟 AI 法案)关于高风险 AI 系统的规定,核心逻辑也是这个:不可逆后果的决策,必须有人类监督。

从这个角度出发,可以对 Agent 的操作做一个简单的分类:

完全可以交给 Agent(低风险,可逆):

  • 读取文件、搜索信息、分析数据

  • 生成草稿、建议方案、整理内容

  • 运行测试、执行只读查询

  • 在沙箱/开发环境里的任何操作

需要人确认后才执行(中等风险,有成本):

  • 修改代码并推送到主分支

  • 发送外部通信(邮件、消息)

  • 创建或修改数据库记录

  • 购买或订阅付费服务

永远需要人主导(高风险,不可逆):

  • 删除数据(尤其是生产数据)

  • 批准重要合同或法律文件

  • 医疗诊断和治疗决策

  • 涉及大额资金的财务操作

  • 影响他人的重大人事决策

审批疲劳:最大的人机协作陷阱

理解了边界的原则后,有一个实践中的陷阱需要特别警惕:

审批疲劳(Approval Fatigue)。

一个研究发现很能说明问题:当 Agent 系统对每一个操作都要求人工确认,用户在高频率的审批请求下,会开始习惯性地点击"允许"——不读内容,直接批准。这让精心设计的人机协作变成了一个表演给监管者看的仪式,而不是真正的安全保障。

Claude Code 的内部数据印证了这个问题:用户批准了 93% 的权限提示。这意味着只有 7% 的提示真正引发了用户的深思。其余 93%,用户实际上把控制权交给了 Agent,只是多了一个点击的动作。

这揭示了设计人机协作边界的核心原则:

不要把人放在每一个决策点上,而是把人放在真正重要的决策点上。

人类的注意力是稀缺的。把它浪费在低风险的确认上,会挤占高风险决策时的注意力和判断质量。审批设计的目标是减少不必要的人工干预,把人的精力集中在真正需要人判断的地方。

这也是 Claude Code 推出 Auto Mode 分类器的原因:用机器来判断常规操作,把真正需要人判断的情况筛选出来,送给人做决策。

三个框架各自怎么划定边界

OpenClaw:边界由用户定义,默认宽松

OpenClaw 的安全哲学是:给 Agent 最大的能力,让用户自己决定边界在哪里。

通过六层权限策略(全局 → 模型提供商 → Agent → 群组 → 沙箱 → 子 Agent),用户可以配置哪些操作需要审批,哪些可以自动执行。

但默认配置是宽松的——没有 Shell 命令白名单,没有自动审批限制,没有凭证访问控制。把边界设计的责任交给用户,意味着边界质量取决于用户的安全意识。

在实践中,大多数用户不会主动配置严格的边界——直到出了问题才意识到需要收紧。ClawHavoc 事件里,攻击者通过恶意 Skill 污染了 MEMORY.md,让 Agent 在用户不知情的情况下持续执行攻击者的指令。这个攻击能成功,是因为 Agent 拥有的权限没有明确的边界。

Claude Code:三档权限 + Auto Mode 分类器

Claude Code 的权限设计把所有操作分成三档:

自动执行:只读操作(文件读取、文本搜索)。不改变系统状态,默认不中断。

按需确认:修改受控状态的操作(文件编辑、特定 Shell 命令)。Auto Mode 分类器在这里介入,评估操作是否符合用户原始意图。

拦截或要求明确审批:高风险操作——工作目录之外的文件修改、疑似数据外泄的行为、破坏性 Shell 命令。

Auto Mode 分类器的设计细节值得关注:它看不到模型的推理过程,也看不到工具的执行结果。这是结构性防御——防止模型用流畅的解释"说服"分类器放行危险操作,防止恶意内容通过工具输出影响分类判断。

这个"信息隔离"设计把人机边界从"用户点击确认"提升到了"机器对机器的独立验证"——分类器不受模型推理的影响,只看行为和原始意图。

Plan Mode 是另一个值得关注的设计:在真正执行之前,先让 Agent 生成完整的执行计划,等用户确认,再执行。这把人的判断从"操作过程中的实时审批"提前到"执行开始前的计划审查"。在没有副作用的时候做判断,比在产生了副作用之后纠错成本低得多。

Hermes Agent:Fail-Closed 默认,容器隔离爆炸半径

Hermes 的人机边界设计有两个层面。

应用层:危险命令审批机制——基于模式匹配(递归删除、权限修改、sudo 使用等),匹配到危险模式就触发审批。

approvals:mode: manual ← 手动确认(默认)smart ← AI 辅助判断off ← 全自动(YOLO 模式)timeout: 60 ← 超时默认拒绝,不是默认允许

超时默认拒绝(fail-closed)是正确的安全设计原则:不确定时,选择更保守的行为。OpenClaw 的某些场景下超时默认放行,这在安全上是弱设计。

基础设施层:容器后端(Docker、Modal 等)把操作隔离在容器内。即使 Agent 被注入了恶意指令,执行了破坏性操作,影响也被限制在容器范围内——不能影响宿主机文件系统,不能访问宿主机凭证,不能向外部发送未经授权的网络请求。

容器隔离把边界从"应用层的审批"提升到"基础设施层的物理隔离"。应用层的审批可以被 Prompt Injection 绕过(模型被诱导生成绕过审批条件的输出);基础设施层的隔离不能被绕过——操作系统级别的约束不受语言模型的影响。

实践中怎么设计边界

原则一:按可逆性分类,而不是按操作类型分类。

不要说"写代码可以自动,发邮件需要确认"——这个分类太粗糙。正确的分类维度是:这个操作如果出错,能回滚吗?能回滚的,审批门槛可以低;不能回滚的,审批门槛必须高。

原则二:审批要"富文本",不要"空白确认"。

用户看到一个弹窗问"是否允许这个操作",大概率点允许。用户看到"Agent 即将删除 production_db 的 users 表,理由是:清理测试数据,影响:数据无法恢复",才有机会做出有信息支撑的判断。让人在审批时看到"已经尝试了什么、为什么不确定、有哪些选项",而不只是一个"是/否"的按钮。

原则三:把人放在分叉路口,不要放在每一步路上。

Agent 执行分析、收集数据、整理选项——这些不需要人参与。当 Agent 发现了两种可行方案,各有利弊,这个判断需要人来做——不是让 Agent 选,而是把选项和权衡呈现给人,由人来决定方向。人做策略,Agent 做执行。

原则四:先设严格边界,用数据驱动放宽。

不要从宽松的默认值出发,期望用户主动收紧。从严格的默认值出发,等 Agent 在某类操作上积累了足够的正确率数据,再系统性地放宽那一类操作的审批要求。信任是建立在证据上的,不是基于假设的。

人机边界的本质

人和 Agent 的边界,不是一条固定的线,而是一个基于风险、可逆性和信任积累动态调整的区间。

联合国大学的一段话说得很准确:

"即使人类不完美,他们在面对不可逆操作时,往往会本能地停顿——因为他们在直觉上感受到,这件事的分量超出了当下的任务本身。他们认识到,并不是每一个技术上可行的操作都是可以接受的。这正是当前 Agent 系统的局限所在。"

语言模型可以生成高度自信的推理轨迹,但它没有对后果的真实理解,不会感受到损失,不承担责任,不理解信任在组织层面的政治和社会代价。

这不是 Agent 的能力问题,而是架构问题:在哪些决策点上,人类的判断是不可替代的。

这条边界,随着 Agent 能力的提升会不断移动。今天需要人确认的操作,明天可能不需要了。但有些操作——影响真实世界的不可逆决策——大概率会长期保留人类监督。

http://www.jsqmd.com/news/754674/

相关文章:

  • AI编程工具包深度解析:Cursor与Claude协同的工程化实践
  • 从概念到上线:在快马平台实战构建你的个人财务分析超级技能仪表盘
  • 手把手教你用MediaRecorder实现Android通话旁路录音(附完整代码与避坑清单)
  • 深入解析Auto-Code-Executor:声明式任务编排框架的设计与实战
  • 【多无人机动态避障路径规划】基于杜鹃鸟优化算法的多无人机三维协同路径规划方法(Matlab代码实现)
  • C语言(5)
  • Cursor编辑器资源宝库:主题插件与AI提示词全攻略
  • 初创公司如何借助 Taotoken 降低大模型 API 的接入与试用门槛
  • 基于Claude API的智能体服务器框架:工程化AI应用开发实践
  • 毕业季论文救星:百考通AI一站式解决查重与降重难题
  • Lemonade:开源本地AI服务器,打造私有化AI工作站
  • Java Spring Security 如何防止 JWT 密钥泄露导致签名伪造?
  • Rank-GRPO:强化学习优化对话推荐系统的新框架
  • 【LeetCode 刷题笔记】34. 在排序数组中查找元素的第一个和最后一个位置 | 二分查找经典刷题题解
  • RooMolt:基于最小描述长度与原子化MCP的AI自动化工作流实践
  • 通过动态规划优化插电式混合动力电动汽车 (PHEV) 能源管理(Matlab、Simulink代码实现)
  • 别再只调PWM了!STM32/CH32定时器的单脉冲模式,在电机刹车和精准开关上的妙用
  • Windows音频设备一键切换神器:voicemode命令行工具详解
  • ROCKET模型压缩技术:校准引导的动态剪枝与量化
  • 【RK3506实战-01】 BootLoader 全流程与实战优化
  • 3D场景理解与开放词汇检测技术解析
  • ARM汇编LDR指令详解:寄存器相对寻址与优化技巧
  • Kubernetes部署策略实战:从滚动更新到金丝雀发布的完整指南
  • Happy Island Designer终极指南:5步打造你的梦想岛屿规划
  • 4-bit/cell NAND技术:存储密度革命与工程实践
  • 开源AI模型部署与可解释性实践:CentminMod环境下的OpenClaw全栈指南
  • Python自动化快照管理工具:设计原理、插件化架构与生产实践
  • ReViSE框架:AI视频编辑的自反思学习技术解析
  • SAP MD04库存与需求字段业务解析
  • 【算法刷题笔记】全题型导航目录