///|
/// 按关键词检索记忆
///
/// 返回内容包含指定关键词的所有记忆。关键词匹配为子串包含。
///
/// # Example
/// ```mbt check
/// test {
/// let gv = @ghostvalley.new_engine()
/// gv.add_memory("顿悟失败原因", is_simulation=false)
/// gv.add_memory("普通日常记录", is_simulation=false)
/// let results = gv.search_memories("顿悟")
/// assert_eq(results.length(), 1)
/// }
/// ```
pub fn GhostValleyEngine::search_memories(
self : GhostValleyEngine,
keyword : String,
) -> Array[AiMemory] {
let results : Array[AiMemory] = []
for m in self.memory_bank {
if m.content.contains(keyword) {
results.push(m)
}
}
results
}
///|
/// 获取价值分最高的 N 条记忆
///
/// 按 `value_score` 降序排列返回前 `n` 条。
/// 若 `n` 超过记忆总数,返回全部记忆。
///
/// # Example
/// ```mbt check
/// test {
/// let gv = @ghostvalley.new_engine()
/// gv.add_memory("顿悟反思改进", is_simulation=false)
/// gv.add_memory("普通日常", is_simulation=false)
/// let top = gv.top_memories(1)
/// assert_eq(top.length(), 1)
/// }
/// ```
pub fn GhostValleyEngine::top_memories(
self : GhostValleyEngine,
n : Int,
) -> Array[AiMemory] {
let sorted : Array[AiMemory] = []
for m in self.memory_bank {
sorted.push(m)
}
sorted.sort_by(fn(a, b) { b.value_score.compare(a.value_score) })
let count = if n < sorted.length() { n } else { sorted.length() }
let result : Array[AiMemory] = []
for i in 0.. Array[AiMemory] {
let results : Array[AiMemory] = []
for m in self.memory_bank {
let sim_ok = match is_simulation {
Some(v) => m.is_simulation == v
None => true
}
let core_ok = match is_core {
Some(v) => m.is_core_memory == v
None => true
}
if sim_ok && core_ok {
results.push(m)
}
}
results
}
///|
/// 计算全部记忆的平均价值分
///
/// 空记忆库返回 0.0。
///
/// # Example
/// ```mbt check
/// test {
/// let gv = @ghostvalley.new_engine()
/// gv.add_memory("顿悟反思", is_simulation=false)
/// let avg = gv.average_value_score()
/// assert_true(avg > 0.0)
/// }
/// ```
pub fn GhostValleyEngine::average_value_score(
self : GhostValleyEngine,
) -> Double {
let bank = self.memory_bank
if bank.length() == 0 {
return 0.0
}
let mut total = 0.0
for m in bank {
total = total + m.value_score
}
total / bank.length().to_double()
}
///|
/// 获取所有真实记忆(非模拟)
pub fn GhostValleyEngine::real_memories(
self : GhostValleyEngine,
) -> Array[AiMemory] {
self.filter_memories(is_simulation=Some(false))
}
///|
/// 获取所有模拟记忆(安全气垫)
pub fn GhostValleyEngine::simulation_memories(
self : GhostValleyEngine,
) -> Array[AiMemory] {
self.filter_memories(is_simulation=Some(true))
}
///|
/// 获取所有核心记忆(永不被遗忘)
pub fn GhostValleyEngine::core_memories(
self : GhostValleyEngine,
) -> Array[AiMemory] {
self.filter_memories(is_core=Some(true))
}