mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-06 09:17:31 +00:00
fix(memory): 中断的取件样板不再写入 L1(颗粒度=单条消息)
用户口径(反复强调):进记忆的禁忌是**中断消息本身**,不是整轮。 此前 finishInputTask 无条件把 CleanInput 写进事件,而中断轮的 CleanInput 是 "来自「X」的私聊消息(message_id=…) 先用 qq_get_message 取正文…" 这类样板: 每轮一字不差堆进 L1,真实对话内容只能靠工具回执碎片体现 —— 实测用户回一句 "233719",模型反问"那串数字什么意思"(指代消解失效)。 改法:只清样板,不清内容。 - isInjectionBoilerplate 识别插件取件指令("来自「…」…message_id=" 或 "先用…取正文"), 命中则 Input 置空; - 本轮的工具回执(qq_get_message 正文,NoMemory=false)、agent 回复照常入库; - 内核中断正文不清空:测试 D1=B 要求「中断任务的上下文加载回被抢占任务之上」。 判据:internal/agent/core/interrupt_input_memory_test.go(样板被清、内核中断保留、 普通输入不受影响、回执与回复保留)
This commit is contained in:
@ -410,6 +410,15 @@ func (c *RelevanceContext) Save() error {
|
||||
// (另一处 InsertByTimestamp 同样处理)。所以明文拦截放在这里,
|
||||
// 而不是在每个调用点 —— 逐个补必漏(实测踩到:只拦了 f.Msgs,
|
||||
// 而 f.CleanInput / f.ToolResults / f.Response 都是独立副本)。
|
||||
// snapshotEvents 返回当前事件的浅拷贝(判据/诊断用;调用方不得修改元素)。
|
||||
func (c *RelevanceContext) snapshotEvents() []*ContextEvent {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
out := make([]*ContextEvent, len(c.events))
|
||||
copy(out, c.events)
|
||||
return out
|
||||
}
|
||||
|
||||
func (c *RelevanceContext) Append(evt ContextEvent) {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
|
||||
Reference in New Issue
Block a user