feat(memory): T1 加保守全局速率限流(防每天数百到上千次调用失控)
主人 2026-10-07 裁定:按最优解加全局限流。 - 新增 t1RateGate(滑动窗口、可注入时钟,~70 行);默认 120 次 / 60 分钟(现网 700-1000 条新记忆/天 ≈ 25-42/小时, 取 120 留约 3-5 倍余量) - 过闸摆在「t1Enabled + 有灰区候选」两个守卫之后、发请求之前 ⇒ 不调模型就不占额度;放行才记账 - 超限语义与既有失败路径同源:跳过 T1、决定仍是 create、零改写, 只多一个 reason=t1_throttled 进留痕 + ReviewStats.T1Throttled 计数 - 配置键 t1PerWindow / t1WindowSec 放 $DATA_DIR/config/memory-tidy.json (零新 env 键,启动期读一次);坏配置回落默认 + WARN,不启动失败 - 每窗口只记一条 WARN(超限是预期行为,一天几百条会淹掉真故障) - IngestRuleVersion 仍为 d3.2:判定规则集与解析契约没变,变的只是 额度状态,reason 列已可分辨(升版会有 §17.6 记过的幂等键重复行副作用) 自研而非复用 session.NewRateLimiter 的理由(design/12 §N C.5 自己登记过 这条取舍):既有件 Allow() 内部写死 time.Now(),没有时钟注入缝, 而本切片必须能注入可控时钟;且复用会把 channel 层概念拖进 memory 包。
This commit is contained in:
1 parent
987cefdf28
commit
a684328b76
10 files changed
+782
-10
No files matched your search
@@ -33,6 +33,11 @@ type ReviewStats struct {
|
||||
// 的差值就是「调了但没用上」(非法回复 / 超时 / 报错回落 create)——
|
||||
// 这个差值本身是可观测信号,因此两个数分开计。
|
||||
T1Decided int
|
||||
// T1Throttled 是**全局限速**命中、因而跳过 T1 的次数(design/23 §15.4,
|
||||
// reason=`t1_throttled`)。它**不**计入 T1Called(一次模型调用都没发),
|
||||
// 也不计入 T1Decided(没定任何结论)——「想调但被闸拦下」是与「调了没用上」
|
||||
// 不同的一件事,分开计才看得出额度是不是成了瓶颈。
|
||||
T1Throttled int
|
||||
}
|
||||
|
||||
// bump 在互斥下修改计数(工作协程、手动 Review 与同步闸都可能调用)。
|
||||
@@ -75,7 +80,7 @@ func (r *PreInsertReviewer) auditWith(verb string, rev IngestReview) {
|
||||
// reviewStatsLabel 把计数渲染成一条稳定日志串。
|
||||
func reviewStatsLabel(s ReviewStats) string {
|
||||
return fmt.Sprintf("reviewed=%d skip=%d merge=%d modify=%d create=%d dropped=%d failed=%d "+
|
||||
"gate_checked=%d gate_absorbed=%d gate_failed=%d t1_called=%d t1_decided=%d",
|
||||
"gate_checked=%d gate_absorbed=%d gate_failed=%d t1_called=%d t1_decided=%d t1_throttled=%d",
|
||||
s.Reviewed, s.Skipped, s.Merged, s.Modified, s.Created, s.Dropped, s.Failed,
|
||||
s.GateChecked, s.GateAbsorbed, s.GateFailed, s.T1Called, s.T1Decided)
|
||||
s.GateChecked, s.GateAbsorbed, s.GateFailed, s.T1Called, s.T1Decided, s.T1Throttled)
|
||||
}
|
||||
Reference in new issue
Block a user