|
|
@@ -616,17 +616,20 @@ Plan-and-Solve 尤其适用于那些结构性强、可以被清晰分解的复
|
|
|
|
|
|
规划阶段的目标是让大语言模型接收原始问题,并输出一个清晰、分步骤的行动计划。这个计划必须是结构化的,以便我们的代码可以轻松解析并逐一执行。因此,我们设计的提示词需要明确地告诉模型它的角色和任务,并给出一个输出格式的范例。
|
|
|
|
|
|
-```bash
|
|
|
+````python
|
|
|
PLANNER_PROMPT_TEMPLATE = """
|
|
|
-你是一个善于规划的AI助手。你的任务是根据用户提出的问题,将其分解成一个由多个步骤组成的、可执行的计划。
|
|
|
-请确保每个步骤都是独立的、清晰的,并且严格按照逻辑顺序排列。
|
|
|
-请你只输出计划本身,不要包含其他任何解释或对话。
|
|
|
+你是一个顶级的AI规划专家。你的任务是将用户提出的复杂问题分解成一个由多个简单步骤组成的行动计划。
|
|
|
+请确保计划中的每个步骤都是一个独立的、可执行的子任务,并且严格按照逻辑顺序排列。
|
|
|
+你的输出必须是一个Python列表,其中每个元素都是一个描述子任务的字符串。
|
|
|
|
|
|
问题: {question}
|
|
|
|
|
|
-计划:
|
|
|
-"""
|
|
|
+请严格按照以下格式输出你的计划,```python与```作为前后缀是必要的:
|
|
|
+```python
|
|
|
+["步骤1", "步骤2", "步骤3", ...]
|
|
|
```
|
|
|
+"""
|
|
|
+````
|
|
|
|
|
|
这个提示词通过以下几点确保了输出的质量和稳定性:
|
|
|
- <strong>角色设定</strong>: “顶级的AI规划专家”,激发模型的专业能力。
|
|
|
@@ -687,7 +690,7 @@ class Planner:
|
|
|
- <strong>历史步骤与结果</strong>: 提供至今为止已经完成的工作,作为当前步骤的直接输入。
|
|
|
- <strong>当前步骤</strong>: 明确指示模型现在需要解决哪一个具体任务。
|
|
|
|
|
|
-```bash
|
|
|
+```python
|
|
|
EXECUTOR_PROMPT_TEMPLATE = """
|
|
|
你是一位顶级的AI执行专家。你的任务是严格按照给定的计划,一步步地解决问题。
|
|
|
你将收到原始问题、完整的计划、以及到目前为止已经完成的步骤和结果。
|
|
|
@@ -792,50 +795,44 @@ class PlanAndSolveAgent:
|
|
|
--- 开始处理问题 ---
|
|
|
问题: 一个水果店周一卖出了15个苹果。周二卖出的苹果数量是周一的两倍。周三卖出的数量比周二少了5个。请问这三天总共卖出了多少个苹果?
|
|
|
--- 正在生成计划 ---
|
|
|
-🧠 正在调用 xxxxxx 模型...
|
|
|
-✅ 计划已生成:
|
|
|
+🧠 正在调用 xxxx 模型...
|
|
|
+✅ 大语言模型响应成功:
|
|
|
```python
|
|
|
-["确定周一卖出的苹果数量为15个", "计算周二卖出的苹果数量,即周一数量的两倍", "计算周三卖出的苹果数量,即周二数量减去5个", "将这三天卖出的苹果数量相加得到总数"]
|
|
|
---- 开始处理问题 ---
|
|
|
-问题: 一个水果店周一卖出了15个苹果。周二卖出的苹果数量是周一的两倍。周三卖出的数量比周二少了5个。请问这三天总共卖出了多少个苹果?
|
|
|
---- 正在生成计划 ---
|
|
|
-🧠 正在调用 xxxxxx 模型...
|
|
|
-✅ 计划已生成:
|
|
|
---- 开始处理问题 ---
|
|
|
-问题: 一个水果店周一卖出了15个苹果。周二卖出的苹果数量是周一的两倍。周三卖出的数量比周二少了5个。请问这三天总共卖出了多少个苹果?
|
|
|
---- 正在生成计划 ---
|
|
|
---- 开始处理问题 ---
|
|
|
---- 开始处理问题 ---
|
|
|
---- 开始处理问题 ---
|
|
|
---- 开始处理问题 ---
|
|
|
-问题: 一个水果店周一卖出了15个苹果。周二卖出的苹果数量是周一的两倍。周三卖出的数量比周二少了5个。请问这三天总共卖出了多少个苹果?
|
|
|
---- 正在生成计划 ---
|
|
|
-🧠 正在调用 xxxxxx 模型...
|
|
|
+["计算周一卖出的苹果数量: 15个", "计算周二卖出的苹果数量: 周一数量 × 2 = 15 × 2 = 30个", "计算周三卖出的苹果数量: 周二数量 - 5 = 30 - 5 = 25个", "计算三天总销量: 周一 + 周二 + 周三 = 15 + 30 + 25 = 70个"]
|
|
|
+```
|
|
|
✅ 计划已生成:
|
|
|
```python
|
|
|
-["确定周一卖出的苹果数量为15个", "计算周二卖出的苹果数量,即周一数量的两倍", "计算周三卖出的苹果数量,即周二数量减去5个", "将这三天卖出的苹果数量相加得到总数"]
|
|
|
+["计算周一卖出的苹果数量: 15个", "计算周二卖出的苹果数量: 周一数量 × 2 = 15 × 2 = 30个", "计算周三卖出的苹果数量: 周二数量 - 5 = 30 - 5 = 25个", "计算三天总销量: 周一 + 周二 + 周三 = 15 + 30 + 25 = 70个"]
|
|
|
```
|
|
|
|
|
|
--- 正在执行计划 ---
|
|
|
|
|
|
--> 正在执行步骤 1/4: 确定周一卖出的苹果数量为15个
|
|
|
-🧠 正在调用 xxxxxx 模型...
|
|
|
-✅ 步骤 1 已完成,结果: 15个
|
|
|
+-> 正在执行步骤 1/4: 计算周一卖出的苹果数量: 15个
|
|
|
+🧠 正在调用 xxxx 模型...
|
|
|
+✅ 大语言模型响应成功:
|
|
|
+15
|
|
|
+✅ 步骤 1 已完成,结果: 15
|
|
|
|
|
|
--> 正在执行步骤 2/4: 计算周二卖出的苹果数量,即周一数量的两倍
|
|
|
-🧠 正在调用 xxxxxx 模型...
|
|
|
-✅ 步骤 2 已完成,结果: 30个
|
|
|
+-> 正在执行步骤 2/4: 计算周二卖出的苹果数量: 周一数量 × 2 = 15 × 2 = 30个
|
|
|
+🧠 正在调用 xxxx 模型...
|
|
|
+✅ 大语言模型响应成功:
|
|
|
+30
|
|
|
+✅ 步骤 2 已完成,结果: 30
|
|
|
|
|
|
--> 正在执行步骤 3/4: 计算周三卖出的苹果数量,即周二数量减去5个
|
|
|
-🧠 正在调用 xxxxxx 模型...
|
|
|
-✅ 步骤 3 已完成,结果: 25个
|
|
|
+-> 正在执行步骤 3/4: 计算周三卖出的苹果数量: 周二数量 - 5 = 30 - 5 = 25个
|
|
|
+🧠 正在调用 xxxx 模型...
|
|
|
+✅ 大语言模型响应成功:
|
|
|
+25
|
|
|
+✅ 步骤 3 已完成,结果: 25
|
|
|
|
|
|
--> 正在执行步骤 4/4: 将这三天卖出的苹果数量相加得到总数
|
|
|
-🧠 正在调用 xxxxxx 模型...
|
|
|
-✅ 步骤 4 已完成,结果: 70个
|
|
|
+-> 正在执行步骤 4/4: 计算三天总销量: 周一 + 周二 + 周三 = 15 + 30 + 25 = 70个
|
|
|
+🧠 正在调用 xxxx 模型...
|
|
|
+✅ 大语言模型响应成功:
|
|
|
+70
|
|
|
+✅ 步骤 4 已完成,结果: 70
|
|
|
|
|
|
--- 任务完成 ---
|
|
|
-最终答案: 70个
|
|
|
+最终答案: 70
|
|
|
````
|
|
|
|
|
|
从上面的输出日志中,我们可以清晰地看到 Plan-and-Solve 范式的工作流程:
|