菜单

自监督提示优化

相关源文件

无监督提示优化 (SPO) 是 MetaGPT 内部的一个自动化提示工程系统,它可以在无需人工反馈或标记数据的情况下优化大型语言模型 (LLM) 的提示。该系统利用 LLM 本身作为裁判,通过自我演进的优化过程来迭代改进提示。

核心概念和优势

与传统的提示工程方法相比,SPO 具有几个关键优势:

  • 无需监督:无需真实结果或人工反馈。
  • 超低成本:每次任务优化约 0.15 美元。
  • 通用适应性:支持封闭式和开放式任务。
  • 自我演进:通过 LLM-作为-裁判的机制自动改进提示。

来源:examples/spo/README.md7-21

系统架构

SPO 系统由围绕核心 PromptOptimizer 类组织起来的多个相互关联的组件组成。

来源:metagpt/ext/spo/components/optimizer.py19-48 metagpt/ext/spo/utils/llm_client.py17-77 metagpt/ext/spo/utils/prompt_utils.py6-34 metagpt/ext/spo/utils/data_utils.py11-44 metagpt/ext/spo/utils/evaluation_utils.py21-81 metagpt/ext/spo/components/evaluator.py15-75

优化流程

SPO 优化过程涉及多轮提示生成、执行和评估。

来源:metagpt/ext/spo/components/optimizer.py40-137 metagpt/ext/spo/utils/evaluation_utils.py25-81 metagpt/ext/spo/components/evaluator.py15-75

多 LLM 配置

SPO 的一个关键特性是它能够为优化过程的不同阶段使用不同的 LLM。

阶段目的默认模型温度
优化生成改进的提示claude-3-5-sonnet-202406200.7
评估评估提示有效性gpt-4o-mini0.3
执行对测试问题运行提示gpt-4o-mini0.0

SPO_LLM 类负责管理这些不同的 LLM 配置。

来源:metagpt/ext/spo/utils/llm_client.py11-77 examples/spo/optimize.py11-16

模板配置

SPO 使用 YAML 模板文件来定义初始提示、要求和测试问题。

这些模板通过 load.py 实用程序加载。

来源:metagpt/ext/spo/utils/load.py15-48 examples/spo/README.md53-82

使用方法

SPO 可用于三种方式:

1. Python API

来源:examples/spo/README.md89-111

2. 命令行界面

可用选项:

--opt-model      Optimization model (default: claude-3-5-sonnet-20240620)
--opt-temp       Optimization temperature (default: 0.7)
--eval-model     Evaluation model (default: gpt-4o-mini)
--eval-temp      Evaluation temperature (default: 0.3)
--exec-model     Execution model (default: gpt-4o-mini)
--exec-temp      Execution temperature (default: 0)
--workspace      Output directory path (default: workspace)
--initial-round  Initial round number (default: 1)
--max-rounds     Maximum rounds (default: 10)
--template       Template file name (default: Poem.yaml)
--name           Project name (default: Poem)

来源:examples/spo/optimize.py7-25 examples/spo/README.md114-137

3. Streamlit Web Interface

Web 界面提供了一种用户友好的方式来配置模板、LLM 设置以及运行优化过程。

来源:metagpt/ext/spo/app.py1-301 examples/spo/README.md138-152

输出与结果

SPO 创建一个结构化的目录来存储优化结果。

workspace/
  └── Project_name/
      └── prompts/
          ├── results.json 
          ├── round_1/
          │   ├── answers.txt
          │   └── prompt.txt
          ├── round_2/
          │   ├── answers.txt
          │   └── prompt.txt
          └── ...
  • results.json:包含所有轮次的数据,包括成功/失败状态和 token 计数。
  • prompt.txt:每轮优化的提示。
  • answers.txt:每轮使用该提示生成的输出。

来源:examples/spo/README.md154-177

与 MetaGPT 的集成

SPO 位于 MetaGPT 的专业能力层中,如核心架构概述所示。

SPO 为 MetaGPT 提供了自动化的提示优化能力,可以补充框架中的其他系统,提供了一种在无需人工反馈的情况下系统地改进提示性能的方法。

来源:examples/spo/README.md1-21