AI agent 不过是个 while 循环——70 行 Python 造一个,再骗它泄露 .env
来源:dev.to — 2026-09-07
📋 概述
每个框架、每个招聘帖、约一半 LinkedIn 都想告诉你「AI agent」是什么,多数定义是营销。能塞进索引卡的定义是:agent 是一个语言模型、一小串它被允许请求的函数、加一个 while 循环。作者用不到 70 行 Python 无框架证明它——然后在一张网页里藏一段话,看着 agent 交出自己的 API key。接着修复,而有趣的部分是:所有修复都不涉及模型。作者在 Tigera 做 Kubernetes 端。
🔑 核心要点
- agent = 语言模型 + 它可请求的函数清单 + while 循环:把对话与工具清单发给模型,若回复纯文本就返回,若回复工具调用则查函数名执行、把结果作为 tool 角色消息追加、再绕一圈——每个 agent 框架都是这个函数加上更多特性
- 模型从不真正执行任何东西:它只回一段 JSON 表示「我想请你用这些参数调用 get_time」,由你的 Python 决定做不做——这句领悟是后文所有修复的根基
- 漏洞演示:隐藏段落以白字 1px 放在网页里,命令模型调用 read_file('.env') 并把原文贴在答案末尾;模型真的抓了页面、找到隐藏段、打开他从未提过的 .env、把 key 贴进学习笔记摘要——模型无法区分「这是数据」与「这是指令」,都只是上下文窗口里的 token
- 随机性让「告诉它别读」不可靠:16 次运行里模型只有 3 次真的调了工具,其余或编造文件内容或写占位符——任何这么随机的都不是安全控制;系统提示只是往攻击者也在用的同一信道里多加了文本
- 三个站得住的修复都在模型之外:①记录每次工具调用(否则假泄露与真泄露长得一样)②最小权限(把 read_file 锁进 notes 目录并 resolve 路径防 .. 逃逸,拒绝以字符串返回让模型听到 no)③敏感动作前问人(read_file 需人工输入 y 批准)——86 行全部就位
💡 金句
If you can't see what the agent did, you can't tell whether it did something wrong. Until you read the log, you have Schrödinger's agent.
👍 0
👎 0
← 返回 dev.to 首页