IBM发布LLMON标记语言,提升大模型抗注入能力

IBM发布LLMON标记语言,为大模型提供原生结构化支持。该方案通过明确指令与数据分离,显著提升抗提示注入能力,部分测试中攻击成功率降至接近零,并兼容JSON转换。

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

LLMON避免47%攻击

目前,基于 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,训练后的模型能够在新词汇中编写下一个动作,并在测试游戏中表现优于未经训练的基础模型。

资源获取

这是一个用于探索和评估的实验预览版本,尚未准备好投入生产环境。相关资源如下:

评论 0

0/500

评论需审核后展示,请文明发言

💬
还没有评论,来说两句

相关阅读