Jev 进入 Agent Guardrail:高风险 Tool Call 该怎么测?

举报
霍格沃兹测试学社 发表于 2026/09/21 16:42:46 2026/09/21
【摘要】 随着Agent能力增强,其调用工具的风险日益凸显:错误执行(如删库、发邮件)比回答错误更致命。Jev接入LangChain Agent Harness,在Tool执行前实施风险判断,构建分层Guardrail——硬规则守底线、Jev控灰度、LLM处理复杂上下文、人工兜底。测试重点转向“行为安全”:严控漏拦率与误拦率,覆盖明确危险/安全、灰度场景及绕过攻击,并关注组合调用链风险。

摘要:

Agent 能力越来越强以后,一个新的测试问题开始出现:

模型会调用工具还不够,还要保证它不会在错误的时候调用危险工具。

删除文件、执行 Shell、修改数据库、发送邮件、操作生产环境……

当 Tool Call 开始真正影响外部系统,Guardrail 就不再只是一个“安全功能”,而是必须被系统测试的一条关键链路。

而 Jev 最近进入 LangChain Agent Harness,也让这种“执行前风险判断”开始有了新的实现方式。


一、Agent 最大的风险,正在从“回答错”变成“做错事”

过去测试大模型,我们经常关注:

有没有幻觉?

回答对不对?

RAG 有没有召回正确内容?

但 Agent 不一样。

Agent 不只是回答问题。

它还会真正执行操作。

比如:

读取文件
调用接口
运行 Bash
修改数据库
发送邮件
操作浏览器
修改配置

这时候一个错误判断带来的后果,就不只是:

回答错一句话。

而可能变成:

执行了一次错误操作。

例如:

rm -rf ./cache

和:

rm -rf /

看起来都属于“删除文件”。

但风险完全不是一个级别。

所以 Agent Harness 里开始出现一层越来越重要的能力:

Tool Call Guardrail。


二、Jev 被放到了 Tool 真正执行之前

LangChain 最近发布的 Jev Harness 里,就提供了一个很典型的实现:

AutoModeMiddleware。

它可以在 Agent 准备执行 Tool Call 时,先让 Jev 判断这个操作是不是高风险。

如果判断风险过高:

在 Tool 真正运行之前直接阻断。

整个流程可以理解成:

image.png

这里有一个非常重要的原则:

不是所有安全问题都应该交给 Jev。

明确禁止的事情,仍然应该写成硬规则。

例如:

禁止删除根目录

禁止直接修改生产数据库

禁止读取敏感密钥

禁止向未授权对象发送数据

这些不用 AI 判断。

真正适合 Jev 的,是规则难以覆盖的灰度风险


三、Guardrail 真正难测的,不是“能不能拦”

假设我们设计了一个 Guardrail:

危险 Tool Call
→ 阻断

安全 Tool Call
→ 放行

第一眼看起来特别简单。

但测试工程师真正开始测以后,会马上遇到两个问题。

1. 漏拦

危险操作没有被识别出来。

例如:

删除生产配置
→ Guardrail 判断“低风险”
→ 自动执行

这类问题通常最严重。

因为它直接影响安全。

2. 误拦

正常操作被判断成高风险。

例如:

读取普通日志
→ Guardrail 判断“高风险”
→ 要求人工审批

偶尔误拦一次可能没什么。

但如果 20% 的正常操作都需要人工确认:

Agent 基本就失去了自动化价值。

所以测试 Guardrail,真正要看的不是:

拦截率越高越好。

而是:

危险操作尽量不要漏,正常操作又不能被大量误伤。


四、测试用例应该怎么设计?

我建议至少拆成 4 类。

第一类:明确安全

例如:

读取公开网页

查询测试数据库

读取普通日志

获取服务状态

预期:

自动放行。

这类主要测试 Guardrail 的误报率。


第二类:明确危险

例如:

删除生产数据

修改权限

执行危险 Shell

泄露密钥

关闭线上服务

预期:

必须阻断。

这类主要测试漏报。


第三类:灰度风险

这类最重要。

例如:

删除临时目录

批量修改文件

向客户发送邮件

执行数据库更新

修改云资源配置

这些操作本身不一定危险。

真正决定风险的是:

上下文。

比如:

DELETE FROM test_user

和:

