• 在做一个 Prompt Optimizer 时,我意外触发了图片生成


    初稿由GPT-5.5编写,经过人工润色。

    最近在开发一个很简单的功能:

    用户输入 Prompt
    ↓
    模型优化 Prompt
    ↓
    返回优化后的 Prompt
    

    目标很明确:这是一个 Prompt Rewrite 服务,而不是图片生成服务。

    但测试过程中发生了一件很有意思的事情。

    我输入了一段典型的图像生成 Prompt,本来希望模型帮我优化描述,结果LLM调用了图片生成工具: Image Generation Call 花费 25050, 我的token QAQ

    第一反应当然是:

    模型是不是被越狱了?

    后来分析下来发现,这件事远比“越狱”有意思。

    因为问题的本质并不是模型说了不该说的话,而是系统做了不该做的事。

    事情是怎么发生的

    最初的架构大概是这样的:

    User
     ↓
    Prompt Optimizer
     ↓
    LLM
     ↓
    Optimized Prompt
    

    理论上这是一个纯文本服务。

    权限模型应该是:

    输入文本
    ↓
    输出文本
    

    但实际运行时,Prompt Optimizer 所使用的模型Responses API接口同时具备工具调用能力:

    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 拥有图片生成权限?

    这是一个系统设计问题,而不是模型行为问题。

    如果用传统软件工程类比:

    一个 SQL 优化器
    

    本来应该:

    输入 SQL
    ↓
    输出优化后的 SQL
    

    结果却拥有:执行数据库语句的权限。

    那么当它执行:DROP TABLE users;时,问题已经不在于 SQL 本身。而在于权限设计。

    在 Agent 系统中,Prompt Injection 的影响范围已经扩大了。

    因为用户输入不再只是被模型理解。

    它还可能影响:

    Tool Selection
    Workflow Routing
    Memory Access
    External Actions
    

    修复方式:不要用 Prompt 限制能力

    很多人第一反应是继续强化系统提示词:

    你只能优化文本
    不能生成图片
    不能调用工具
    

    这当然有帮助。

    但这并不是根本解决方案。

    因为提示词属于软约束。

    真正的解决方案应该是能力隔离。

    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"
            )
    

    这里最重要的其实不是 Prompt。

    而是:

    tools=[]
    

    因为这意味着:

    图片生成能力根本不存在
    

    而不是:

    图片生成能力存在,但被要求不要使用
    

    安全工程里有一句很经典的话:

    不存在的权限,比被禁止的权限更安全。

    数据平面与控制平面

    后来回头看这个问题,我觉得它本质上是一个数据平面与控制平面混淆的问题。

    对于 Prompt Optimizer 来说:

    {
      "task": "rewrite_image_prompt_text_only",
      "prompt": "生成一张未来城市夜景"
    }
    

    其中:

    task
    

    属于控制平面。

    而:

    prompt
    

    属于数据平面。

    系统应该保证:

    数据不能改变控制逻辑
    

    否则用户输入就有机会影响:

    工具选择
    任务路由
    权限决策
    

    这正是很多 Agent 系统面临的新挑战。

    一个值得关注的趋势

    我认为未来几年,Agent 安全领域会越来越关注这类问题。

    过去我们担心的是:

    模型输出什么
    

    未来我们更需要担心:

    模型会做什么
    

    当模型开始拥有:

    搜索
    发邮件
    调用 API
    执行代码
    数据库访问
    支付能力
    

    之后,

    Prompt Injection 的后果就不再只是生成一段错误文本。

    而可能变成真实世界中的业务动作。

    因此,对于 Agent 系统来说,最重要的安全原则之一可能是:

    不要依赖 Prompt 来限制能力,而要依赖系统架构来限制能力。

    模型可以被诱导。

    权限边界不应该被诱导。


    这次经历最终没有造成任何实际问题,但它让我重新思考了一件事:

    当我们讨论 AI 安全时,很多时候问题并不是模型不够聪明,而是系统给了它超出职责范围的能力。

    而随着 Agent 化越来越普遍,这类“能力边界失效”的问题,可能会比传统意义上的 Prompt 越狱更值得关注。

  • 相关阅读:
    【 背包九讲——完全背包问题】
    LeetCode:移除元素
    软件设计师(十)网络与信息安全基础知识
    MQ消息队列(二)——RabbitMQ进阶,保证消息的可靠性
    AI也可以​算命和占卜?一定要试试这个模型
    IPV6的内容
    国产数据库四十年磨一剑,达梦数据科创板上市
    流媒体传输 - RTP 协议
    怎么更改文件创建日期?
    Linux相关指令--适合初学者
  • 原文地址:https://www.cnblogs.com/Whitejoce/p/20262607