在大语言模型(LLMs)日益普及的今天,提示(Prompt)的设计和优化成为了解锁其潜力的关键。然而,传统的提示优化方法往往依赖人工反馈或外部标注数据,既昂贵又难以扩展。为了解决这一问题,SPO(Self-Supervised Prompt Optimization,自我监督提示优化)应运而生。SPO 是一款面向大语言模型的自动化提示优化工具,其核心特点是无需外部监督,通过模型自身的输出信号实现高效优化。
本文将详细解析 SPO 的核心优势、实验结果、快速启动指南以及其在提示优化领域的革命性贡献。
✨ SPO 的核心优势
SPO 的设计理念围绕四大核心优势展开,使其在提示优化领域脱颖而出:
- 💸 超低成本:每个任务的优化成本仅为 $0.15,比传统方法高效 17.8 至 90.9 倍。
 - 🏷️ 零监督依赖:无需任何人工标注或外部反馈,完全自我监督。
 - ⚡ 通用适配:支持封闭式和开放式任务,适应性极强。
 - 🔄 自我演化:通过 LLM-as-judge 机制实现自动优化,持续提升性能。
 
这些特性使 SPO 成为一个既高效又灵活的提示优化工具,适用于多种任务场景。
📊 实验结果:性能与成本的对比
封闭式任务
SPO 在封闭式任务(如数学求解、事实验证等)中表现出色,显著降低了优化成本,同时保持了与最先进方法相当的性能。

- 成本效率:SPO 的优化成本仅为现有方法的 1.1% 至 5.6%。
 - 性能稳定:在多个数据集上,SPO 的性能与最先进方法持平甚至更优。
 
开放式任务
在开放式任务(如写作、角色扮演等)中,SPO 同样展现了强大的优化能力,显著提升了模型的生成质量。

实验表明,SPO 能够在不同模型配置下提升性能,适应多样化的任务需求。
🚀 快速启动指南
SPO 的使用非常简单,只需按照以下步骤即可快速实现提示优化:
1. 配置 API 密钥
在 config/config2.yaml 文件中配置 LLM 参数。可以参考示例文件 examples/spo/config2.example.yaml。
2. 定义迭代模板
创建一个迭代模板文件,例如 metagpt/ext/spo/settings/task_name.yaml,其结构如下:
prompt: |
  Please solve the following problem.
requirements: |
  ...
count: None
qa:
  - question: |
      ...
    answer: |
      ...
  - question: |
      ...
    answer: |
      ...
字段说明:
- prompt:初始提示,用于引导模型生成输出。
 - requirements:期望的效果或输出特性,例如「生成更多逻辑思考」或「使用更幽默的语言」。
 - count:生成提示的目标字数(可选)。
 - qa:用于迭代的问答对,可以包含 3 个左右的问题。
 
3. 实现 PromptOptimizer
SPO 提供了三种运行方式,用户可以根据需求选择合适的方式:
方式 1:Python 脚本
通过 Python 脚本运行优化器:
from metagpt.ext.spo.components.optimizer import PromptOptimizer
from metagpt.ext.spo.utils.llm_client import SPO_LLM
if __name__ == "__main__":
  # 初始化 LLM 设置
  SPO_LLM.initialize(
    optimize_kwargs={"model": "claude-3-5-sonnet-20240620", "temperature": 0.7},
    evaluate_kwargs={"model": "gpt-4o-mini", "temperature": 0.3},
    execute_kwargs={"model": "gpt-4o-mini", "temperature": 0}
  )
  # 创建并运行优化器
  optimizer = PromptOptimizer(
    optimized_path="workspace",  # 输出目录
    initial_round=1,  # 起始轮次
    max_rounds=10,  # 最大优化轮次
    template="Poem.yaml",  # 模板文件
    name="Poem",  # 项目名称
  )
  optimizer.optimize()
方式 2:命令行界面
通过命令行运行优化器:
python -m examples.spo.optimize
支持的命令行选项:
--opt-model            优化模型(默认:claude-3-5-sonnet-20240620)
--opt-temp             优化温度(默认:0.7)
--eval-model           评估模型(默认:gpt-4o-mini)
--eval-temp            评估温度(默认:0.3)
--exec-model           执行模型(默认:gpt-4o-mini)
--exec-temp            执行温度(默认:0)
--workspace            输出目录路径(默认:workspace)
--initial-round        初始轮次(默认:1)
--max-rounds           最大轮次(默认:10)
--template             模板文件名(默认:Poem.yaml)
--name                 项目名称(默认:Poem)
获取帮助:
python -m examples.spo.optimize --help
方式 3:Streamlit Web 界面
使用 Streamlit 提供的 Web 界面,体验更友好的用户交互方式:
pip install "streamlit~=1.42.0"
python -m streamlit run metagpt/ext/spo/app.py
4. 查看优化结果
优化完成后,结果将存储在指定的工作目录中,结构如下:
workspace
  └── Project_name
      └── prompts
          ├── results.json 
          ├── round_1
          │   ├── answers.txt
          │   └── prompt.txt
          ├── round_2
          │   ├── answers.txt
          │   └── prompt.txt
          ├── ...
          └── round_n
              ├── answers.txt
              └── prompt.txt
- results.json:记录每轮迭代是否成功及相关信息。
 - prompt.txt:对应轮次的优化提示。
 - answers.txt:使用提示生成的输出结果。
 
📜 引用与致谢
如果您在研究中使用了 SPO,请引用以下论文:
@misc{xiang2025spo,
      title={Self-Supervised Prompt Optimization}, 
      author={Jinyu Xiang and Jiayi Zhang and Zhaoyang Yu and Fengwei Teng and Jinhao Tu and Xinbing Liang and Sirui Hong and Chenglin Wu and Yuyu Luo},
      year={2025},
      eprint={2502.06855},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2502.06855}, 
}
🌟 总结
SPO 是提示优化领域的一次革命性突破。通过自我监督的方式,它摆脱了对外部参考的依赖,实现了超低成本的高效优化。无论是封闭式任务还是开放式任务,SPO 都展现了卓越的性能和广泛的适用性。如果您正在寻找一种高效、灵活且易用的提示优化工具,SPO 无疑是您的最佳选择!