mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-03 07:43:58 +00:00
feat(sdk+memory): 补 ScenePolicy 声明项,让通道能退出场面识别
缺口(R6):ChannelDef 的记忆声明已有三件套——NoMemory 管「进不进 记忆计算」、ContextPolicy 管「裁不裁上下文」、RecallPolicy 管「召不召回 记忆」,唯独没有「这条输入算不算一场戏的一部分」。现状是无条件参与: situationFeaturesFor 里只要 evt.Source != "" 就产出一个 chan 特征,没有 可关的开关 ⇒ chan:system / chan:kernel / chan:timer 这类纯内部信噪通道 也在撑场面,每次触发都让不相干的场景长出来或变强,召回时又会把 「内核在跑定时器」当成「用户在这类场景下说过的话」取回。 穷举确认不是查漏:go.mod replace 指向 third_party/homeagent-sdk, plugin.go 中 scene 出现 0 次,SDK 自身 git 历史 -S'Scene' -- sdk/ 为空。 SDK(纯追加,老插件行为逐字节不变): - 常量 ScenePolicyAuto / ScenePolicyNone + ValidScenePolicy,形状与 ContextPolicy / RecallPolicy 完全一致 - ChannelDef.ScenePolicy 与 InjectOptions.ScenePolicy,均带 omitempty - 默认取 auto(参与)而非 none:场景只附加检索路、不改记忆本体, 默认关会让存量通道突然失去召回;「关」是少数意图。与 ContextPolicy 刻意相反(同为破坏性操作,那里是默认关)。 内核: - applyInjectOpts 搬运 scene_policy(与另外三个标志位同面) - sceneSuppressed 完全照 recallDeclared 的形状:注入点 payload > 通道定义 > 默认。none 时连时段(part)特征都不产,也不派生场景键 (只停指纹采集而留声明路,等于给这个口子开后门) - situationFeaturesFor / sceneKeysFor 由包级函数改为 Agent 方法 (需要 a.io 查通道定义),23 个调用点同步 判据:scenepolicy_test.go 7 例,改前编译期红(undefined: pubsdk.ScenePolicyAuto),改后全绿。其中两例专门护住「未声明时行为 逐字节不变」,是纯追加承诺的护栏。 记忆 8 包 + agent/core 全绿,8 包齐全、无 FAIL/panic/race。 存量通道标注待定:kernel/timer/offload-*/child/* 是纯 0-refs 信噪, 可直接标 none;但 mc:system(12 refs) 与 system(3 refs) 带真实记忆, 性质不明,不擅自标。
This commit is contained in:
@ -341,7 +341,7 @@ type InjectOptions = pubsdk.InjectOptions
|
||||
// applyInjectOpts 把注入标志位写进事件 payload。
|
||||
//
|
||||
// 只在非零时写:零值与旧 payload 逐字节一致,事件订阅方与旧内核
|
||||
// (不认识这两个键)都不会受影响。
|
||||
// (不认识这些键)都不会受影响。
|
||||
//
|
||||
// 为什么不把标志位当独立参数传到底:eventloop 与各注入路径都按 payload 取字段
|
||||
// (no_memory 本来就是这么走的),payload 是这里唯一已有的携带面。
|
||||
@ -355,6 +355,9 @@ func applyInjectOpts(payload map[string]interface{}, opts InjectOptions) {
|
||||
if opts.RecallPolicy != "" {
|
||||
payload["recall_policy"] = opts.RecallPolicy
|
||||
}
|
||||
if opts.ScenePolicy != "" {
|
||||
payload["scene_policy"] = opts.ScenePolicy
|
||||
}
|
||||
if opts.CleanerName != "" {
|
||||
payload["cleaner_name"] = opts.CleanerName
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user