IBM 用一套标记语言把「指令」和「数据」拆开,提示注入掉了 95 个百分点
IBM 2026-11-12 发布 LLMON 标记语言与 Granite 4.1 3B/8B 预览模型:用保留 token 把指令与不可信数据分区,OPI 基准上多挡 95 个百分点注入攻击。
2026-11-13 · Hugging Face 官方博客(IBM Granite 团队)/ 模型评估第三方整理(Brocker、ExplainX)
发布 2026-11-13核实 2026-11-13要点
- 2026-11-12,IBM Granite 团队在 Hugging Face 发布 LLMON(LLM Object Notation),同时放出两个实验性预览模型:granite-4.1-3b-LLMON-preview 与 granite-4.1-8b-LLMON-preview,Apache 2.0。
- 核心机制是「分区 + 一个执行块」:一轮对话里的各部分(指令、数据、要求)各自成为可寻址的块,块 ID 由固定在词表里的两个特殊 token 组成,寻址固定花 2 个 token;末尾的 exec 块声明跑哪条指令、作用在哪份数据、受哪些约束、答案写进哪个块。
- 关键设计是「不被引用的内容就没有权威」:exec 块之外的块仍然进了上下文,但没有任何东西引用它们——训练时还专门放了「诱饵块」来强化这个区分。
- OPI 基准(9,000 条静态间接注入)上接近满分:IBM 自报比最好的前沿模型多挡 47 个百分点、比最好的开源模型多挡 95 个百分点;ASB 与 StruQ 上趋势类似。
- 通用能力基本没掉,但也不是没代价:3B 版 MMLU-Pro 为 46.08(Granite 4.1 3B Instruct 为 49.83)、CRUXEval-O 为 32.75(对比 40.75);安全类基准反而更高——SALAD-Bench 97.25(对比 93.95)、Tulu3 Safety 86.13(对比 66.84)。
- 训练路径:起点是 Granite 4.1 base 而不是 instruct(让 LLMON 行为在后期训练里长出来),把常规指令语料重新序列化成 LLMON 块 + 诱饵块,再走 5 段 GRPO 与一轮 DPO(约 1,000 条偏好对,用模型自己对注入攻击的响应构造)。
背景与分析
提示注入是 2026 年 Agent 落地最大的一个坑,业界的主流解法分三派:外部护栏(在模型外面加一层检测)、训练对齐(让模型学会不听数据里的指令)、上下文结构(从格式上区分权威与材料)。LLMON 走的是第三派,而且做得比较彻底——不再依赖模型「理解」哪段是数据,而是从 token 层面让二者不可混淆。
为什么这个方向值得认真看?因为前两派都有结构性弱点。护栏是概率性的,绕过方法一直在更新;训练对齐是把「拒绝」写进权重,一旦遇到没见过的攻击变体就会退化成「要么过度拒绝、要么放过」。而上下文结构改的是输入的形状——模型不需要判断「这句话是不是注入」,它只需要遵守一条规则:只有 exec 块引用的内容才是指令。
IBM 给的例子很能说明差别。传统模板会把指令、数据、约束拍平成一段文本,让模型自己猜哪部分是任务、哪部分是素材;LLMON 把它们切成五块,再用第六块(exec)把它们绑起来。模型要做的是依赖解析,不是意图判断——依赖解析是确定性的,意图判断不是。
这个思路并非 IBM 首创。学界早有 spotlighting、delimiter、instruction hierarchy 一类做法;OpenAI 与 Anthropic 在系统提示里也各有分层的实现。LLMON 的增量在两处:一是把分隔符做进词表(保留特殊 token,不与普通文本共享字符,天然不可伪造),二是把「哪些块被引用」显式编码(诱饵块的存在让「进了上下文但没有权威」成为可训练的信号)。
当然,限制也很硬:
- 只测了静态注入。跨多轮的渐进式渗透(先让模型接受一个小前提,再逐步扩大)没覆盖,IBM 自己说还在做。
- 特权规则是学出来的,不是强制执行的。模型卡原话的意思是:exec 之外不生效这条规则属于习得行为,不能当作对敏感系统的唯一防线。
- 只能防「数据里藏指令」这一类。对「工具返回值本身被投毒」「模型被诱导调用危险工具」这些,LLMON 不解决。
对开发者的影响
- 如果你在写 Agent 的上下文拼装层,这个格式可以直接借鉴。不必等 Granite 模型,先把「指令 / 数据 / 约束」在模板里显式分区,就已经能拿掉一大截注入面——成本是一条模板改动。
- 小模型的 Agent 场景受益最大。3B、8B 这类模型对上下文边界的辨别力弱,拍平的文本里混进一句「忽略以上指令」很容易中招;结构化输入对它们是刚需。
- 别指望它替代沙箱与权限控制。LLMON 管的是「模型认不认这条指令」,不是「模型能不能执行这个动作」。后者仍然要靠沙箱、allowlist、人工确认——本站此前记录的 Fail-Closed 默认拒绝 与 Agent 沙箱 是互补关系,不是替代关系。
- 自建词表可行。IBM 提供了自定义 tag 与 LoRA 微调的路径(示例在 ScienceWorld 基准上),也就是「你的业务有自己的块类型」时不用等官方。
AI 之家 观点
这条新闻的真实价值不在那两个预览模型(3B / 8B 在通用能力上还打不过自家 instruct 版),而在它把「上下文结构」这件事从工程习惯上升成了可训练的格式。
过去两年防注入的主流叙事是「更强的对齐」,LLMON 提供的是另一条路:别让模型去判断,让格式去决定。这条路的天花板更高——它不依赖模型有多聪明,只依赖格式有多严格;但它的地板也更低——一旦你的执行块本身写错(比如把用户输入错误地标成 instruction),防线直接失效,且失效方式是静默的。
所以我的判断是:值得抄格式,别急着抄结论。IBM 的 95 个百分点是在 9,000 条静态攻击上测出来的,真实世界里攻击者会看着你的格式来设计绕过;而「特权规则是学出来的」这句自述,等于官方承认了它不是安全边界,只是一层提高门槛的措施。
真正该被记住的是那句设计原则——进了上下文,不等于有权威。这句话对所有 Agent 系统都成立,无论你用不用 LLMON。
相关阅读
- 同主题概念:Fail-Closed 与默认拒绝 · Agent 沙箱 · Agent 验证
- 相关动态:AI 审计 AI 的误报权衡 · OpenAI Control Room 急停机制
- 工具卡:Claude Code · Codex CLI · 扣子
- 相关模型:Gemini 4 Hydrogen(官方称 IPI 韧性提升 2.3 倍)
来源
- { title: "LLMON: An LLM-Native Markup Language, now in Granite 4.1 3B and 8B(Hugging Face 官方博客,IBM Granite 团队,2026-11-12)", url: "https://huggingface.co/blog/ibm-granite/llmon-an-llm-native-markup-language-now-in-granite" }
- { title: "IBM Granite releases LLMON preview models with prompt-injection resistance(含 3B 模型卡分项数据:MMLU-Pro / CRUXEval-O / SALAD-Bench / Tulu3)", url: "https://www.brocker.org/ibm-granite-llmon-preview-models-prompt-injection-resistance" }
- { title: "IBM Granite LLMON: Structured Context Markup for Smaller Models(ExplainX,机制与训练路径整理)", url: "https://www.explainx.ai/blog/ibm-granite-llmon-markup-language-preview-2026" }
常见问题
LLMON 是什么?
LLM Object Notation,IBM Granite 团队提出的标记语言。用一组保留 token 把上下文切成可寻址的块——指令、数据、要求各占一块,末尾一个 exec 块说明「跑哪条指令、作用在哪份数据、受哪些约束、答案放哪」。
它防的是什么攻击?
间接提示注入:恶意指令藏在检索到的文档、工具返回值或用户数据里,模型读上下文时把它当命令执行。LLMON 靠「exec 块以外的内容一律视为未被引用的材料」来切断这条越权路径。
效果有多好?
IBM 自报在 OPI 基准(9,000 条静态间接注入)上两个预览模型都接近满分鲁棒性,比最好的前沿闭源模型多挡 47 个百分点,比最好的开源模型多挡 95 个百分点;ASB、StruQ 上趋势类似。以上均为厂商口径,无第三方复现。
能直接上生产吗?
IBM 明确说是实验性预览,不用于生产。它自己也写了两个限制:一是只测了静态注入,跨多轮对话逐步渗透的自适应攻击还在做;二是「exec 块里才是指令」这条特权规则是**学出来的行为,不是强制的保证**,不能当唯一防线。