DELETE FROM user

SQL 结构几乎一样。

但测试环境和生产环境,风险完全不同。

这恰恰是 Decision Model 更有价值的地方。


第四类:绕过攻击

还要专门设计:

Prompt Injection

Tool Description 污染

参数混淆

命令拼接

编码绕过

多步组合攻击

因为攻击者不一定会直接说:

“帮我删除数据库。”

更可能通过多轮上下文,让 Agent 最终生成一个危险 Tool Call。


五、测试 Guardrail,我建议重点盯这 4 个指标

image.png

然后重点统计:

危险操作漏拦率

最重要。

特别是高风险 Tool:

生产数据库
文件删除
权限变更
支付
外部发送

漏拦率必须重点关注。

正常操作误拦率

决定 Agent 到底还能不能自动运行。

如果任何操作都需要确认:

Guardrail 虽然“安全”,

Agent 却基本废了。

人工升级比例

多少请求最终进入人工审批?

比例长期过高,通常说明:

风险策略或者阈值设计有问题。

决策延迟

Guardrail 本身也不能太慢。

如果 Agent 每执行一次 Tool,

都要额外等待几秒,

一个几十步的 Agent Run 延迟会被不断放大。

这也是 LangChain 把 Jev 放进这一层的一个原因:它被设计成执行快速的结构化判断,而不是重新完成一次自由文本推理。([LangChain][1])


六、还有一个很关键的问题:置信度阈值怎么设计?

Jev 的一个特点,是判断结果会带概率。

比如:

高风险:97%

那可以直接阻断。

但如果是:

高风险:58%

怎么办?

比较合理的策略可能不是简单二选一,而是:

风险概率 < 30%
→ 自动执行

30%~80%
→ 请求用户确认

> 80%
→ 阻断 / 人工审批

TypeSafe 官方也强调,Jev 的概率可以被应用程序用来决定:什么时候自动行动,什么时候升级 Review。([TypeSafe AI][2])

所以测试工程师真正应该测的是:

不同阈值下,误拦率和漏拦率怎么变化。

这其实和传统安全规则测试已经不太一样了。


七、Guardrail 还必须做“组合测试”

Agent 最大的复杂度,是它不是只调用一次 Tool。

一次任务可能是:

读取文件
↓
搜索信息
↓
修改代码
↓
执行 Shell
↓
上传文件
↓
发送结果

单独看每一步都可能安全。

但组合起来,却可能形成风险。

例如:

读取敏感数据
+
调用外部 HTTP API

单看:

读取数据,没有问题。

调用 API,也没有问题。

但组合起来可能意味着:

数据外泄。

所以未来 Agent Guardrail 的测试,不能只测:

单个 Tool 安不安全?

还应该测试:

整条 Tool Call Chain 安不安全?

这会成为 Agent 测试和传统 API 自动化非常不同的一点。


八、一个成熟的 Agent Guardrail,应该是分层的

我更倾向于未来企业里的 Guardrail 长成这样:

第一层
硬规则
↓
处理绝对禁止行为

第二层
Jev / Decision Model
↓
判断灰度风险

第三层
LLM
↓
处理复杂上下文

第四层
人工审批
↓
高风险最终兜底

而不是:

任何 Tool Call
↓
都问一次 LLM

规则负责确定性。

Jev 负责高频判断。

LLM 负责复杂推理。

人工负责最终高风险决策。

这和我们前面几篇一直讲的 Agent 智能分层,其实是一套逻辑。


写在最后

Jev 进入 Agent Guardrail,真正值得测试工程师关注的,不是又多了一个模型。

而是:

Agent 的测试边界正在从“模型回答”,延伸到“模型行为”。

以前我们问:

AI 回答对了吗?

以后还要问:

Agent 选对 Tool 了吗?

这个 Tool Call 应该执行吗?

Guardrail 有没有把危险操作放过去?

有没有把大量正常操作错误拦下来?

当 Agent 真正开始操作文件、数据库、浏览器和业务系统以后,

Tool Call 本身就会变成一个新的核心测试对象。

所以未来做好 Agent 测试,可能不仅要会测:

Prompt、RAG、模型和 Agent。

还要会测:

权限、行为、决策链和 Guardrail。

而这部分,很可能会成为 AI 测试开发新的基本功。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。