feat(memory): T1 灰区模型判定 —— D3 入库前审查补上 LLM 那一半
主人 2026-10-07 裁定「可以做 T1」。此前 D3 只有纯规则 T0,凡灰区(相似但 互不包含)一律保守 create,真机上「同一事实换措辞」类重复结构性治不住 (清完 92 条字面级重复后,active 里含「喵喵七号」的仍有 101 条)。 - 插入点:T0 判定内核只多吐一份结构化 Gray(惰性收集,恒零模型调用); T1 挂在异步审查层 Review,同步入库闸不碰它 ⇒ 写入路径零模型调用是 **数据流结构**而不是承诺 - 只许回 merge / modify / keep + 一句理由;坏 JSON、非法枚举、编号越界 一律回落 create(绝不猜、绝不挑最近的一条) - 禁产新内容:模型只给「动作 + 候选编号 + 一句理由」,正文一律取自库里 既有的两行 ⇒ T1 结构性地不可能把幻觉写进记忆库 - 不越硬门与红线:灰区已滤掉跨角色/作用域/项目/只读来源与时效/数值/冲突/ 低置信;「规则否决一票否决」不可走样,T1 不提供翻案入口 - 有界:每次审查至多一次调用(灰区打包,上限 8 条),子超时 8s 且不超过 审查总预算;失败只改 reason、决定恒 create、零 UPDATE - 开关 t1Judge(放 $DATA_DIR/config/memory-tidy.json,零新 env 键),默认开; 模型出口用闭包晚绑定既有模型栈(零新客户端、零新依赖) - 留痕 reason 结构化(t1_merge / t1_modify / t1_keep / t1_reply_invalid / t1_unavailable),rule_version d3.1 → d3.2;模型的自由文本理由一律丢弃 - preinsert_config.go 为纯搬移(为守 500 行上限,无新逻辑)
This commit is contained in:
1 parent
5b8c7a3ef3
commit
1b4d0a552f
11 files changed
+1233
-91
No files matched your search
@@ -13,6 +13,10 @@
|
||||
// 开关,必须能一键回到「只插不审」,而 `.env` 已冻结 ⇒ 它落在同一个文件里,
|
||||
// 不新开文件家族、不加 env 键。
|
||||
//
|
||||
// 2026-10-07 再追加 `t1Judge`(T1 灰区模型判定,design/23 §15.1 D3-2):理由仍然
|
||||
// 是同一条 —— 它是一处**会花掉模型额度**的开关,必须能一行配置关掉(关掉即回落
|
||||
// 纯规则、零模型调用),所以同样落在这里,不新开文件家族、不加 env 键。
|
||||
//
|
||||
// 边界与 backthink.go 同源(那是同一族的手续):
|
||||
//
|
||||
// 1. 本文件只管**文件形状 + 读取**:它不认识 `TidyConfig`,也不认识「零值回落
|
||||
@@ -54,9 +58,9 @@ var ErrInvalidMemoryTidy = errors.New("runtimeconfig: invalid memory tidy config
|
||||
|
||||
// MemoryTidyTuning 是 `memory-tidy.json` 的形状:记忆模块运行期的旋钮。
|
||||
// 文件以「整理」命名,但它是**记忆模块运行期调优的同一处落点**(整理自动档 +
|
||||
// 入库闸),不再为一个开关新开一个文件家族。
|
||||
// 入库闸 + T1 灰区判定),不再为一个开关新开一个文件家族。
|
||||
//
|
||||
// AutoApply / IngestGate 用**指针**是刻意的:它们的代码默认值都是「开」,而
|
||||
// AutoApply / IngestGate / T1Judge 用**指针**是刻意的:它们的代码默认值都是「开」,而
|
||||
// JSON 的 `bool` 零值也是 false —— 用 bool 会让「这个键没写」与「显式写
|
||||
// false」不可区分,于是任何只写上限的文件都会**静默把开关关掉**。指针让
|
||||
// 「没写」= nil = 不覆盖默认。
|
||||
@@ -73,6 +77,16 @@ type MemoryTidyTuning struct {
|
||||
// 2026-10-07 裁定)。nil = 没配(用代码默认值:开);false = 一键回到
|
||||
// 「只插不审」(= 改动之前的异步行为);true = 显式开(与默认同义)。
|
||||
IngestGate *bool `json:"ingestGate"`
|
||||
// T1Judge 控制 **T1 灰区模型判定**(design/23 §15.1 D3-2:灰区 —— 相似
|
||||
// 但互不包含 —— 调一次轻量模型,只许回 `merge`/`modify`/`keep` + 理由、
|
||||
// **禁产新内容**)。nil = 没配(用代码默认值:开);false = 一键回到纯规则
|
||||
// (**零模型调用**,灰区仍然保守回落新建);true = 显式开(与默认同义)。
|
||||
//
|
||||
// 2026-10-07 追加,与 IngestGate 同一个文件、同一个理由:它是一处**会花掉
|
||||
// 模型额度**的开关,必须能一行配置关掉,而 `.env` 已冻结(零新 env 键)。
|
||||
// 指针也是同一个理由:代码默认值是「开」,用 bool 会让「这个键没写」与
|
||||
// 「显式写 false」不可区分。
|
||||
T1Judge *bool `json:"t1Judge"`
|
||||
}
|
||||
|
||||
// AutoApplyOff 报告自动档是否被这份配置**显式关掉**。nil(没配)返回 false ——
|
||||
@@ -87,6 +101,12 @@ func (t MemoryTidyTuning) IngestGateOff() bool {
|
||||
return t.IngestGate != nil && !*t.IngestGate
|
||||
}
|
||||
|
||||
// T1JudgeOff 报告 **T1 灰区模型判定**是否被这份配置显式关掉(口径同 AutoApplyOff:
|
||||
// nil 是「没配」⇒ 用代码默认的「开」,不是「关」)。
|
||||
func (t MemoryTidyTuning) T1JudgeOff() bool {
|
||||
return t.T1Judge != nil && !*t.T1Judge
|
||||
}
|
||||
|
||||
// DefaultMemoryTidyPath 返回记忆整理调优的落点:`$DATA_DIR/config/memory-tidy.json`。
|
||||
func DefaultMemoryTidyPath(dataDir string) string {
|
||||
return filepath.Join(dataDir, memoryTidyConfigSubdir, memoryTidyFileName)
|
||||
|
||||
Reference in new issue
Block a user