游乐游手机版
首页/AI热点日报/热点详情

微软最新SAMMO方法让结构化提示词压缩更高效

类型:热点整理2026-06-12
微软研究院提出SAMMO框架,将提示词建模为结构化有向无环图,通过结构感知变异算子搜索最优元提示程序。该方法在指令调优、检索增强生成管道调优和提示压缩中表现显著优于现有技术,压缩提示代价超40%,同时提升性能。

随着大语言模型能力的持续增强,可处理的输入长度和复杂度也不断提升。这为设计更复杂的提示词(Prompt)提供了充足空间——但要让这些提示词在实际部署中稳定输出理想结果,通常仍需精心调校与优化。

目前市面上已有多种自动化Prompt优化方法,然而随着提示词本身复杂度的快速攀升,许多传统方法已显得力不从心。简言之,我们亟需一种新思路来优化这种“元提示程序”(Metaprompt)。正是基于这一目标,微软研究院推出了名为SAMMO的全新框架,全称为“结构感知多任务元提示优化”(Structure-Aware Multi-objective Metaprompt Optimization)。其核心价值在于:实现了对Metaprompt的“编译时优化”。

标题:作为程序的Prompt:一种结构感知的高效提示优化方法
论文地址:https://arxiv.org/pdf/2404.02319.pdf

SAMMO的独特之处在于,它不再将Prompt视为一段固定文本,而是当作一个结构化对象。这样一来,优化过程便能在更丰富的“变换集”中进行搜索。相对于先前的自动化Prompt优化方法,SAMMO具备五个直观优势:

1. 高效的数据标注:通过将多个数据点打包至单个提示符并解析,可显著降低标注成本。

2. 提示原型与工程:将Prompt表示为有向无环图,组件可复用,结构便于调整,快速构建和测试新提示变得轻而易举。

3. 指令优化:利用结构化的表达能力优化指令,在特定任务上能带来显著的性能提升。

4. 提示压缩:在维持性能的前提下,大幅压缩提示的长度与复杂度,减少计算开销。

5. 大规模快速执行:支持并行与速率限制,可同时运行大量查询,避免LLM的API过载。

SAMMO工作原理

SAMMO的核心思想十分直接:将Prompt表示为一个结构化的程序——一个有向无环的函数图G。在此图中,SAMMO定义了一系列“结构感知的Prompt变异算子”,包括重排节点、替换节点、删除节点以及修改节点参数等。每个节点v都带有自己的函数类型ψ_v和静态参数θ_v,分别对应Prompt的不同部分,例如任务描述、指南、示例或输入输出格式。节点间的有向边e_ij则表达了父子关系:父节点能接收子节点传递的动态输入X与消息。

整个Prompt程序π*通过递归求值该函数图得到:
π[X] = ψ_vr(X ∪ ψ_children) θ_vr)
其中vr为根节点,ψ_children是从子节点收集的信息。

不妨用论文中的例子来直观理解:

这是一个简单的元提示结构,用于评论分类任务。在SAMMO框架下,元提示被表示为动态功能图:每个节点都会根据子节点的结果、输入数据X以及节点自身的参数θ来产生新值。

在此图中,使用输入数据X的节点以浅灰色标出。

Metaprompt π[X]:顶层节点,代表整个元提示的函数,接收输入X并输出最终结果。

RenderSection():两个分支的父节点,负责渲染提示的某个部分。

  • 左侧的RenderText()节点携带参数θ_text,包含静态文本,例如“在接下来的任务中,你需要分类……”。
  • 右侧的RenderSection(X)则处理动态内容,即输入数据X。

子节点:

  • 左侧RenderText()的子节点包含静态文本:“下面是一些例子:”,用来引入示例数据。
  • RenderData()节点有两个实例:一个静态,包含格式化为JSON的示例数据;另一个处理动态输入数据X,同样格式化为JSON。

RenderText()和RenderData(X)节点在右侧协同工作,渲染任务的具体部分,例如提示用户对输入数据进行分类,并以JSON格式展示结果。

这张图清晰地说明了元提示如何将多个组件组合在一起,每个组件各司其职。借助这种结构化方法,我们可以有针对性地对元提示进行修改和优化——比如调整文本说明、更改数据格式或示例——从而提升整体性能。

SAMMO示例

SAMMO的优化过程,本质就是在函数图G上执行搜索,以找到更优的Prompt程序π*。具体来说,SAMMO定义了一系列结构感知的变异算子,包括:

  1. 节点级别的变换:例如重排、替换、删除节点。
  2. 节点参数的变换:例如修改指令文本、格式化参数等。
  3. 图结构层面的变换:例如增加或删除子节点。

