feat(memory): 实现知识图谱与双通道检索
- 新增 KnowledgeGraph trait + InMemoryGraph(BFS 图遍历 + 标签管理) - 扩展 MemoryRetriever 为双通道检索(Hybrid/KnowledgeOnly/GraphOnly) - 统一 RetrievalResult 为 RetrievalItem enum 变体 - GraphRelation 使用复合键 + composite_key() 派生 id - 旧 ScoredItem 标注 #[deprecated] - 新增 knowledge_graph_demo 示例 - 全量测试 427 passed,clippy/doc 0 警告
This commit is contained in:
@@ -74,8 +74,15 @@ async fn main() {
|
||||
let result = retriever.retrieve("Rust 异步").await.unwrap();
|
||||
println!("query: {}", result.query);
|
||||
for item in &result.items {
|
||||
println!(" 命中: {} (score={:.3})", item.page.title, item.score);
|
||||
assert!((0.0..=1.0).contains(&item.score), "score 应在 [0, 1] 区间");
|
||||
match item {
|
||||
agcore::memory::RetrievalItem::KnowledgePage { page, score } => {
|
||||
println!(" 命中: {} (score={:.3})", page.title, score);
|
||||
assert!((0.0..=1.0).contains(score), "score 应在 [0, 1] 区间");
|
||||
}
|
||||
agcore::memory::RetrievalItem::GraphEntity { entity, score, .. } => {
|
||||
println!(" 命中实体: {} (score={:.3})", entity.name, score);
|
||||
}
|
||||
}
|
||||
}
|
||||
assert!(!result.items.is_empty(), "应至少命中一个页面");
|
||||
|
||||
@@ -89,6 +96,7 @@ async fn main() {
|
||||
let cfg = RetrieverConfig {
|
||||
max_results: 20,
|
||||
min_score: 0.5,
|
||||
graph_depth: 2,
|
||||
};
|
||||
let retriever2 = MemoryRetriever::new(ks2, cfg);
|
||||
let result = retriever2.retrieve("完全不相关的火锅配方").await.unwrap();
|
||||
@@ -111,6 +119,7 @@ async fn main() {
|
||||
let cfg = RetrieverConfig {
|
||||
max_results: 2,
|
||||
min_score: 0.0,
|
||||
graph_depth: 2,
|
||||
};
|
||||
let retriever3 = MemoryRetriever::new(ks3, cfg);
|
||||
let result = retriever3.retrieve("Rust").await.unwrap();
|
||||
|
||||
Reference in New Issue
Block a user