Microsoft run-assert-eval 将 Agent 风险发现转化为经过测试的运行时控制措施
Microsoft 于 9 月 24 日发布了 run-assert-eval,通过一个引导式工作流连接起此前相互独立的四项 Agent 安全任务。Microsoft run-assert-eval skill 可发现风险、衡量失败情况、起草运行时控制措施,并在加入这些控制措施后重复同一评估。矛盾也随之而来:更快的安全闭环只有在测量结果仍然可信时才有价值。
Microsoft 的示例让这项发布更具实质内容。该公司称,在 40 段适用的基线对话中,一款账单支持 Agent 有 12 次泄露了另一名客户的数据。引入运行时策略后,Microsoft 在 34 段适用对话中观察到两次违规。这使报告中的违规率从 30.0% 降至 5.9%。
这一结果听起来颇具决定性,但它来自由项目开发者维护的演示案例。Microsoft 尚未提供独立复现或生产部署研究。因此,真正重要的进展在于机制,而非某一项有利分数。该 skill 将已发现的失败转化为可执行的策略,随后在不暗中改变评估的前提下测试这项干预措施。
Microsoft run-assert-eval 连接发现、测试与执行
这项发布将一系列安全项目整合为一条可审查的路径,使未知风险最终转化为经过测试的运行时控制措施。
Microsoft 的发布文章介绍了一套可通过兼容编程环境中的提示词启动的工作流。开发者首先提供 Agent、其预期用途、所使用的工具,以及必须遵守的边界。
该 skill 可使用 Clarity 对 Agent 进行威胁建模。威胁建模是指在选择测试前,识别可能发生的失败、受影响的资产、原因和后果。团队也可以从产品需求、事故报告、测试计划或既有评估中提供一项已知风险。
这一区别很重要。风险发现虽被推荐,但并非强制要求。已经知道其账单 Agent 会暴露客户记录的团队,可以直接从这一行为开始,而无需重复发现工作。
当团队确实需要风险发现时,Clarity threat modeler会检查 Agent 更广泛的运行环境。其目的在于发现那些从未写入原始需求的失败情形。
在 Microsoft 的账单示例中,Clarity 识别出四种候选失败模式。团队选择了两项被评为严重的风险:未经验证的高风险操作,以及跨客户数据暴露。
第一项风险涵盖在未确认来电者身份的情况下进行账单变更。第二项则涵盖涉及不属于来电者账户的信息披露。
该 skill 将每项选定风险传递给 ASSERT——Microsoft 的需求驱动评估框架。每项风险都成为一项配置、一种行为和一套评估测试。
这种狭窄的结构比最初看上去更具影响力。如果一项评估混合了授权、隐私、准确性和升级处理失败,其汇总分数无法说明需要哪一种控制措施。
Microsoft run-assert-eval 则将这些行为分开。在每个测试套件中,通过访问方式、用户借口、权限声明和多轮对话范围漂移等维度引入变化。
该 skill 还会搜索既有研究和安全框架,以寻找相关的测试维度。Microsoft 表示,这些来源可包括 NIST 指引、OWASP 资源、基准测试、监管材料以及模型提供商政策。
随后,ASSERT 生成案例、执行目标 Agent,并评估捕获的对话记录。其两项主要指标刻意保持彼此独立。
“不可允许行为违规”记录 Agent 实施被禁止行为的案例。“可允许行为违规”则衡量 Agent 在被允许提供帮助时却未能提供帮助的案例。
这种区分可以防范一种常见的安全假象:拒绝每一项请求的 Agent 或许能避免许多有害行为,却也不再完成自己的工作。
接下来,该工作流会根据测得的失败生成一份 Agent Control Specification 策略草案。ACS 是一种可移植格式,用于在 Agent 执行过程中的特定节点设置控制措施。
最后,该 skill 会使用相同案例评估受治理版本的 Agent。基线运行与受治理运行保留相同的行为定义、测试集和评判方法。
结果并不只是又一个安全分数,而是一项旨在将策略作为唯一变化变量加以隔离的受控比较。
压力落在将提示词作为主要防线的团队身上
Microsoft 正在挑战这样一种观点:单靠书面指令就能为使用工具的 Agent 提供充分的控制边界。
系统提示词仍然有助于定义角色和预期行为。但它们依然是由模型解读的概率性指令,而不是由周边软件执行的确定性授权检查。
当 Agent 可以检索记录、更新账户、发放退款或调用管理工具时,这一弱点就会变得实质性。一项具有说服力的请求可能随即转化为数据库读取或业务操作。
Microsoft 的账单示例说明了这一缺口。该 Agent 面向一名与账户 ACME-1001 关联的来电者运行。它本不应检索或修改另一名客户的账户。
一项经过评估的请求索要与 BPS-447 关联的联系信息,而该账户属于另一名客户。Microsoft 称,基线 Agent 返回了完整记录。
代码审查或许可以确认检索函数能够正常工作。单元测试或许可以确认有效账户标识符会返回预期记录。但两者未必测试模型是否会在真实对话中选择未经授权的标识符。
这一问题不限于账单支持。研究 Agent 可能访问不合适的来源,而变更管理 Agent 可能绕过审批流程。旅行 Agent 可能滥用已存储的身份或支付信息。
OWASP 指引将这种更广泛的情况称为过度代理能力。当 AI 应用拥有超出任务所需的功能、权限或自主性时,便会出现这一问题。
提示词注入可能触发此类失败,但并非唯一原因。含糊的请求、幻觉式计划、遭入侵的工具以及简单的模型错误,同样可能导致不安全操作。
受影响的不只是安全团队。产品经理必须界定允许和禁止的结果。开发者必须提供适当的控制点。风险负责人必须决定已测得的降幅是否足够。
评估团队同样面临压力。他们的产出不能再止步于列出失败项的报告。Microsoft 的工作流要求一项发现能够支持特定控制措施和可重复的验证运行。
使用通用模型基准的组织还面临另一项问题。广泛基准可以描述模型的平均倾向,却无法覆盖每家公司的账户规则、升级处理边界或内部审批流程。
Microsoft 的方法从应用自身的需求和已发现的风险出发。这使评估更具相关性,但也让不同组织间的比较不再那么直接。
这项发布还给那些将观察视为最终步骤的供应商带来压力。在执行后记录一次危险的工具调用,或许有助于调查,但无法阻止已经造成伤害的操作。
Run-assert-eval 将干预措施置于 Agent 的运行时路径中。这使其更接近授权检查、最小权限和策略执行点等熟悉的安全概念。
这并不意味着提示词被淘汰,而是为它们分配了更窄的角色。模型可以进行规划和理解语言,而确定性控制措施决定敏感操作是否应继续执行。
随着 Agent 获得对本地文件和内部知识的访问权限,这种划分愈发重要。构建可搜索知识库的团队同样面临边界问题:检索必须遵守用户实际拥有的授权范围。
Microsoft run-assert-eval 将这一问题封装为开发者可更早执行的工作流。其负担随之从希望模型遵守规则,转向证明软件在何处执行这些规则。
核心机制是一项受控的前后对比测试
run-assert-eval 最有力的理念并非自动生成策略,而是在只改变控制措施时保留评估不变。
当团队在应用修复措施后重新生成测试集时,安全比较便会变得不可靠。不同的一组提示词可能使薄弱策略看似成功,也可能让合理策略看似表现更差。
更换评判者会引入另一项混杂变量。两位评估者可能会以不同方式解读同一份对话记录,尤其当可接受行为取决于具体情境时。
Run-assert-eval 会缓存基线系统化结果和测试案例。随后,受治理的 Agent 面对相同的行为定义、案例和评判方法。
Microsoft 将此描述为冻结评估。策略成为预期的自变量,而测得的违规率则成为观察到的结果。
这一原则类似于传统软件中的回归测试。开发者修改实现时,失败的测试应当保持固定。否则,通过结果可能反映的是被重写的测试,而非已修正的行为。
Agent 测试更为困难,因为模型输出具有可变性。评判者也可能基于模型,而生成的案例本身可能包含歧义。
将这些要素保持不变并不能消除所有不确定性来源,但确实能使前后差异更易于解释。
Microsoft 表示,此前的 ASSERT 评估发现,其自动评判者与人工审阅者之间的一致率为 80% 至 90%。该公司将这一范围与人工审阅者之间约 90% 的一致率进行了比较。
这些数字是 Microsoft 报告的结果,而非普遍准确性保证。评判一致性可能因行为、模型、评分标准、语言和底层策略的复杂程度而异。
底层评估仍可供检查。ASSERT repository称,运行会保存本地工件、生成案例、模型输出、评判理由和指标。
本地工件可支持审计,因为审阅者能够检查一份对话记录为何被归类为违规。他们也可以识别评估器误解策略的案例。
ASSERT 的双比率设计增加了另一层保障。即使策略阻止了有害行为,若导致过度拒绝,仍可能失败。
对于跨客户测试套件,Microsoft 报告的基线不可允许行为违规率为 30.0%。受治理结果在不同的适用分母下为 5.9%。
Microsoft 还将结果划分为提示词和场景两类。提示词案例测试更直接的交互,而场景案例则覆盖更丰富的工作流和对话上下文。
对于跨客户提示词案例,报告中的不可允许行为违规率从 20.8% 降至 8.7%。对应的场景违规率则从 43.8% 降至 0.0%。
对于未经验证操作的提示词案例,报告中的比率从 4.0% 降至 0.0%。在按场景拆分的数据中,这一比例从 8.7% 降至 4.5%。
据报告,在全部四个受治理的数据拆分中,允许行为违规率均达到 0.0%。Microsoft 将此结果解读为:这些控制措施在该样本中保留了合法工作。
其余的不允许行为违规仍然值得重视。它们表明,即使在这个受控示例中,政策也未能消除所有失败。
这与该工作流的迭代式设计一致。团队可以检查仍然存在的失败,完善其风险定义或政策,然后重复相同流程。
因此,这一方法提供的证据比少量人工演示更有力。但它仍无法证明该代理在所有未来提示词、模型更新、工具或环境中的行为。
实际收益更为有限,也更具实用性。团队能够获得可追溯的证据,证明某项特定控制措施改变了既定评估中的表现,而非只是让代理沉默。
运行时政策会在模型完成操作前阻止其执行
账单修复通过在工具边界检查账户范围来实现,而不是要求模型重新考虑其意图。
在测量跨客户暴露情况后,run-assert-eval 生成了一份政策草案和一份 ACS 清单。政策表达决策逻辑,清单则规定该逻辑应在何处应用。
Microsoft 使用了 Rego,这是一种通常与政策引擎相关的声明式政策语言。生成的材料仍是需要人工审查的草案。
这一审查关卡十分重要。Microsoft 明确表示,生成不等于批准。开发人员必须检查政策、干预点、清单,以及其与目标代理的连接。
所选政策会在请求的账户标识符与调用者账户不一致时拒绝工具调用。这条规则无需再由另一个模型判断请求是否可疑。
Microsoft 将检查置于 pre_tool_call,这是代理执行工具前会抵达的拦截点。因此,标识符不匹配会在检索发生前触发拒绝。
团队还使用了 post_tool_call。这一第二道检查会拦截任何本不应进入模型上下文的不匹配结果。
同时使用这两个节点可形成纵深防御。第一道尝试阻止未经授权的操作;第二道则在先前控制被绕过或接线错误时限制暴露。
ACS policy engine 的目标是将这些控制措施从单一代理框架中分离出来。因此,当团队更换模型或编排库时,政策仍可保持可移植性。
这种可移植性解决了一个实际的维护问题。嵌入提示词或框架专用回调中的控制措施,可能会变得难以在多个代理实现中进行审计。
共享规范可以为安全审查人员提供一致的检查对象,也能让开发人员将政策变更与应用代码一同进行版本管理。
然而,可移植性并不保证集成正确。每个运行时都必须提供相关上下文、保留身份信息,并在正确的节点调用政策。
账户范围规则依赖可信的账户信息。如果调用者身份错误或缺失,即便比较逻辑编写得完美,授权结果仍会出错。
同样的问题也适用于工具参数。检查 account_id 的政策,假定请求的资源由该字段准确表示。
复杂工具可能会将敏感目标隐藏在查询、文档、URL 或嵌套操作中。此时,狭窄的规则可能遗漏通往同一受保护资源的等效路径。
运行时政策也无法修复所有类型的失败。控制措施可以阻止未经授权的退款或数据库读取,但无法自动判断每一份生成的解释是否准确或公平。
对于某些高影响操作,人工审批仍然合适。即使模型作出糟糕决定,最小权限的工具设计也可以减少损害。
更广泛的 AI risk framework 将风险管理视为一项贯穿生命周期的活动。它包括治理、映射、测量和持续管理,而非一次性的发布前测试。
Run-assert-eval 契合这一更大的模式。它为从映射风险到测量和管理某一行为提供了具体桥梁。
该工作流的单提示词入口不应掩盖背后的工作。威胁建模、测试设计、政策审查、系统集成和结果解读仍需要知情决策。
Microsoft 所减少的是这些决策之间的人工交接。该技能将结构化工件从一个阶段带到下一个阶段,并使它们之间的关系保持可见。
这可以降低风险描述在产品、评估和安全团队之间转移时丢失原意的可能性。
它还可以缩短发现失败与检查缓解措施之间的间隔。未解决的代理风险往往正是在这一间隔中累积。
首批结果是证据,而非普遍的安全保证
Microsoft 的示例支持该工作流的逻辑,但并未证明其在不同代理、组织或攻击场景中的生产有效性。
最明显的局限是来源。Microsoft 及项目贡献者设计了工具、选择了示例、应用了控制措施,并报告了测量结果。
这并不使这些发现无效。但它意味着读者应区分透明的示范性案例与独立基准测试或现场研究。
样本量也需要谨慎看待。标题所述的基线包含 40 个适用对话,而受治理运行包含 34 个。
这些分母之所以不同,是因为只有适用案例才会计入某一特定行为比率。尽管如此,小样本仍可能产生不稳定的百分比。
在该示例中,从 12 次违规降至两次具有实际运营意义。但这不应被解读为其他代理普遍实现了 80% 的下降。
报告中的 0.0% 允许行为违规率,也只意味着该样本中没有出现违规。它并不意味着该政策永远不会阻止合法行为。
更大的测试集可能会暴露罕见的误拒绝。生产流量可能包含示例中缺失的账户关系、委托规则或支持例外。
评估泄漏也带来另一个问题。如果一项政策反复针对同一冻结测试集进行调优,开发人员最终可能会对已知案例过拟合。
冻结测试可以在单次干预期间形成可信比较。长期计划仍需要保留案例、新的对抗性变体,以及针对行为变化的监测。
模型变化也可能使先前结论失效。新模型可能以不同方式格式化工具参数、以不同方式理解拒绝,或找到另一条通往受保护信息的路径。
工具变化会带来类似风险。增加导出功能或通用搜索端点,可能引入原始账户检查未覆盖的访问路径。
评估裁判值得持续审查。Microsoft 报告的一致性区间令人鼓舞,但分歧案例可能集中在最模糊、最关键的边界上。
团队应为存在争议的案例保留人工审查,并定期抽样检查看似成功的结果。稳定的自动化裁判有助于比较,但并非绝对可靠的权威。
“技能”一词中还隐含供应链问题。代理技能包含会影响规划、执行和验证的指令。
Microsoft Research 最近报告称,在两项基准设置中发现了 307 起由技能引发的失败,其中包括 125 起功能失败和 182 起效率回退。
该研究并未专门评估 run-assert-eval。它为审查任何技能的指令、脚本、权限和运行假设提供了更广泛的理由。
Run-assert-eval 通过可见工件和人工关卡部分应对了这一问题。团队可以在执行受治理运行前检查生成的评估配置和政策。
其以文献为依据的测试生成也带来了另一项验证义务。引用的框架可以指导维度,但相关性取决于该技能将来源准确转化为案例的程度。
薄弱的转化可能产生看似令人印象深刻、却没有实质意义的覆盖标签。因此,审查人员应检查场景,而不只是查看附带的框架名称。
运营成本也是一个悬而未决的问题。运行生成案例、捕获追踪记录、评判转录内容和重复评估,都会消耗模型调用和工程时间。
该项目尚未发布这类成本与人工评估工作流之间的广泛比较。组织必须确定哪些风险值得进行更深入的评估。
最合理的解读是审慎但积极的。Microsoft 为一个困难的集成问题构建了连贯流程。
此次发布并未证明某个代理是安全的。它帮助团队形成一项具体的安全主张,为其附上证据,并测试一项干预措施是否改善了既定结果。
三个信号将显示该方法能否经受考验
下一项考验在于,独立团队能否复现该工作流的收益,同时不牺牲有用的代理行为,也不产生隐藏的维护负担。
第一个信号是第三方复现。开发人员应关注公开评估是否将 Microsoft run-assert-eval 应用于捆绑示例以外的代理。
有说服力的复现将公布风险定义、案例、政策、追踪记录、裁判配置和人工审查结果,也会披露在治理后仍然存在的失败。
不同模型和框架下的结果将强化 Microsoft 的可移植性主张。显著的集成差异则会暴露 ACS 仍在哪些方面依赖个别运行时。
第二个信号是更广泛的生产证据。团队需要了解,冻结评估能否预测真实流量下的事件、拒绝和政策绕过。
有价值的证据将包括部署后的违规趋势,以及被控制措施拦截的合法请求。它还应追踪模型、工具或提示词变更后引入的失败。
最强的部署会将评估工件与持续监控相连。当生产遥测确认同一行为边界时,发布前的改进才更具意义。
第三个信号是项目对规避和政策漂移的回应。攻击者和普通用户都可能通过原始套件中不存在的路径触及受保护操作。
应关注涵盖间接提示词注入、委托权限、冲突身份、状态操纵和多代理交接的新套件,也应关注该项目如何防止对冻结案例的过拟合。
版本化政策和回归运行将不可或缺。每当模型、工具、权限或业务规则发生变化,团队都需要明确触发条件来重复评估。
此次发布还应根据其审查体验来判断。生成的政策只有在开发人员和安全团队能够理解其存在原因及阻止内容时才有价值。
这使本地工件、引用的转录内容和狭窄的行为定义不只是实现细节。它们构成了支持批准的证据链。
因此,Microsoft run-assert-eval 最适合被视为封装成技能的工程纪律。它连接了威胁建模、特定行为评估、运行时执行和受控复测。
开发者不应询问某个工作流程是否能证明整个智能体是安全的。他们应当问的是:它是否让一项重要风险变得可衡量,让一项控制措施可审查,并让一项改进能够复现。
这比证明普遍安全性的承诺更小,但也是智能体治理更可信的起点。



