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()) }