这篇文章在讲什么
近期很多团队在做大模型落地时,会遇到一种“看起来像正常文本”的提示注入:攻击者把指令包进古诗词、藏头诗、典故改写、对仗句等文学形式里,让模型把它当作“更高优先级的任务要求”,从而绕过既定规则或诱导泄露信息。本文聚焦原理与防守,不提供可直接用于绕过的可执行示例。
为什么古诗词这类载体会有效
1) 语义伪装与边界模糊
模型擅长从自然语言中提炼“意图”。当注入内容被写成诗句、故事或隐喻时,传统基于关键词的拦截容易漏掉,而模型仍可能从中恢复出指令意图。
2) 结构化编码(藏头/藏尾/断句)
诗词天然有“行/句/字”的结构,攻击者可以把指令拆分到多个位置,通过首字、末字、标点断句、同音替换等方式形成“可还原指令”。这类编码对规则引擎不友好,但对语言模型可能依然可读。
3) 角色与叙事诱导
诗词常带叙事与情境。攻击者利用“你正在解读诗意/你是评注者/你在还原暗号”等角色暗示,引导模型把注入当作需要执行的任务。
在企业场景的真实风险
- 敏感信息泄露:系统提示词、内部文档、工具调用返回、用户隐私字段等被诱导输出。
- 越权工具调用:当模型具备插件/函数调用能力时,注入可能诱导其发起不该做的查询、变更或外发。
- 误导性决策:在工单、客服、运维、审计等场景,注入可能让模型给出错误结论或掩盖风险信号。
- 供应链扩散:注入内容可以被植入知识库、工单模板、邮件、网页,形成“跨系统传播”。
防护要点:把模型当作不可信解释器
1) 明确“数据”和“指令”的边界
- 将外部内容(网页/邮件/工单/知识库片段)统一包裹为“引用块/证据块”,并在系统策略中规定:引用块内的内容只能被总结和解释,不能变更系统规则或触发动作。
- 对用户输入与检索结果做显式标签:source=user、source=kb、source=tool 等,减少模型“混淆优先级”。
2) 工具调用与高风险动作强约束
- 对每个工具定义允许的意图集合与参数白名单,超出即拒绝。
- 将“外发/删除/变更配置/批量操作”设为需要二次确认的人类审批。
- 对工具返回做最小化:只给模型做任务必需字段,避免把凭据、内部路径、过多上下文喂给模型。
3) 检测与告警:识别“诗意文本里的指令意图”
- 在输入侧做风险评分:高密度隐喻指令、异常断句、刻意结构化(多行首字/末字规律)、可疑“还原/解码/照做/忽略规则”等意图信号。
- 在输出侧做泄露检测:系统提示词片段、内部域名、员工邮箱、API 返回结构等。
- 为每次拒绝/改写/工具调用记录审计日志,支持回放与复盘。
4) 红队测试:用“安全版样例”做持续回归
建议你构建一套不包含真实绕过技巧的回归集:以诗词风格描述“要求模型做不该做的事”的意图,验证系统能否稳定拒绝与解释原因。测试重点应落在:是否触发敏感信息、是否越权调用工具、是否把引用内容当成规则。
结论
古诗词“越狱”并不是玄学,它本质上是提示注入在自然语言伪装、结构化编码与叙事诱导上的变体。有效的防守也不是堆过滤词,而是把系统设计成“最小权限 + 强边界 + 可审计”的工程体系:模型负责语言理解,权限与动作由策略层决定。