diff --git a/src/gateway/memory_maintenance.rs b/src/gateway/memory_maintenance.rs index e516d2c..4eaa223 100644 --- a/src/gateway/memory_maintenance.rs +++ b/src/gateway/memory_maintenance.rs @@ -132,6 +132,18 @@ impl MemoryMaintenanceService { return Ok(None); } + // 记忆数量不足最小保留数时,无需整理,直接跳过 + // 避免浪费 LLM token 并触发无意义的 "保留数不足" 错误 + if memories.len() < self.maintenance_config.min_memories_to_keep { + tracing::info!( + scope_key = %scope_key, + count = memories.len(), + min_required = self.maintenance_config.min_memories_to_keep, + "Skipping scope: not enough memories to organize" + ); + return Ok(None); + } + Ok(Some(build_memory_maintenance_plan(&memories))) } @@ -619,6 +631,9 @@ pub(crate) fn is_recoverable_maintenance_llm_error(error: &str) -> bool { || normalized.contains("stream timeout") || normalized.contains("timed out") || normalized.contains("timeout") + // 验证拒绝 — 记忆太少,跳过本次 scope 即可,不应视为作业失败 + || error.contains("保留数不足") + || error.contains("合并比例超限") } fn is_recoverable_maintenance_scope_error(error: &AgentError) -> bool {