IBM 研究团队近日发布了 LLMON(LLM Object Notation,发音 LLlemon),这是一种专为大型语言模型设计的原生标记语言。该语言旨在通过明确的结构和语义标签,解决模型在处理复杂上下文时的脆弱性问题,特别是针对间接提示注入攻击的防御。

目前,基于 Granite 4.1 基础模型训练的两款实验预览版模型已同步发布:Granite-4.1-3b-LLMON Preview 和 Granite-4.1-8b-LLMON Preview。此外,GitHub 上也提供了包含工具包、工作流程及模板示例的代码库。
LLMON 的核心优势与应用场景
LLMON 通过保留的特殊标记分界符包裹语义连贯的组件,使指令与数据分离更加清晰。其主要特性包括:
- 抗提示注入能力:由于明确的指令/数据分离,LLMON 模型大多能忽略隐藏在用户数据中的间接提示注入。在部分基准测试中,攻击成功率降至接近零,而常规指令调整模型则极易被劫持。这一安全性提升是在保持通用能力的前提下实现的。
- 上下文精准绑定:不相关的段落、旧的聊天转换和工具输出不会被错误地引入答案中,因为每个指令都与其适用的确切数据相绑定。
- 结构化支持:指令、数据和要求均被明确标记,使得应用程序代码层面的结构和含义可被模型利用。例如,Mellea 试用版具备本地 LLMON 支持,可通过自动 LLMON 化其 LLM 调用来实现。
- JSON 兼容性:开发者无需强制 LLM 观察 JSON 结构。官方提供的转换器可将现有 JSON 无损转换为 LLMON。用户也可定义自定义结构和相关标签,并在 LLMON 模型之上通过 LoRA 微调来理解这些新格式。
为何选择 LLMON 而非 JSON?
对于因果语言模型而言,JSON 并非理想的结构化格式。代码化器不受语法限制,且结构字符(如 {, }, :)可能出现在正常文本中,导致模型难以区分文档引号与字段关闭引号。嵌套深度通过计数括号编码,而 Transformer 在处理长跨度上的此类统计模式时表现较弱。
相比之下,LLMON 采用类似 XML 的标记方式,其结构分界符是保留的特殊标记而非普通字符,从而将结构与内容隔离在不同的词汇部分。每个跨度开始时都有标签,界限明确;嵌套结构局部声明,无需模型长时间追踪层次关系。鉴于许多团队已围绕 JSON 构建管道,IBM 也提供了相应的转换工具和示例笔记本。
LLMON 与聊天模板的关系
LLMON 不会取代聊天模板,而是对其进行增强。常规聊天模板仅告诉模型哪个部分属于哪个角色(系统、用户、助手),而 LLMON 进一步明确了每个组件的含义及其相互关系。
开发者仍可使用标准的消息列表并调用 apply_chat_template,但渲染后的结果将包含 LLMON 标记。区别在于,回合中的各个部分现在可以命名并标记为 exec: True 或 False。标记为 true 的部分会被绑定到输出底部的 exec 块中,指示运行哪个指令及操作对象;标记为 false 的部分虽存在于上下文中,但无引用关联。
messages = [ { "role": "user",
"instruction": [{ "value": "Write a short paragraph about", "exec": True }],
"data": [{ "value": "IBM Company", "exec": True }],
"requirement": [ {"value": "Use less than 10 words", "exec": True},
{"value": "Do not use commas", "exec": True}]
} ]
上述输入经模板处理后生成如下结构(为便于阅读添加了换行和缩进):
<|open|>instr<|:|>Ȗ<|close|>Write a short paragraph about<|open_end|>
<|open|>data<|:|>ä¦<|close|>IBM Company<|open_end|>
<|open|>req<|:|>Á¼<|close|>Use less than 10 words<|open_end|>
<|open|>req<|:|>¢¬<|close|>Do not use commas<|open_end|>
<|open|>exec<|:|>ÄÐ<|close|>
<|open|>exec<|.|>instruction<|close|>instr<|:|>Ȗ<|open_end|>
<|open|>exec<|.|>input<|close|>data<|:|>ä¦<|open_end|>
<|open|>exec<|.|>requirement<|close|>req<|:|>Á¼<|open_end|>
<|open|>exec<|.|>requirement<|close|>req<|:|>¢¬<|open_end|>
<|open|>exec<|.|>output<|close|>assistant<|:|>ãø<|open_end|>
<|open_end|>
<|open|>assistant<|:|>ãø<|close|>
区块 ID 由两个字符组成,从固定集合中绘制,Tokenizer 将其编码为单个 token,因此解析一个区块始终需要两个 token。角色仍为单个用户轮次,但其组件以五个单独的可定位区块到达模型,并由第六个执行区块连接,明确指定指令、输入、要求及输出位置。
安全性能评估
针对间接提示注入攻击(恶意指令隐藏在检索文档、工具响应或用户数据中),LLMON 的指令/数据分离机制提供了直接防御。在与多个开源及闭源模型的对比测试中,基于 OPI 基准的评估显示,所有非 LLMON 模型均易受感染。LLMON 模型相比最佳前沿模型避免了 47% 的攻击,且在 ASB 和 StruQ 等其他基准上也表现出类似趋势。目前,团队正在积极改进针对多轮聊天转换展开的自适应攻击防御。
通用能力保持
安全性提升并未牺牲通用能力。在标准基准类别中,LLMON 模型的性能与 Granite 4.1 Instruct 模型相当。这意味着用户可在 Granite 4.1 3B 或 8B 的基础上无缝切换至 LLMON 预览版,获得可比的一般性能及更强的即时注射抗性。
训练方法与技术细节
这些模型源自 Granite 4.1 基础检查点,LLMON 行为是在后训练期间学习的,而非在现有聊天格式上分层叠加。
LLMON 定义了六个分界符,作为保留的单 token 安装在 Tokenizer 中。每个提示组件成为独立的可定位区块,每回合附带一个执行区块。任务组合涵盖聊天、多轮对话、RAG 及工具调用等常规指令模型场景。训练过程中,模型学习遵循执行区块指定的依赖关系,忽略其余干扰项。后续进行了五个连续的 GRPO 阶段(涵盖多领域推理、RLHF、知识校准和数学),以及基于模型对注入尝试反应构建的 1000 个政策偏好对的 DPO 阶段。
由此产生的特权规则表明:通过执行块获得的指令具有权威性,而作为输入的数据仅为阅读材料。未被执行块调用的指令和数据跨度会被忽略。这种行为是通过学习获得的,而非强制保证。
自定义词汇与科学应用
用户可根据特定领域定义标签名称和结构,并通过微调适配器进行读写。在 ScienceWorld 基准测试中,团队定义了捕捉规划轨迹结构的词汇(如 instr.task.goal, data.state.room 等),并对参考解决方案进行 LLMON 标记。通过在 LLMON 模型之上调整 LoRA,训练后的模型能够在新词汇中编写下一个动作,并在测试游戏中表现优于未经训练的基础模型。
资源获取
这是一个用于探索和评估的实验预览版本,尚未准备好投入生产环境。相关资源如下:
- 模型:Granite-4.1-3b-LLMON-Preview 和 Granite-4.1-8b-LLMON-Preview
- 可视化演示:LLMON Attention Visualization
- Mellea 集成:https://github.com/generative-computing/mellea
- 论文:arXiv:2610.38120, arXiv:2603.22519





