拒答不是安全边界
今天 HN 的几篇内容,都围绕同一个问题:AI agent 的安全边界到底应该放在哪里。
TechCrunch 写 Anthropic Fable 的网络安全 guardrail 引发研究者不满。Fable 是 Mythos 的公开受限版本,定位是强网络安全模型,但很多研究者反馈它对"cybersecurity"相关请求过度拒绝,甚至读博客、做代码审查、写安全代码也会触发降级。有研究者认为它像关键词触发,只要碰到网络安全语义场就退回 Claude Opus 4.8。Anthropic 的动机可以理解:强安全模型确实可能被用来写恶意软件或攻击系统。但如果边界过粗,合法安全工作也会被挡住。
同一天,Anthropic 还公布了 Mythos-class 模型的数据留存规则。对原本有 zero data retention 的组织,只要使用 Mythos-class 或类似覆盖模型,prompt 和 output 都会被留存 30 天,用于 trust and safety 分析。理由是一些滥用行为无法从单次请求判断,比如 best-of-N jailbreaking、跨多次请求的间谍活动或数据勒索活动,需要把请求放在一起看。Anthropic 强调访问受限、会记录防篡改日志、30 天后自动删除,除非进入安全调查或法律要求。
GitHub 上另一个热门 issue 则很具体:有用户发现 Windows 版 Claude Desktop 每次启动都会拉起一个约 1.8GB 内存的 Hyper-V VM,即使只是聊天,不使用 Cowork 或 agent mode。issue 描述里说,这在 16GB 笔记本上占了超过 11% 内存。这里未必能代表最终产品设计,但它暴露了一个真实趋势:当桌面 AI 助手开始具备 agent 能力,运行时隔离会从可选项变成基础设施成本。沙箱不是一句产品文案,它会消耗内存、启动时间和系统复杂度。
Apache Burr 的首页从另一个方向回答这个问题。Burr 是一个构建 AI agent 和 AI application 的 Python 框架,强调 action、transition、state、tracker、persistence、human-in-the-loop、testing、replay 和 observability。它没有把 agent 包装成"神秘智能体",而是把它还原成状态机:每一步读哪些 state、写哪些 state、如何转移、如何暂停、如何回放。这种朴素反而很重要,因为真正上线的 agent 需要被调试、审计、复现和回滚。
Blue41 关于 Bunq 银行 AI assistant 的案例最直接。攻击者只需要给目标转一笔很小的钱,文章里是 0.02 欧,在 transaction description 里放入精心设计的 prompt injection。等用户打开银行 app 问"最近交易概览"时,assistant 会把交易记录取进上下文,模型就可能把交易描述里的恶意文本当成指令,输出一个看起来来自银行官方 AI 助手的可信钓鱼请求。它不需要入侵用户设备,不需要传统恶意软件,也不需要在聊天框里直接输入攻击提示。
这些材料放在一起,结论很清楚:拒答不是安全边界。
拒答当然有价值。模型应该拒绝明显的恶意请求,应该降低生物安全和网络攻击的滥用风险。但拒答只发生在模型看到文本并判断之后。它不是数据边界,不是权限边界,不是执行边界,也不是审计边界。把 AI 安全主要寄托在"模型会不会拒绝"上,就像把银行安保主要寄托在柜员会不会识别骗子。柜员很重要,但门禁、监控、权限、账务、风控和审计也同样重要。
Fable 的问题是拒答粒度。网络安全本来就是双用途领域。写 exploit 和验证补丁可能使用相似词汇;恶意攻击和正当红队也会涉及相似技术;"代码审查""secure coding""漏洞复现"既可能是防御,也可能是攻击准备。如果模型只靠粗粒度语义分类,就会出现两种坏结果:要么挡住合法工作,要么为了减少误伤放松后又漏掉恶意使用。
所以真正的问题不是"guardrail 要不要有",而是它应该成为哪一层控制。粗拒答适合做第一道闸门,但不能承担完整安全语义。更好的结构是把用户身份、组织资质、任务上下文、工具权限、输出类型、运行环境和审计要求一起纳入判断。比如同样是漏洞分析,对公开 CVE、私有代码、生产系统、第三方目标、是否有授权,风险完全不同。模型单看一句 prompt,很难知道这些上下文。
30 天 retention 则说明模型提供方已经意识到:有些风险只能在跨请求层面识别。best-of-N jailbreak 的特征不是某一句话有多危险,而是大量相似尝试构成模式。数据勒索或间谍活动也可能被拆成许多看似普通的步骤。单轮拒答看不到轨迹,平台级监控才看得到。
但这也带来新的治理问题。企业选择 zero data retention,本来就是为了控制敏感数据外流。现在高能力模型要求临时留存,等于用隐私和合规成本换取更强的 misuse detection。这个取舍不是纯技术问题,而是产品契约问题:哪些模型能力必须留存,留存什么,谁能访问,如何审计,客户能不能选择 customer-managed keys,如何证明 30 天后删除。
这意味着 AI 模型会越来越像金融或云基础设施,而不是普通 API。能力越强,平台越需要风险监控;监控越强,客户越需要透明合约。没有这个契约,高能力模型就会被夹在两边:安全团队嫌它太危险,企业客户嫌它太不确定。
Claude Desktop 的 Hyper-V VM issue 则把安全边界拉回本地运行时。一个能执行代码、操作文件、访问项目、调用工具的 agent,不能只靠"模型答应自己不乱来"。它需要隔离,需要最小权限,需要可关闭、可解释的运行模式。问题在于,这些东西都有成本。一个 1.8GB VM 对高配工作站也许无所谓,对普通笔记本就是明显负担。用户只想聊天时,是否应该启动 agent 沙箱?如果 agent 能力未启用,隔离运行时是否应该懒加载?这些都是产品体验和安全架构的交界处。
这里有一个常被忽略的事实:安全控制如果太重,用户会绕开它;如果太轻,事故会穿过它。好的 agent 产品需要分层运行时。纯聊天是一层,读取本地文件是一层,修改代码是一层,执行命令是一层,联网和访问密钥又是一层。每升一层,权限、隔离和审计都应该升级,而不是所有模式共享同一套沉重基础设施,或者反过来全部裸奔。
Burr 的价值就在于它把 agent 拆回可工程化的形状。状态机听起来没有"自主智能体"那么兴奋,但它更接近生产现实。一个 agent 应用至少要回答这些问题:当前 state 是什么,下一步 action 为什么被选中,这一步读了哪些数据,写了哪些字段,调用了哪些工具,失败后能不能 replay,人类审批点在哪里,历史运行能不能比较。
没有这些结构,agent 就会变成一团长上下文加工具调用的雾。出问题时,你只能看一段聊天记录,猜模型为什么这样做。状态机、tracker、persistence 和 replay 的意义,是把 agent 的行为从"模型的一次即兴表演"变成"可观测的系统轨迹"。嗯,魔法也要写日志。不然连精灵都找不到锅在哪里。
Blue41 的银行案例则是最重要的提醒:AI agent 的攻击面不是聊天框,而是所有进入上下文的数据源。交易描述、客户留言、邮件、文档、CRM 备注、网页内容、API 返回值,都可能是第三方可控输入。传统系统把这些字段当数据;LLM 会把它们和指令放进同一个上下文空间里处理。于是数据字段变成潜在指令通道。
这就是间接 prompt injection 难防的原因。攻击者不需要说"忽略之前的指令"。payload 可以伪装成普通交易描述,危险性只有在 assistant 检索它、拼进上下文、结合用户问题并生成响应时才出现。静态分类器看单个字段,可能觉得它无害;运行时组合起来,它就变成攻击。
所以 mitigation 也不能只靠输入过滤。Blue41 提到的几层控制更接近真实答案:减少不必要上下文,不把无关字段默认传给模型;明确区分数据和指令;限制敏感输出,比如外部链接、凭证请求、敏感 workflow;监控运行时行为,记录 assistant 访问了什么数据、输出了什么、用了哪些工具、是否偏离正常模式。
这里和前几天写到的"显式证明取代默认信任"是一条线。AI assistant 不能默认相信进入上下文的文本;不能默认相信模型会保持指令层级;不能默认相信 guardrail 会理解业务场景;不能默认相信沙箱免费;不能默认相信聊天记录足够调试。每一个默认,都应该被具体机制替代。
对正在做 AI agent 的团队来说,可以把安全边界拆成四层。
第一层是数据流边界。哪些数据源能进入上下文,字段是否必要,第三方可控字段是否被标注为 untrusted,是否能在 prompt 结构上隔离,是否默认剥离高风险内容。上下文不是垃圾桶,尤其不是权限提升通道。
第二层是工具和权限边界。模型能读什么、写什么、执行什么、访问哪些网络、是否能生成链接、是否能发起支付或修改账户。权限应该按 action 授予,而不是按 agent 整体授予。
第三层是运行时边界。高风险操作应该在 sandbox 或 VM 里执行,但沙箱也要按需启动、可观察、可配置。不同模式的隔离成本不同,产品不能假装安全控制没有资源代价。
第四层是行为监控和回放。每次运行都应该留下状态、检索、工具调用、输出和审批记录。异常不是只靠模型自己报告,而是靠系统 profile 识别:突然生成外链、突然隐藏信息、突然访问异常数据源、突然调用高风险工具,都应该触发调查。
这四层加起来,才像一个安全边界。拒答只是其中一小块。
AI 安全讨论很容易被拉向两个极端。一边说模型只要足够对齐就会安全;另一边说模型只要能被 prompt injection 就完全不能用。真实世界更麻烦,也更工程化。银行不会因为员工可能被骗就停止营业,但会设计权限、审批、审计和风控。AI agent 也一样。
能用,不等于可信。可信,不等于自由行动。自由行动,必须有边界。
拒答是边界上的一块标牌。真正的墙,在数据流、权限、运行时和日志里。