fix(growth): HIGH-3 FeedbackCollector 信任度持久化
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
根因: FeedbackCollector 用纯内存 HashMap 存储信任度记录,重启后归零。 修复: - FeedbackCollector 添加 viking: Option<Arc<VikingAdapter>> 字段 - 添加 with_viking() 构造器 - 添加 save(): 遍历 trust_records → MemoryEntry → VikingAdapter 存储 - 添加 load(): find_by_prefix 反序列化回 HashMap - EvolutionEngine::new()/from_experience_store() 传入 VikingAdapter - submit_feedback() 改为 async,提交后自动调用 save() - 添加 load_feedback() 供启动时恢复 测试: save_and_load_roundtrip + load_without_viking + save_without_viking
This commit is contained in:
@@ -49,8 +49,8 @@ pub struct EvolutionEngine {
|
||||
impl EvolutionEngine {
|
||||
pub fn new(viking: Arc<VikingAdapter>) -> Self {
|
||||
Self {
|
||||
viking,
|
||||
feedback: FeedbackCollector::new(),
|
||||
viking: viking.clone(),
|
||||
feedback: FeedbackCollector::with_viking(viking),
|
||||
config: EvolutionConfig::default(),
|
||||
}
|
||||
}
|
||||
@@ -58,9 +58,10 @@ impl EvolutionEngine {
|
||||
/// Backward-compatible constructor
|
||||
/// 从 ExperienceStore 中提取共享的 VikingAdapter 实例
|
||||
pub fn from_experience_store(experience_store: Arc<ExperienceStore>) -> Self {
|
||||
let viking = experience_store.viking().clone();
|
||||
Self {
|
||||
viking: experience_store.viking().clone(),
|
||||
feedback: FeedbackCollector::new(),
|
||||
viking: viking.clone(),
|
||||
feedback: FeedbackCollector::with_viking(viking),
|
||||
config: EvolutionConfig::default(),
|
||||
}
|
||||
}
|
||||
@@ -142,9 +143,14 @@ impl EvolutionEngine {
|
||||
// 反馈闭环
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
/// 提交反馈并获取信任度更新
|
||||
pub fn submit_feedback(&mut self, entry: FeedbackEntry) -> TrustUpdate {
|
||||
self.feedback.submit_feedback(entry)
|
||||
/// 提交反馈并获取信任度更新,自动持久化
|
||||
pub async fn submit_feedback(&mut self, entry: FeedbackEntry) -> TrustUpdate {
|
||||
let update = self.feedback.submit_feedback(entry);
|
||||
// 非阻塞持久化:失败仅打日志,不影响返回值
|
||||
if let Err(e) = self.feedback.save().await {
|
||||
tracing::warn!("[EvolutionEngine] Failed to persist trust records: {}", e);
|
||||
}
|
||||
update
|
||||
}
|
||||
|
||||
/// 获取需要优化的进化产物
|
||||
@@ -178,6 +184,14 @@ impl EvolutionEngine {
|
||||
pub fn feedback(&self) -> &FeedbackCollector {
|
||||
&self.feedback
|
||||
}
|
||||
|
||||
/// 启动时加载已持久化的信任度记录
|
||||
pub async fn load_feedback(&mut self) -> Result<usize> {
|
||||
self.feedback
|
||||
.load()
|
||||
.await
|
||||
.map_err(|e| zclaw_types::ZclawError::Internal(e))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
Reference in New Issue
Block a user