ai00_mem/lib.rs
1//! # AI00-Mem: 智能记忆系统
2//!
3//! AI00-Mem是一个为个人AI助手设计的智能记忆系统,基于A-Mem和HippoRAG论文的研究成果。
4//! 该系统提供动态记忆组织、神经生物学启发的检索机制和持续学习能力。
5//!
6//! ## 核心特性
7//!
8//! - **动态记忆组织**: 基于Zettelkasten方法的原子化记忆管理
9//! - **智能检索**: HippoRAG风格的个性化PageRank检索算法
10//! - **记忆演化**: 自适应的记忆重要性调整和连接更新
11//! - **多模式存储**: 向量数据库和图数据库的混合存储
12//! - **持续学习**: 基于用户反馈的个性化适应机制
13//!
14//! ## 快速开始
15//!
16//! ```rust
17//! use ai00_mem::prelude::*;
18//! use ai00_mem::config::Config;
19//! use tokio;
20//!
21//! #[tokio::main]
22//! async fn main() -> ai00_mem::Result<()> {
23//! // 创建配置
24//! let mut config = Config::default();
25//! config.database.url = "sqlite::memory:".to_string();
26//!
27//! // 创建数据库和记忆管理器
28//! let db = std::sync::Arc::new(VectorGraphDB::new(config.clone()).await?);
29//! let memory_manager = MemoryManager::new(db.clone(), config.clone()).await?;
30//!
31//! // 创建记忆
32//! let attributes = MemoryAttributes {
33//! keywords: vec!["机器学习".to_string(), "AI".to_string()],
34//! tags: vec!["学习".to_string()],
35//! importance: 0.8,
36//! ..Default::default()
37//! };
38//! let content = "用户询问了关于机器学习的基础概念".to_string();
39//! let embedding = memory_manager.generate_embedding(&content).await?;
40//! let memory = Memory::new(content, MemoryType::Knowledge, embedding, attributes);
41//!
42//! memory_manager.create_memory(&memory).await?;
43//!
44//! // 检索记忆
45//! let query = Query {
46//! text: "机器学习".to_string(),
47//! query_type: QueryType::Semantic,
48//! filters: QueryFilters::default(),
49//! limit: Some(5),
50//! offset: None,
51//! sort_by: None,
52//! weights: QueryWeights::default(),
53//! };
54//!
55//! let context = Context::default();
56//! let results = memory_manager.retrieve_memories(&query, &context).await?;
57//! println!("找到 {} 条相关记忆", results.len());
58//!
59//! Ok(())
60//! }
61//! ```
62//!
63//! ## 模块结构
64//!
65//! - `core`: 核心数据结构和类型定义
66//! - `storage`: 存储层实现,包括向量数据库和图数据库
67//! - `memory`: 记忆管理模块,包括创建、链接和演化
68//! - `retrieval`: 检索引擎,支持多种检索策略
69//! - `learning`: 学习模块,实现持续学习和适应
70//! - `utils`: 工具函数和辅助模块
71//! - `examples`: 使用示例和演示代码
72//!
73//! ## 配置
74//!
75//! 系统支持通过配置文件或环境变量进行配置:
76//!
77//! ```toml
78//! [memory]
79//! database_url = "sqlite:memory.db"
80//! cache_size = 1000
81//!
82//! [retrieval]
83//! semantic_threshold = 0.7
84//! max_results = 50
85//!
86//! [learning]
87//! learning_rate = 0.01
88//! decay_rate = 0.001
89//! ```
90
91pub mod config;
92pub mod core;
93pub mod database;
94pub mod error;
95pub mod learning;
96pub mod memory;
97pub mod retrieval;
98pub mod utils;
99
100#[cfg(feature = "examples")]
101pub mod examples;
102
103// 重新导出核心类型
104pub use core::*;
105pub use database::*;
106pub use error::*;
107pub use learning::*;
108pub use memory::*;
109pub use retrieval::*;
110
111/// 预导入模块,包含最常用的类型和函数
112pub mod prelude {
113 pub use crate::core::*;
114 pub use crate::core::{Memory, MemoryAttributes, MemoryConnections, MemoryMetadata};
115 pub use crate::core::{Query, QueryFilters, QueryType};
116 pub use crate::database::VectorGraphDB;
117 pub use crate::error::{MemoryError, Result};
118 pub use crate::learning::{LearningEngine, LearningResult};
119 pub use crate::memory::MemoryManager;
120 pub use crate::utils::*;
121
122 // 重新导出常用的外部类型
123 pub use anyhow;
124 pub use chrono::{DateTime, Utc};
125 pub use serde::{Deserialize, Serialize};
126 pub use serde_json::Value;
127 pub use std::collections::HashMap;
128 pub use uuid::Uuid;
129}
130
131/// 库版本信息
132pub const VERSION: &str = env!("CARGO_PKG_VERSION");
133
134/// 库名称
135pub const NAME: &str = env!("CARGO_PKG_NAME");
136
137/// 库描述
138pub const DESCRIPTION: &str = env!("CARGO_PKG_DESCRIPTION");
139
140/// 获取库的完整版本信息
141pub fn version_info() -> String {
142 format!("{} v{} - {}", NAME, VERSION, DESCRIPTION)
143}
144
145#[cfg(test)]
146mod tests {
147 use super::*;
148
149 #[test]
150 fn test_version_info() {
151 let info = version_info();
152 assert!(info.contains("ai00-mem"));
153 assert!(info.contains("0.1.0"));
154 }
155
156 #[tokio::test]
157 async fn test_basic_functionality() {
158 use crate::prelude::*;
159
160 // 测试基本功能是否正常,使用内存数据库
161 let mut config = crate::config::Config::default();
162 config.database.url = "sqlite::memory:".to_string();
163 let result = VectorGraphDB::new(config).await;
164 assert!(result.is_ok());
165 }
166}