@promptx/cli
Version:
DPML-powered AI prompt framework - Revolutionary AI-First CLI system based on Deepractice Prompt Markup Language. Build sophisticated AI agents with structured prompts, memory systems, and execution frameworks.
128 lines (105 loc) • 4.72 kB
JavaScript
/**
* 测试记忆强度过滤功能
* 验证 strength <= 0.5 的记忆会被抛弃
*/
const path = require('path')
const { Cognition } = require('../lib/core/cognition')
async function testStrengthFiltering() {
console.log('🧪 测试记忆强度过滤功能...\n')
try {
// 测试配置
const testConfig = {
longTermPath: path.join(__dirname, 'test-strength-data', 'longterm'),
semanticPath: path.join(__dirname, 'test-strength-data', 'semantic')
}
// 创建 Cognition 实例
const cognition = new Cognition(testConfig)
console.log('✅ Cognition 实例创建成功\n')
// 1. 测试不同强度的记忆
console.log('1️⃣ 添加不同强度的记忆:')
const memoriesWithStrength = [
{ content: '强记忆:重要的项目截止日期', strength: 1.0 },
{ content: '中等记忆:团队会议讨论内容', strength: 0.7 },
{ content: '临界记忆:刚好超过阈值', strength: 0.51 },
{ content: '弱记忆:随意浏览的新闻', strength: 0.5 }, // 会被抛弃
{ content: '极弱记忆:背景噪音信息', strength: 0.3 }, // 会被抛弃
{ content: '无关记忆:完全不重要的内容', strength: 0.1 } // 会被抛弃
]
memoriesWithStrength.forEach((memory) => {
cognition.remember(memory.content, null, memory.strength)
console.log(` 📝 记忆: "${memory.content}" (强度: ${memory.strength})`)
})
console.log('\n')
// 2. 立即检索(应该能找到所有6条)
console.log('2️⃣ 立即检索(短期记忆中):')
const immediateRecall = await cognition.recall()
console.log(` 找到 ${immediateRecall.length} 条记忆`)
immediateRecall.forEach(engram => {
console.log(` - "${engram.getContent()}" (强度: ${engram.getStrength()})`)
})
console.log('\n')
// 3. 触发巩固(添加第7条记忆,触发短期记忆容量为0的立即巩固)
console.log('3️⃣ 触发巩固过程:')
console.log(' 添加新记忆触发之前记忆的巩固...')
cognition.remember('触发器记忆', null, 0.8)
console.log('\n')
// 4. 检索巩固后的记忆
console.log('4️⃣ 巩固后检索(长期记忆):')
const afterConsolidation = await cognition.recall()
console.log(` 找到 ${afterConsolidation.length} 条记忆`)
// 统计不同强度的记忆
let strongCount = 0
let weakCount = 0
afterConsolidation.forEach(engram => {
const strength = engram.getStrength()
if (strength > 0.5) {
strongCount++
console.log(` ✅ 保留: "${engram.getContent()}" (强度: ${strength})`)
} else {
weakCount++
console.log(` ❌ 应被抛弃但仍存在: "${engram.getContent()}" (强度: ${strength})`)
}
})
console.log(`\n 统计结果:`)
console.log(` - 强记忆 (>0.5): ${strongCount} 条`)
console.log(` - 弱记忆 (≤0.5): ${weakCount} 条`)
console.log('\n')
// 5. 测试带 schema 的弱记忆
console.log('5️⃣ 测试带 schema 的弱记忆:')
const weakMemoryWithSchema = {
content: '不重要的技术细节',
schema: `mindmap
root((技术细节))
不重要的配置
临时的解决方案`,
strength: 0.3
}
cognition.remember(weakMemoryWithSchema.content, weakMemoryWithSchema.schema, weakMemoryWithSchema.strength)
console.log(` 📝 添加弱记忆: "${weakMemoryWithSchema.content}" (强度: ${weakMemoryWithSchema.strength})`)
// 触发巩固
cognition.remember('另一个触发器', null, 0.9)
// 检查语义网络
const semantic = await cognition.prime()
console.log('\n 语义网络内容:')
console.log('```mermaid')
console.log(semantic)
console.log('```')
const hasWeakSchema = semantic.includes('技术细节')
console.log(`\n 弱记忆的 schema 是否被保存: ${hasWeakSchema ? '❌ 是(不应该)' : '✅ 否(正确)'}`)
console.log('\n✅ 测试完成!')
// 总结
console.log('\n📊 测试总结:')
console.log('- SimpleEvaluator 使用 strength > 0.5 作为巩固标准')
console.log('- 强度 ≤ 0.5 的记忆在巩固时会被抛弃')
console.log('- 即使有 schema,弱记忆也不会被保存到语义网络')
console.log('- 这模拟了人脑过滤不重要信息的机制')
} catch (error) {
console.error('❌ 测试失败:', error.message)
console.error(error.stack)
}
}
// 如果直接运行此文件,执行测试
if (require.main === module) {
testStrengthFiltering()
}
module.exports = { testStrengthFiltering }