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)