保护人工智能代理与工具使用
约束自主智能体的操作。
保护人工智能代理与工具使用 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。
代理为何存在风险
人工智能代理是一个连接了工具和循环的 LLM:它进行推理,调用函数(搜索、代码执行、应用程序接口调用、文件访问),观察结果,并不断重复,直到达成目标。这种自主性既强大又危险。
核心的安全变化在于:对于普通聊天机器人,糟糕的输出只是文本;而对于代理,糟糕的决策会变成实际操作:删除记录、发送邮件、花费资金或泄露机密。
由于不可信内容可能进入推理循环,代理持有的每个工具都是提示注入的攻击面。
工具的最小权限
最重要的单项控制措施是最小权限。为每个工具提供在完成任务的前提下尽可能窄的范围。
- 优先使用只读而不是读写;将读取范围限制为当前用户的数据。
- 将宽泛的工具拆分为更具体的工具(使用
get_invoice工具,而不是原始结构化查询语言工具)。 - 将工具凭据绑定到最终用户的身份,而不是共享服务账户,这样代理只会继承用户获准执行的权限。
# Scope queries to the authenticated user, never raw SQL
def get_invoice(invoice_id: str, *, user_id: str):
return db.query(
"SELECT * FROM invoices WHERE id=%s AND owner=%s",
(invoice_id, user_id),
)人在回路中的检查点
对于高影响或不可逆的操作,要求在执行前获得明确的人工批准。代理提出建议;由人员确认。
- 发送外部邮件或消息。
- 金融交易或购买。
- 删除或覆盖数据。
- 部署代码或更改基础设施。
以通俗语言向用户展示确切的操作和参数,以便用户在命令运行前发现注入的或模型臆造的命令。
将代码和命令置于沙箱中
运行代码或命令行命令的代理必须在隔离沙箱中执行这些操作,绝不能在主机上执行。
- 使用没有主机挂载的临时容器或 microVMs。
- 默认禁用网络访问;仅允许明确的出站允许列表。
- 设置 CPU、内存和时间限制,以遏制失控或恶意代码。
- 使用非根用户的无特权身份运行,并使用只读根文件系统。
docker run --rm \
--network none \
--read-only \
--user 1000:1000 \
--memory 256m --cpus 0.5 \
--pids-limit 64 \
agent-sandbox:latest python /work/task.py打破致命三角
当代理同时能够访问私有数据、接触不可信内容并且能够对外通信时,就会变成数据外泄工具。这种组合就是致命三角。
进行设计时,应在每个工作流中至少去掉其中一个支柱:
- 将接触不可信内容的会话与持有敏感数据的会话隔离。
- 将出站网络流量限制为严格的允许列表。
- 当上下文中包含私有数据时,在任何对外发送前都要求获得批准。
不可信的工具输出
工具结果会重新进入模型上下文,因此工具输出是不可信的输入。网页、获取的文件或应用程序接口响应都可能包含针对下一步推理的注入指令。
- 将工具输出包裹在清晰的分隔符中,并标记为数据而不是命令。
- 移除或中和隐藏文本(HTML 注释、零宽字符、屏幕外的 CSS)。
- 限制注入内容的大小,以压缩载荷可用空间。
未经策略检查,绝不让原始工具输出悄然决定下一次工具调用。
操作允许列表和策略执行
不要依赖模型自我约束。应在代理与每个工具之间用代码强制实施策略层。
- 使用允许操作列表和参数结构验证每次工具调用。
- 拒绝超出当前任务范围的调用。
- 应用针对每个工具和每个用户的速率限制与预算。
无论模型作出什么决定,这个确定性闸门都会运行,因此即使注入成功,也会遇到硬性阻断。
def authorize(call):
if call.name not in ALLOWED_TOOLS:
raise PolicyError("tool not allowed")
if not SCHEMA[call.name].validate(call.args):
raise PolicyError("bad arguments")
if exceeds_budget(call):
raise PolicyError("rate limit")限制循环
自主循环可能失控:无限重试、递归工具调用和失控支出(钱包拒绝服务)。请对其设限。
- 限制每项任务的最大步骤数和令牌总数。
- 为整个运行过程设置实际时间超时限制。
- 跟踪累计成本,并在达到阈值时中止。
- 检测循环(重复的相同调用)并跳出循环。
这些限制也能削弱拒绝服务和无限制消耗攻击(OWASP LLM10)。
记忆和多代理风险
持久化的代理记忆和多代理系统会增加新的攻击面:
- 记忆投毒:写入某次会话长期记忆的注入内容会影响后续会话。验证并限制持久化内容的范围。
- 跨代理信任:一个被攻陷的代理可以向另一个代理注入内容。将代理之间的消息视为不可信。
- 混淆代理:特权代理根据较低信任级别代理的请求执行操作。沿链路传递原始主体的授权。
日志记录和可观测性
看不见就无法保护。记录完整的代理跟踪信息:
- 记录每次工具调用、其参数及结果。
- 记录推理上下文和任何检索到的内容,以便取证。
- 针对异常发出警报:意外的出站流量、权限使用、反复拒绝和成本激增。
- 保留与执行用户关联的不可篡改审计记录。
良好的遥测数据可以将隐蔽的入侵变成可检测、可调查的事件。
分层代理架构
综合起来,一个可防御的代理技术栈如下:
- 身份:操作以最终用户身份、在最小权限范围内运行。
- 策略闸门:对每次工具调用执行确定性的允许列表检查和模式验证。
- 沙箱:在受限的网络和资源条件下进行隔离执行。
- 人工检查点:对不可逆操作进行批准。
- 限制:设置步骤、令牌、时间和成本预算。
- 可观测性:完整的审计日志记录和异常警报。
假设模型可能被劫持;确保即使发生劫持,影响范围也很小。
快速检查
请检验您对智能体安全控制措施的理解。
回顾
保护人工智能智能体和工具使用:
- 智能体会将不良输出转化为实际操作,因此每个工具都构成攻击面。
- 对每个工具应用最小权限,并将凭据绑定到最终用户。
- 对不可逆操作要求人工审批,并将代码执行置于沙箱中。
- 打破致命三要素;将工具输出视为不可信输入。
- 在代码中而非提示中强制执行确定性的策略门禁(允许列表、模式验证)。
- 限制循环的边界(步骤、令牌、时间和成本),并记录每次工具调用以便检测。
用 AI 导师学习 Cyber Security Academy — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 76
- 课程
- 303
常见问题解答
「保护人工智能代理与工具使用」课时是免费的吗?
是的 — 「保护人工智能代理与工具使用」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。
「保护人工智能代理与工具使用」这节课中我会学到什么?
约束自主智能体的操作。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cyber Security Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「保护人工智能代理与工具使用」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cyber Security Academy 课中编写并运行代码吗?
能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 提示注入与越狱
- OWASP LLM 十大风险
- 保护人工智能代理与工具使用
- 模型、数据与供应链风险