热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >微软最新的结构化Prompt优化方法SAMMO,让你更快的压缩结构化提示词

微软最新的结构化Prompt优化方法SAMMO,让你更快的压缩结构化提示词

来源:互联网 更新时间:2026-07-31 14:00

大语言模型越来越强了,能处理的输入也越来越长、越来越复杂。这为使用更复杂的提示词(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环境。

关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc