update SPO code

This commit is contained in:
isaacJinyu 2025-02-07 19:42:23 +08:00
parent 5140804f75
commit 8888cf9652
10 changed files with 112 additions and 90 deletions

View file

@ -1,4 +1,4 @@
# SPO 🤖 | Self-Supervised Prompt Optimizer
# SPO 🤖 | Self-Supervised Prompt PromptOptimizer
An automated prompt engineering tool for Large Language Models (LLMs), designed for universal domain adaptation.
@ -15,7 +15,7 @@ ## 🚀 Quick Start
### 1. Configure Your API Key ⚙️
Configure LLM parameters in `config/config2.yaml` (see `examples/aflow/config2.example.yaml` for reference)
Configure LLM parameters in `config/config2.yaml` (see `examples/spo/config2.example.yaml` for reference)
### 2. Define Your Iteration template 📝
Create a Iteration template file `metagpt/ext/spo/settings/task_name.yaml`:
@ -48,39 +48,39 @@ ### 2. Define Your Iteration template 📝
- `question`: Questions from the dataset used for iteration
- `answer`: Corresponding answers. Can contain desired thinking patterns or responses instead of actual answers, or can be left empty. See `metagpt/ext/spo/settings/Navigate.yaml` for reference
### 3. Implement the Optimizer 🔧
### 3. Implement the PromptOptimizer 🔧
Use `metagpt/ext/spo/optimize.py` to execute:
```python
from metagpt.ext.spo.components.optimizer import Optimizer
from metagpt.ext.spo.components.optimizer import PromptOptimizer
from metagpt.ext.spo.utils.llm_client import SPO_LLM
if __name__ == "__main__":
# Initialize LLM settings
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}
)
# Initialize LLM settings
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}
)
# Create and run optimizer
optimizer = Optimizer(
optimized_path="workspace", # Output directory
initial_round=1, # Starting round
max_rounds=10, # Maximum optimization rounds
template="Poem.yaml", # Template file
name="Poem", # Project name
iteration=True, # Enable iteration mode
)
# Create and run optimizer
optimizer = PromptOptimizer(
optimized_path="workspace", # Output directory
initial_round=1, # Starting round
max_rounds=10, # Maximum optimization rounds
template="Poem.yaml", # Template file
name="Poem", # Project name
iteration=True, # Enable iteration mode
)
optimizer.optimize()
optimizer.optimize()
```
Or you can use command line interface:
```bash
python optimize.py [options]
python -m examples.spo.optimize
```
Available command line options:

View file

@ -1,10 +1,10 @@
import argparse
from metagpt.ext.spo.components.optimizer import Optimizer
from metagpt.ext.spo.components.optimizer import PromptOptimizer
from metagpt.ext.spo.utils.llm_client import SPO_LLM
def parse_args():
parser = argparse.ArgumentParser(description='SPO Optimizer CLI')
parser = argparse.ArgumentParser(description='SPO PromptOptimizer CLI')
# LLM parameter
parser.add_argument('--opt-model', type=str, default='claude-3-5-sonnet-20240620',
@ -20,7 +20,7 @@ def parse_args():
parser.add_argument('--exec-temp', type=float, default=0,
help='Temperature for execution')
# Optimizer parameter
# PromptOptimizer parameter
parser.add_argument('--workspace', type=str, default='workspace',
help='Path for optimized output')
parser.add_argument('--initial-round', type=int, default=1,
@ -55,7 +55,7 @@ def main():
}
)
optimizer = Optimizer(
optimizer = PromptOptimizer(
optimized_path=args.workspace,
initial_round=args.initial_round,
max_rounds=args.max_rounds,