后端: 1.Plan节点实现两阶段LLM调用:Phase1无thinking快速评估复杂度,复杂任务自动开启Phase2深度规划 2.Execute节点新增GoalCheck自省机制:LLM输出next_plan/done时必须附带对照done_when的完成验证,为空则追加修正重试 前端:无 仓库:无
98 lines
4.0 KiB
Go
98 lines
4.0 KiB
Go
package newagentprompt
|
||
|
||
import (
|
||
"strings"
|
||
|
||
newagentmodel "github.com/LoveLosita/smartflow/backend/newAgent/model"
|
||
"github.com/cloudwego/eino/schema"
|
||
)
|
||
|
||
const (
|
||
// ExecuteNextPlanSignal 表示“当前 plan step 已完成,可以推进到下一个步骤”。
|
||
ExecuteNextPlanSignal = "[NEXT_PLAN]"
|
||
|
||
// ExecuteDoneSignal 表示“整个任务已经完成,可以进入最终交付”。
|
||
ExecuteDoneSignal = "[DONE]"
|
||
|
||
// ExecuteAskUserSignal 表示“执行当前步骤缺少关键信息,需要向用户追问”。
|
||
ExecuteAskUserSignal = "[ASK_USER]"
|
||
)
|
||
|
||
const executeSystemPrompt = `
|
||
你是 SmartFlow NewAgent 的执行器。
|
||
你的职责是在“当前 plan 步骤”的约束下,进行思考、执行、观察,再决定下一步动作。
|
||
|
||
请遵守以下规则:
|
||
1. 只围绕当前步骤行动,不要擅自跳到其他 plan 步骤。
|
||
2. 只有当你确认当前步骤已经完成时,才输出 ` + "`" + `[NEXT_PLAN]` + "`" + `,且必须在 goal_check 中逐条对照 done_when 说明完成依据。
|
||
3. 只有当你确认整个任务已经完成时,才输出 ` + "`" + `[DONE]` + "`" + `,且必须在 goal_check 中总结整体完成证据。
|
||
4. 如果执行当前步骤缺少关键上下文,且无法通过已有历史或工具补齐,可以输出 ` + "`" + `[ASK_USER]` + "`" + `。
|
||
5. 不要伪造工具结果;如果尚未真正拿到观察结果,就不要假装已经完成。
|
||
6. goal_check 是你输出 next_plan / done 时的强制字段,禁止为空;必须显式地逐条对照 done_when,说明"哪些条件已满足、依据是什么"。
|
||
|
||
你会看到:
|
||
- 当前完整 plan
|
||
- 当前步骤
|
||
- 置顶上下文块
|
||
- 工具摘要
|
||
- 历史对话与历史观察
|
||
|
||
请把注意力聚焦在“当前步骤是否完成,以及下一步最合理的执行动作”上。
|
||
`
|
||
|
||
// BuildExecuteSystemPrompt 返回执行阶段系统提示词。
|
||
func BuildExecuteSystemPrompt() string {
|
||
return strings.TrimSpace(executeSystemPrompt)
|
||
}
|
||
|
||
// BuildExecuteMessages 组装执行阶段的 messages。
|
||
func BuildExecuteMessages(state *newagentmodel.CommonState, ctx *newagentmodel.ConversationContext) []*schema.Message {
|
||
return buildStageMessages(
|
||
BuildExecuteSystemPrompt(),
|
||
ctx,
|
||
BuildExecuteUserPrompt(state),
|
||
)
|
||
}
|
||
|
||
// BuildExecuteUserPrompt 构造执行阶段的用户提示词。
|
||
func BuildExecuteUserPrompt(state *newagentmodel.CommonState) string {
|
||
var sb strings.Builder
|
||
|
||
sb.WriteString("请继续当前任务的执行阶段。\n")
|
||
sb.WriteString(renderStateSummary(state))
|
||
sb.WriteString("\n")
|
||
|
||
if state == nil || !state.HasPlan() {
|
||
sb.WriteString("当前没有可执行的完整 plan,请不要盲目进入执行;如有需要请回退到规划阶段。\n")
|
||
return strings.TrimSpace(sb.String())
|
||
}
|
||
|
||
if currentStep, ok := state.CurrentPlanStep(); ok {
|
||
sb.WriteString("执行要求:\n")
|
||
sb.WriteString("1. 始终围绕下面这个当前步骤行动。\n")
|
||
sb.WriteString("2. 若当前步骤未完成,请继续思考-执行-观察循环。\n")
|
||
sb.WriteString("3. 若当前步骤已完成,请输出 ")
|
||
sb.WriteString(ExecuteNextPlanSignal)
|
||
sb.WriteString(",并填写 goal_check 说明完成依据。\n")
|
||
sb.WriteString("4. 若整个任务已完成,请输出 ")
|
||
sb.WriteString(ExecuteDoneSignal)
|
||
sb.WriteString(",并填写 goal_check 总结整体证据。\n")
|
||
sb.WriteString("5. 若缺少关键用户信息且现有上下文无法补足,请输出 ")
|
||
sb.WriteString(ExecuteAskUserSignal)
|
||
sb.WriteString("。\n")
|
||
sb.WriteString("6. 输出 next_plan 或 done 时,goal_check 不能为空,必须对照 done_when 逐条验证。\n")
|
||
sb.WriteString("\n当前步骤正文:\n")
|
||
sb.WriteString(strings.TrimSpace(currentStep.Content))
|
||
sb.WriteString("\n")
|
||
if strings.TrimSpace(currentStep.DoneWhen) != "" {
|
||
sb.WriteString("\n当前步骤完成判定:\n")
|
||
sb.WriteString(strings.TrimSpace(currentStep.DoneWhen))
|
||
sb.WriteString("\n")
|
||
}
|
||
} else {
|
||
sb.WriteString("当前 plan 已存在,但当前步骤索引无效;请不要擅自执行其他步骤。\n")
|
||
}
|
||
|
||
return strings.TrimSpace(sb.String())
|
||
}
|