这些变换算子构成了一个庞大的搜索空间Π。SAMMO采用启发式搜索算法——比如遗传算法或beam search——在有限的训练数据上探索该空间,最终找到性能更优的Prompt程序π*。

举一个具体例子。假设我们要构建一个问答系统,用于回答编程语言相关的问题。我们可以先搭建如下Prompt程序:

π = {
    "task_description": "Answer questions about programming languages.",
    "examples": [
        {"question": "What is the difference between Ja va and Python?",
         "answer": "Ja va is a statically typed language while Python is dynamically typed. Ja va is generally faster for certain tasks but Python has a simpler and more concise syntax."},
        {"question": "How does C++ differ from C?",
         "answer": "C++ is an extension of the C programming language, adding object-oriented programming features like classes and inheritance. C++ also has features like function overloading and templates that C does not ha ve."}
    ],
    "format": {
        "input": "question: {question}",
        "output": "{answer}"
    },
    "input": "What is the purpose of garbage collection in Ja va?"
}

该Prompt程序包含了任务描述、示例问答对以及输入输出格式规范。将其输入LLM,即可获得相应答案。

现在,假设我们希望优化这个Prompt,使其在回答编程语言问题时表现更出色。利用SAMMO的变异算子,可以执行以下操作:

  1. 删除或修改任务描述,使其更加明确。
  2. 增加或替换示例问答对,扩大覆盖范围。
  3. 调整输入输出格式,使其更简洁易读。
  4. 重新组织Prompt的结构,例如将示例放在最后。

通过反复迭代这些变换,SAMMO便能探索出一个性能更优的Prompt程序π*,随后我们可用其与用户进行更好的交互。

注:论文中的变异算子称为Prompt Mutation Operators。若你对变异提示感兴趣,可参考DeepMind发布的一篇关于自主进化提示系统的文章。

SAMMO应用场景

SAMMO是一个通用的Prompt优化框架,适用于黑盒设置——即优化者只能从LLM的输出中采样。论文证明,SAMMO能够概括之前多种指令优化与压缩技术,并在三种不同应用场景中显著优于现有方法:

1. 指令调优:在8个零样本BigBench分类任务中,SAMMO分别提升了10%至100%的性能,尤其对较弱的LLM效果更为明显。对于某些部署问题而言,这可能是成本最低、效果最佳的方案。

2. 检索增强型生成(RAG)管道调优:在GeoQuery、SMCalFlow和Overnight三个数据集上,SAMMO分别提升了26%至133%的准确率。即使在强大的GPT-4上,也能带来30%的收益。

3. Prompt压缩:在保持基线性能的前提下,SAMMO能将Prompt的加权代价(输入输出长度)压缩超过40%,显著优于其他压缩方法。当上下文长度受限时,结构化Prompt压缩节省的不仅仅是Token。

此外,SAMMO的通用性还体现在其兼容之前多种Prompt优化与压缩方法,例如自动化Prompt工程(APE)、GrIPS、STDC、Stopwords、GPT-4 Rewrite等。实验结果表明,相较这些方法,SAMMO不仅性能提升显著,还能实现更大幅度的Prompt压缩——尤其在较弱LLM上效果更为突出。

这些实验结果传递出一个信号:随着LLM越来越强大,Prompt的复杂度也在持续增加,传统Prompt优化方法已难以跟上需求。SAMMO通过将Prompt建模为结构化程序,提供了一种通用、高效的优化方法——既能显著提升Prompt性能,又能大幅压缩Prompt开销。对于构建高效的人机交互系统而言,这一方法非常实用。掌握SAMMO方法,可为未来大规模应用LLM打下坚实基础。

需要提醒一点:SAMMO的优化效果会因LLM的不同而有所差异。这表明,即使使用相同的变异算子,不同LLM的Prompt优化轨迹之间也存在较弱的相关性。因此,在实际应用中,Prompt优化需要针对具体LLM单独调整。但总体来看,微软的SAMMO确实开创了一种新的Prompt优化范式,为LLM的大规模应用提供了重要支撑。

项目提供了一个示例操作方法和API参考,可在GitHub上搜索“SAMMO”,该项目由Tobias Schnabel撰写。

GitHub上的SAMMO示例安装方式不算特别友好,对Python版本有指定要求。如果你的环境中已有其他版本的Python项目,再安装SAMMO可能会遇到一些麻烦。如果你的机器非常干净,没有任何项目,可以按照安装教程直接进行。我也编写了一个Dockerfile,便于一键部署到本地Docker环境。

来源:https://www.53ai.com/news/qianyanjishu/915.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。