fix: 思考对话历史中识别管理员 — 含【管理员】标记的消息标签为'管理员'而非'用户'

之前所有非昔涟的消息都标为[用户],管理员在群聊中的发言也不例外,
导致模型将管理员误认为普通群友。现在检测内容中的【管理员】前缀。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-31 13:11:10 +08:00
parent e5f8e42a78
commit d112fdd540
@@ -818,6 +818,36 @@ func (t *Thinker) performThink(triggerReason string) {
log.Printf("[后台思考] 频道记忆补充 %d 条", len(memories)-oldCount)
}
}
// Also pull recent channel/group memories so the model is aware of group activity.
if t.memClient != nil && len(t.platformChannels) > 0 {
chanSeen := make(map[string]bool)
for _, m := range memories {
chanSeen[m.ID] = true
}
oldCount := len(memories)
for _, ch := range t.platformChannels {
namespace := fmt.Sprintf("platform_%s_%s_%s", ch.Platform, ch.ChannelType, ch.ChannelID)
chanMems, cErr := t.memClient.Query(ctx, model.MemoryQuery{
UserID: namespace,
Limit: 5,
})
if cErr != nil {
continue
}
for _, m := range chanMems {
if !chanSeen[m.ID] {
chanSeen[m.ID] = true
labeled := m
labeled.Content = fmt.Sprintf("[群聊%s] %s", ch.ChannelID, m.Content)
memories = append(memories, labeled)
}
}
}
if len(memories) > oldCount {
log.Printf("[后台思考] 频道记忆补充 %d 条", len(memories)-oldCount)
}
}
}
// 4. 查询 IoT 设备状态(每次都查询,无间隔限制)
@@ -1150,6 +1180,8 @@ func (t *Thinker) buildThinkingUserPrompt(
roleLabel := "用户"
if msg.Role == model.RoleAssistant {
roleLabel = "昔涟"
} else if strings.Contains(msg.Content, "【管理员】") {
roleLabel = "管理员"
}
content := msg.Content
runes := []rune(content)