初稿由GPT-5.5编写,经过人工润色。
最近在开发一个很简单的功能:
text
用户输入 Prompt
↓
模型优化 Prompt
↓
返回优化后的 Prompt
目标很明确:这是一个 Prompt Rewrite 服务,而不是图片生成服务。
但测试过程中发生了一件很有意思的事情。
我输入了一段典型的图像生成 Prompt,本来希望模型帮我优化描述,结果LLM调用了图片生成工具: Image Generation Call 花费 25050, 我的token QAQ
第一反应当然是:
模型是不是被越狱了?
后来分析下来发现,这件事远比「越狱」有意思。
因为问题的本质并不是模型说了不该说的话,而是系统做了不该做的事。
事情是怎么发生的
最初的架构大概是这样的:
text
User
↓
Prompt Optimizer
↓
LLM
↓
Optimized Prompt
理论上这是一个纯文本服务。
权限模型应该是:
text
输入文本
↓
输出文本
但实际运行时,Prompt Optimizer 所使用的模型Responses API接口同时具备工具调用能力:
text
response = client.responses.create(
model=model,
input=[
{"role": "system", "content": instruction},
{"role": "user", "content": request.prompt},
]
// 这里没有限制工具调用
)
于是一个原本只负责改写文本的组件,自动发起了一个图片生成请求。
这算越狱吗?
严格来说,不完全是。
| 类型 | 攻击目标 | 失败表现 |
|---|---|---|
| 传统越狱 | 输出内容 | 说了不该说的话 |
| Prompt Injection | 控制推理流程 | 模型执行了错误任务 |
| Tool Injection | 控制工具调用 | 模型调用了错误工具 |
| 能力边界失效 | 控制系统权限 | 系统执行了错误动作 |
Prompt Injection 已经不只是 Prompt 问题了
问题在于:
为什么 Prompt Optimizer 拥有图片生成权限?
这是一个系统设计问题,而不是模型行为问题。
如果用传统软件工程类比:
text
一个 SQL 优化器
本来应该:
text
输入 SQL
↓
输出优化后的 SQL
结果却拥有:执行数据库语句的权限。
那么当它执行:DROP TABLE users;时,问题已经不在于 SQL 本身。而在于权限设计。
在 Agent 系统中,Prompt Injection 的影响范围已经扩大了。
因为用户输入不再只是被模型理解。
它还可能影响:
text
Tool Selection
Workflow Routing
Memory Access
External Actions
修复方式:不要用 Prompt 限制能力
很多人第一反应是继续强化系统提示词:
text
你只能优化文本
不能生成图片
不能调用工具
这当然有帮助。
但这并不是根本解决方案。
因为提示词属于软约束。
真正的解决方案应该是能力隔离。
python
prompt_payload = json.dumps(
{
「task」: 「rewrite_image_prompt_text_only」,
「prompt」: request.prompt,
},
ensure_ascii=False,
)
response = client.responses.create(
model=model,
instructions=instruction,
input=prompt_payload, # 输入做 json 结构化,最好输出也是结构化
tools=[],
tool_choice=「none」,
max_tool_calls=0,
)
这里最重要的其实不是 Prompt。
而是:
python
tools=[]
因为这意味着:
text
图片生成能力根本不存在
而不是:
text
图片生成能力存在,但被要求不要使用
安全工程里有一句很经典的话:
不存在的权限,比被禁止的权限更安全。
数据平面与控制平面
后来回头看这个问题,我觉得它本质上是一个数据平面与控制平面混淆的问题。
对于 Prompt Optimizer 来说:
json
{
"task": "rewrite_image_prompt_text_only",
"prompt": "生成一张未来城市夜景"
}
其中:
text
task
属于控制平面。
而:
text
prompt
属于数据平面。
系统应该保证:
text
数据不能改变控制逻辑
否则用户输入就有机会影响:
text
工具选择
任务路由
权限决策
这正是很多 Agent 系统面临的新挑战。
一个值得关注的趋势
我认为未来几年,Agent 安全领域会越来越关注这类问题。
过去我们担心的是:
text
模型输出什么
未来我们更需要担心:
text
模型会做什么
当模型开始拥有:
text
搜索
发邮件
调用 API
执行代码
数据库访问
支付能力
之后,
Prompt Injection 的后果就不再只是生成一段错误文本。
而可能变成真实世界中的业务动作。
因此,对于 Agent 系统来说,最重要的安全原则之一可能是:
不要依赖 Prompt 来限制能力,而要依赖系统架构来限制能力。
模型可以被诱导。
权限边界不应该被诱导。
这次经历最终没有造成任何实际问题,但它让我重新思考了一件事:
当我们讨论 AI 安全时,很多时候问题并不是模型不够聪明,而是系统给了它超出职责范围的能力。
而随着 Agent 化越来越普遍,这类「能力边界失效」的问题,可能会比传统意义上的 Prompt 越狱更值得关注。