diff --git a/examples/spo/README.md b/examples/spo/README.md
index 7a0a2734e..16ff7835a 100644
--- a/examples/spo/README.md
+++ b/examples/spo/README.md
@@ -21,7 +21,7 @@ ### 2. Define Your Iteration template 📝
Create a Iteration template file `metagpt/ext/spo/settings/task_name.yaml`:
```yaml
prompt: |
- solve question.
+ Please solve the following problem.
requirements: |
...
@@ -40,6 +40,14 @@ ### 2. Define Your Iteration template 📝
...
```
+Notes:
+- `prompt`: Initial prompt for iteration
+- `requirements`: Desired effects/outcomes (e.g., generate more thinking, use more humorous language)
+- `count`: Target word count for the generated prompt (e.g., 50). Set to None for no limit
+- `faq`: QA pairs used for iteration, can include appropriate number of pairs (typically 3)
+ - `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 🔧
Use `metagpt/ext/spo/optimize.py` to execute:
diff --git a/examples/spo/optimize.py b/examples/spo/optimize.py
index d7fd26395..102df0c06 100644
--- a/examples/spo/optimize.py
+++ b/examples/spo/optimize.py
@@ -7,32 +7,32 @@ def parse_args():
parser = argparse.ArgumentParser(description='SPO Optimizer CLI')
# LLM parameter
- parser.add_argument('--optimize-model', type=str, default='claude-3-5-sonnet-20240620',
- help='Model for optimization')
- parser.add_argument('--optimize-temperature', type=float, default=0.7,
- help='Temperature for optimization')
- parser.add_argument('--evaluate-model', type=str, default='gpt-4o-mini',
- help='Model for evaluation')
- parser.add_argument('--evaluate-temperature', type=float, default=0.3,
- help='Temperature for evaluation')
- parser.add_argument('--execute-model', type=str, default='gpt-4o-mini',
- help='Model for execution')
- parser.add_argument('--execute-temperature', type=float, default=0,
- help='Temperature for execution')
+ parser.add_argument('--opt-model', type=str, default='claude-3-5-sonnet-20240620',
+ help='Model for optimization')
+ parser.add_argument('--opt-temp', type=float, default=0.7,
+ help='Temperature for optimization')
+ parser.add_argument('--eval-model', type=str, default='gpt-4o-mini',
+ help='Model for evaluation')
+ parser.add_argument('--eval-temp', type=float, default=0.3,
+ help='Temperature for evaluation')
+ parser.add_argument('--exec-model', type=str, default='gpt-4o-mini',
+ help='Model for execution')
+ parser.add_argument('--exec-temp', type=float, default=0,
+ help='Temperature for execution')
# Optimizer parameter
parser.add_argument('--workspace', type=str, default='workspace',
- help='Path for optimized output')
+ help='Path for optimized output')
parser.add_argument('--initial-round', type=int, default=1,
- help='Initial round number')
+ help='Initial round number')
parser.add_argument('--max-rounds', type=int, default=10,
- help='Maximum number of rounds')
+ help='Maximum number of rounds')
parser.add_argument('--template', type=str, default='Poem.yaml',
- help='Template file name')
+ help='Template file name')
parser.add_argument('--name', type=str, default='Poem',
- help='Project name')
+ help='Project name')
parser.add_argument('--no-iteration', action='store_false', dest='iteration',
- help='Disable iteration mode')
+ help='Disable iteration mode')
return parser.parse_args()
@@ -42,16 +42,16 @@ def main():
SPO_LLM.initialize(
optimize_kwargs={
- "model": args.optimize_model,
- "temperature": args.optimize_temperature
+ "model": args.opt_model,
+ "temperature": args.opt_temp
},
evaluate_kwargs={
- "model": args.evaluate_model,
- "temperature": args.evaluate_temperature
+ "model": args.eval_model,
+ "temperature": args.eval_temp
},
execute_kwargs={
- "model": args.execute_model,
- "temperature": args.execute_temperature
+ "model": args.exec_model,
+ "temperature": args.exec_temp
}
)
diff --git a/metagpt/ext/spo/settings/Navigate.yaml b/metagpt/ext/spo/settings/Navigate.yaml
new file mode 100644
index 000000000..a5d8a1651
--- /dev/null
+++ b/metagpt/ext/spo/settings/Navigate.yaml
@@ -0,0 +1,47 @@
+prompt: |
+ Please think step by step.
+ Ensure the response concludes with the answer in the XML format:
+ [Yes or No].
+
+requirements: |
+ Must put the final answer at the end with XML. ((Yes or No),such as Yes)
+ The provided prompt needs to adapt to all current types of questions.
+
+count: None
+
+faq:
+ - question: |
+ If you follow these instructions, do you return to the starting point? Always face forward. Take 7 steps left. Take 2 steps backward. Take 7 steps backward. Take 7 steps backward. Take 3 steps forward.
+ Options:
+ - Yes
+ - No
+
+ answer: |
+ A lot of thinking and analysis processes.
+ ...
+ Final Answer:
+ (Yes or No)
+
+ - question: |
+ If you follow these instructions, do you return to the starting point? Always face forward. Take 6 steps backward. Take 8 steps left. Take 3 steps right. Take 7 steps forward. Take 3 steps right. Take 9 steps right. Take 1 step backward. Take 7 steps left.
+ Options:
+ - Yes
+ - No
+
+ answer: |
+ A lot of thinking and analysis processes.
+ ...
+ Final Answer:
+ (Yes or No)
+
+ - question: |
+ If you follow these instructions, do you return to the starting point? Turn left. Turn left. Take 6 steps. Take 3 steps. Turn around. Take 1 step. Take 3 steps. Take 5 steps.
+ Options:
+ - Yes
+ - No
+
+ answer: |
+ A lot of thinking and analysis processes.
+ ...
+ Final Answer:
+ (Yes or No)