在大语言模型(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 无疑是您的最佳选择!