Files
smartmate/backend/newAgent/prompt/execute.go
Losita 64b946816f Version: 0.8.7.dev.260402
后端:
  1.Plan节点实现两阶段LLM调用:Phase1无thinking快速评估复杂度,复杂任务自动开启Phase2深度规划
  2.Execute节点新增GoalCheck自省机制:LLM输出next_plan/done时必须附带对照done_when的完成验证,为空则追加修正重试
前端:无
仓库:无
2026-04-02 22:56:06 +08:00

98 lines
4.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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())
}