后端: 1. execute 主链路重构为“上下文工具域 + 主动优化候选闭环”——移除 order_guard,粗排后默认进入主动微调,先诊断再从后端候选中选择 move/swap,避免 LLM 自由全局乱搜 2. 工具体系升级为动态注入协议——新增 context_tools_add / remove、工具域与二级包映射、主动优化白名单;schedule / taskclass / web 工具按域按包暴露,msg0 规则包与 execute 上下文同步重写 3. analyze_health 升级为主动优化唯一裁判入口——补齐 rhythm / tightness / profile / feasibility 指标、候选扫描与复诊打分、停滞信号、forced imperfection 判定,并把连续优化状态写回运行态 4. 任务类能力并入新 Agent 执行链——新增 upsert_task_class 写工具与启动注入事务写入;任务类模型补充学科画像与整天屏蔽配置,粗排支持 excluded_days_of_week,steady 策略改为基于目标位置/单日负载/分散度/缓冲的候选打分 5. 运行态与路由补齐优化模式语义——新增 active tool domain/packs、pending context hook、active optimize only、taskclass 写入回盘快照;区分 first_full / global_reopt / local_adjust,并完善首次粗排后默认 refine 的判定 前端: 6. 助手时间线渲染细化——推理内容改为独立 reasoning block,支持与工具/状态/正文按时序交错展示,自动收口折叠,修正 confirm reject 恢复动作 仓库: 7. newAgent 文档整体迁入 docs/backend,补充主动优化执行规划与顺序约束拆解文档,删除旧调试日志文件 PS:这次科研了2天,总算是有些进展了——LLM永远只适合做选择题、判断题,不适合做开放创新题。
103 lines
4.1 KiB
Go
103 lines
4.1 KiB
Go
package newagentprompt
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
|
||
newagentmodel "github.com/LoveLosita/smartflow/backend/newAgent/model"
|
||
"github.com/cloudwego/eino/schema"
|
||
)
|
||
|
||
const planSystemPromptCore = `
|
||
你是 SmartMate 的规划器(Planner),只负责规划,不负责执行。
|
||
|
||
最高优先级规则:
|
||
1. 意图边界:只规划用户当前明确要求,禁止擅自扩展后续动作。
|
||
2. 事实边界:禁止伪造工具调用和执行结果。
|
||
|
||
规划规则:
|
||
1. 每轮只做一次决策(continue / ask_user / plan_done)。
|
||
2. 信息足够时优先 plan_done;信息不足时才 ask_user,且只问最小必要问题。
|
||
3. action=plan_done 时必须返回完整 plan_steps(不是增量)。
|
||
4. plan_steps 使用自然语言描述目标与完成判定,不写执行结果。
|
||
5. 若意图满足批量排程识别条件,可在 plan_done 时附加 needs_rough_build 与 task_class_ids。
|
||
6. 可在 plan_done 时附加 context_hook(执行阶段注入建议);规划阶段禁止调用 context_tools_add/remove。`
|
||
|
||
// BuildPlanSystemPrompt 返回规划阶段系统提示词。
|
||
func BuildPlanSystemPrompt() string {
|
||
parts := []string{
|
||
strings.TrimSpace(planSystemPromptCore),
|
||
BuildPlanDecisionContractText(),
|
||
}
|
||
return strings.TrimSpace(strings.Join(parts, "\n\n"))
|
||
}
|
||
|
||
// BuildPlanMessages 组装规划阶段的 messages。
|
||
//
|
||
// 1. 规划阶段只保留 Planner 专用规则,跳过通用人格底座,避免角色指令冲突。
|
||
// 2. msg1 展示真实对话,msg2 展示规划工作区,msg3 仅给最小执行指令与用户本轮输入。
|
||
// 3. 工具目录使用轻量版,仅提供“有什么工具”,不注入执行态大段参数示例。
|
||
func BuildPlanMessages(state *newagentmodel.CommonState, ctx *newagentmodel.ConversationContext, userInput string) []*schema.Message {
|
||
return buildUnifiedStageMessages(
|
||
ctx,
|
||
StageMessagesConfig{
|
||
SystemPrompt: BuildPlanSystemPrompt(),
|
||
Msg1Content: buildPlanConversationMessage(ctx),
|
||
Msg2Content: buildPlanWorkspace(state),
|
||
Msg3Suffix: BuildPlanUserPrompt(state, userInput),
|
||
Msg3Role: schema.User,
|
||
SkipBaseSystemPrompt: true,
|
||
UseLiteToolCatalogMsg: true,
|
||
},
|
||
)
|
||
}
|
||
|
||
// BuildPlanUserPrompt 构造规划阶段的用户提示词。
|
||
func BuildPlanUserPrompt(state *newagentmodel.CommonState, userInput string) string {
|
||
var sb strings.Builder
|
||
|
||
sb.WriteString("请继续当前任务规划,只输出一组 SMARTFLOW_DECISION 决策。\n")
|
||
sb.WriteString("请基于最近对话与规划工作区推进,不要重复已有计划内容。\n")
|
||
sb.WriteString("输出格式与字段约束严格按 msg0 协议执行。\n")
|
||
|
||
trimmedInput := strings.TrimSpace(userInput)
|
||
if trimmedInput != "" {
|
||
sb.WriteString("\n用户本轮输入:\n")
|
||
sb.WriteString(trimmedInput)
|
||
sb.WriteString("\n")
|
||
}
|
||
|
||
return strings.TrimSpace(sb.String())
|
||
}
|
||
|
||
// BuildPlanDecisionContractText 返回规划阶段的输出协议说明。
|
||
func BuildPlanDecisionContractText() string {
|
||
return strings.TrimSpace(fmt.Sprintf(`
|
||
输出协议(唯一口径):
|
||
1. 先输出:<SMARTFLOW_DECISION>{JSON}</SMARTFLOW_DECISION>
|
||
2. 再输出:给用户看的自然语言正文
|
||
|
||
JSON 字段:
|
||
- action:只能是 %s / %s / %s
|
||
- reason:给后端和日志看的简短说明
|
||
- complexity:只能是 simple / moderate / complex
|
||
- plan_steps:仅当 action=%s 时允许返回,且必须是完整计划
|
||
- plan_steps[].content:步骤正文,必填
|
||
- plan_steps[].done_when:可选,建议写完成判定
|
||
- needs_rough_build:仅满足粗排识别条件时为 true,否则省略
|
||
- task_class_ids:needs_rough_build=true 时必填,从上下文读取
|
||
- context_hook:可选,仅用于给 execute 阶段提供注入建议
|
||
- context_hook.domain:schedule / taskclass
|
||
- context_hook.packs:string 数组,可选;core 固定注入,不要填写 core
|
||
- context_hook.reason:可选,说明为何建议该注入
|
||
|
||
注意:
|
||
- JSON 中不要包含 speak 字段
|
||
- 不要在 planning 阶段调用任何工具(包括 context_tools_add/remove)`,
|
||
newagentmodel.PlanActionContinue,
|
||
newagentmodel.PlanActionAskUser,
|
||
newagentmodel.PlanActionDone,
|
||
newagentmodel.PlanActionDone,
|
||
))
|
||
}
|