feat(backthink): 自主思考 P2——结构化推送决策+渠道选择(design/20)
- proactive.go(新): parseProactive 从结论解析 [我决定:push|no_push][渠道:...]<正文>;
兼容大小写/全半角冒号; 无标记回退(无/nothing=不推); 畸形/孤标记 fail-safe 不推
- context.go: guidancePrompt 引导结构化结尾+保留P1温暖引导
- push.go: PushRequest{Message,ChannelHint}; Pusher.Push 路由(auto→active优先/IM兜底,
web→仅active, im→仅IM, 具体平台→IM+platform打标+缺IM回退默认记detail); buildProactiveMessage
- backthink.go: think() 用 parseProactive→ShouldPush=push&&disturbAllowed(不再被tr.Import卡死)
- decide.go: disturbAllowed(asleep/working/quiet 硬性不打扰门) 取代旧import门(保留旧Decide兼容)
- 测试: parseProactive 6组+think端到端(真实pusher:kook→IM/无标记→active/no_push→不推/睡眠→门拦截)
+buildProactiveMessage+具体平台无IM回退; 后端 build/vet/test 全绿
- 注: 生产 Active/IM sink 未注入 wire.go backthink.Deps(另一步); 多平台IM受单IMAdapter接口限制
This commit is contained in:
1 parent
93aff2fea5
commit
2283383b9e
8 files changed
+688
-47
No files matched your search
@@ -84,6 +84,12 @@ func thinkInput(recent []model.Message, trigger string) []model.Message {
|
||||
// never on this prompt text (red line); the prompt only describes the running
|
||||
// environment (memories readable/writable, tools callable) that the env already
|
||||
// grants.
|
||||
//
|
||||
// The prompt asks for a compact structured closing — a push/no_push decision, an
|
||||
// optional target channel and the message body — so the service can honor her own
|
||||
// judgment instead of gating on the trigger's importance (design/20 §2 P2). The
|
||||
// format is guidance, not a contract: parseProactive fails safe when she omits or
|
||||
// mangles it.
|
||||
func guidancePrompt(trigger string) string {
|
||||
return "[自主思考 · 无人在旁]\n" +
|
||||
"触发:" + trigger + "\n" +
|
||||
@@ -91,5 +97,9 @@ func guidancePrompt(trigger string) string {
|
||||
"请回顾最近与主人的相处、她的状态、你们共同经历的事与临近的日程,判断此刻是否有一件真正值得主动告诉她的、温暖而有针对性的事情——" +
|
||||
"比如关心她的近况、记起她曾说过的某件事、提醒一件即将到来的日程、见证一个属于你们的共同时刻,或注意到某个值得留意的变化。\n" +
|
||||
"若有,就用温暖自然的语气,用一到两句把它说出来——这正是你此刻最想对她说的话;若确实没有值得说的,只需回复「无」,也不要编造。\n" +
|
||||
"请把「是否主动说」与「发到哪个渠道」写成一个简短、格式固定的结尾,解析规则如下:\n" +
|
||||
"[我决定:push] 或 [我决定:no_push]\n" +
|
||||
"[渠道:web|im|kook|telegram|...|auto](可省略,auto/省略即交给默认:优先网页端、IM 兜底)\n" +
|
||||
"上面两行之后,紧接你想说的话作为正文。\n" +
|
||||
"整轮思考保持简短、单轮,不反复自我触发。"
|
||||
}
|
||||
Reference in new issue
Block a user