fix(growth): 穷尽审计修复 — tracker timeline 断链 + 文档更新
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
P1-1: tracker.rs record_learning 改为通过 MemoryEntry 存储
(之前用 store_metadata 存但 get_timeline 用 find_by_prefix 读,
两条路径不交叉,timeline 永远返回空)
P2-4: extractor.rs 移除未使用的 _llm_driver 绑定,改为 is_none() 检查
P2-5: lib.rs 模块文档更新,反映实际 17 个模块而非原始 4 个
profile_updater.rs: 添加注释说明只收集 update_field 支持的字段
测试: zclaw-growth 137 tests, zclaw-runtime 87 tests, 0 failures
This commit is contained in:
@@ -5,10 +5,13 @@
|
|||||||
//!
|
//!
|
||||||
//! # Architecture
|
//! # Architecture
|
||||||
//!
|
//!
|
||||||
//! The growth system consists of four main components:
|
//! The growth system consists of several subsystems:
|
||||||
|
//!
|
||||||
|
//! ## Memory Pipeline (L0-L2)
|
||||||
//!
|
//!
|
||||||
//! 1. **MemoryExtractor** (`extractor`) - Analyzes conversations and extracts
|
//! 1. **MemoryExtractor** (`extractor`) - Analyzes conversations and extracts
|
||||||
//! preferences, knowledge, and experience using LLM.
|
//! preferences, knowledge, and experience using LLM. Supports combined extraction
|
||||||
|
//! (single LLM call for memories + experiences + profile signals).
|
||||||
//!
|
//!
|
||||||
//! 2. **MemoryRetriever** (`retriever`) - Performs semantic search over
|
//! 2. **MemoryRetriever** (`retriever`) - Performs semantic search over
|
||||||
//! stored memories to find contextually relevant information.
|
//! stored memories to find contextually relevant information.
|
||||||
@@ -19,6 +22,28 @@
|
|||||||
//! 4. **GrowthTracker** (`tracker`) - Tracks growth metrics and evolution
|
//! 4. **GrowthTracker** (`tracker`) - Tracks growth metrics and evolution
|
||||||
//! over time.
|
//! over time.
|
||||||
//!
|
//!
|
||||||
|
//! ## Evolution Engine (L1-L3)
|
||||||
|
//!
|
||||||
|
//! 5. **ExperienceStore** (`experience_store`) - FTS5-backed structured experience storage.
|
||||||
|
//!
|
||||||
|
//! 6. **PatternAggregator** (`pattern_aggregator`) - Collects high-frequency patterns for L2.
|
||||||
|
//!
|
||||||
|
//! 7. **SkillGenerator** (`skill_generator`) - LLM-driven SKILL.md content generation.
|
||||||
|
//!
|
||||||
|
//! 8. **QualityGate** (`quality_gate`) - Validates candidate skills (confidence, conflicts).
|
||||||
|
//!
|
||||||
|
//! 9. **EvolutionEngine** (`evolution_engine`) - Orchestrates L1/L2/L3 evolution phases.
|
||||||
|
//!
|
||||||
|
//! 10. **WorkflowComposer** (`workflow_composer`) - Extracts tool chain patterns for Pipeline YAML.
|
||||||
|
//!
|
||||||
|
//! 11. **FeedbackCollector** (`feedback_collector`) - Trust score management with decay.
|
||||||
|
//!
|
||||||
|
//! ## Support Modules
|
||||||
|
//!
|
||||||
|
//! 12. **VikingAdapter** (`viking_adapter`) - Storage abstraction (in-memory + SQLite backends).
|
||||||
|
//! 13. **Summarizer** (`summarizer`) - L0/L1 summary generation.
|
||||||
|
//! 14. **JsonUtils** (`json_utils`) - Shared JSON parsing utilities.
|
||||||
|
//!
|
||||||
//! # Storage
|
//! # Storage
|
||||||
//!
|
//!
|
||||||
//! All memories are stored in OpenViking with a URI structure:
|
//! All memories are stored in OpenViking with a URI structure:
|
||||||
|
|||||||
@@ -23,6 +23,10 @@ impl UserProfileUpdater {
|
|||||||
|
|
||||||
/// 从提取结果中收集需要更新的画像字段
|
/// 从提取结果中收集需要更新的画像字段
|
||||||
/// 返回 (field, value) 列表,由调用方负责实际的异步写入
|
/// 返回 (field, value) 列表,由调用方负责实际的异步写入
|
||||||
|
///
|
||||||
|
/// 注意:只收集 UserProfileStore::update_field() 支持的字段。
|
||||||
|
/// ProfileSignals 中的 recent_topic / pain_point / preferred_tool
|
||||||
|
/// 需要 update_field 扩展后才能写入,当前跳过。
|
||||||
pub fn collect_updates(
|
pub fn collect_updates(
|
||||||
&self,
|
&self,
|
||||||
extraction: &CombinedExtraction,
|
extraction: &CombinedExtraction,
|
||||||
|
|||||||
@@ -66,21 +66,30 @@ impl GrowthTracker {
|
|||||||
timestamp: Utc::now(),
|
timestamp: Utc::now(),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Store learning event
|
// Store learning event as MemoryEntry so get_timeline can find it via find_by_prefix
|
||||||
self.viking
|
let event_uri = format!("agent://{}/events/{}", agent_id, session_id);
|
||||||
.store_metadata(
|
let content = serde_json::to_string(&event)?;
|
||||||
&format!("agent://{}/events/{}", agent_id, session_id),
|
let entry = crate::types::MemoryEntry {
|
||||||
&event,
|
uri: event_uri,
|
||||||
)
|
memory_type: MemoryType::Session,
|
||||||
.await?;
|
content,
|
||||||
|
keywords: vec![agent_id.to_string(), session_id.to_string()],
|
||||||
|
importance: 5,
|
||||||
|
access_count: 0,
|
||||||
|
created_at: event.timestamp,
|
||||||
|
last_accessed: event.timestamp,
|
||||||
|
overview: None,
|
||||||
|
abstract_summary: None,
|
||||||
|
};
|
||||||
|
self.viking.store(&entry).await?;
|
||||||
|
|
||||||
// Update last learning time
|
// Update last learning time via metadata
|
||||||
self.viking
|
self.viking
|
||||||
.store_metadata(
|
.store_metadata(
|
||||||
&format!("agent://{}", agent_id),
|
&format!("agent://{}", agent_id),
|
||||||
&AgentMetadata {
|
&AgentMetadata {
|
||||||
last_learning_time: Some(Utc::now()),
|
last_learning_time: Some(Utc::now()),
|
||||||
total_learning_events: None, // Will be computed
|
total_learning_events: None,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|||||||
Reference in New Issue
Block a user