@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.
226 lines (192 loc) • 6.78 kB
JavaScript
const BasePouchCommand = require('../BasePouchCommand')
const { getGlobalResourceManager } = require('../../resource')
const { CognitionManager } = require('../../cognition/CognitionManager')
const logger = require('../../../utils/logger')
/**
* 记忆保存锦囊命令 - 基于认知体系
* 使用 CognitionManager 保存角色专属记忆
*/
class RememberCommand extends BasePouchCommand {
constructor () {
super()
this.resourceManager = getGlobalResourceManager()
this.cognitionManager = new CognitionManager(this.resourceManager)
}
getPurpose () {
return '增强AI长期记忆能力,主动内化专业知识、最佳实践和项目经验'
}
async getContent (args) {
// 解析参数:role 和 engrams数组
const { role, engrams } = this.parseArgs(args)
if (!role || !engrams) {
return this.getUsageHelp()
}
try {
logger.step('🧠 [RememberCommand] 开始批量记忆保存流程')
logger.info(`📝 [RememberCommand] 批量保存 ${engrams.length} 个Engram`)
// 使用 CognitionManager 批量保存记忆
await this.cognitionManager.remember(role, engrams)
logger.success('✅ [RememberCommand] 批量记忆保存完成')
return this.formatBatchSaveResponse(engrams, role)
} catch (error) {
logger.error(`❌ [RememberCommand] 记忆保存失败: ${error.message}`)
logger.debug(`🐛 [RememberCommand] 错误堆栈: ${error.stack}`)
return `❌ 记忆保存失败:${error.message}
💡 **可能的原因**:
- 角色ID不正确
- 记忆内容格式问题
- 认知系统初始化失败
🔧 **建议操作**:
1. 检查角色ID是否正确
2. 重试记忆操作
3. 如持续失败,查看日志详情`
}
}
/**
* 解析命令行参数
*/
parseArgs(args) {
let role = ''
let engrams = null
// 第一个参数是role
if (args.length > 0) {
role = args[0]
}
// 第二个参数是JSON格式的engrams数组
if (args.length > 1) {
try {
engrams = JSON.parse(args[1])
if (!Array.isArray(engrams)) {
throw new Error('engrams必须是数组格式')
}
} catch (error) {
logger.error(`❌ [RememberCommand] 解析engrams参数失败: ${error.message}`)
engrams = null
}
}
return { role, engrams }
}
/**
* 格式化保存响应
*/
formatSaveResponse (value, strength, role) {
return `✅ AI已内化新记忆:${value}
## 📋 记忆详情
- **角色**: ${role}
- **内化时间**: ${new Date().toISOString()}
- **记忆强度**: ${strength}
## 🎯 能力增强效果
- ✅ **知识已内化到角色认知体系**
- ✅ **支持基于语义的智能检索**
- ✅ **可通过recall命令主动检索**
- ✅ **自动形成知识网络连接**`
}
/**
* 格式化批量保存响应
*/
formatBatchSaveResponse (engrams, role) {
const typeCount = engrams.reduce((acc, engram) => {
acc[engram.type] = (acc[engram.type] || 0) + 1
return acc
}, {})
const avgStrength = (engrams.reduce((sum, engram) => sum + engram.strength, 0) / engrams.length).toFixed(2)
const typeStats = Object.entries(typeCount)
.map(([type, count]) => `${type}: ${count}个`)
.join(', ')
return `✅ AI已批量内化 ${engrams.length} 个记忆:
## 📊 批量记忆统计
- **类型分布**: ${typeStats}
- **平均强度**: ${avgStrength}
- **角色**: ${role}
- **内化时间**: ${new Date().toISOString()}
## 🎯 批量记忆优势
- ✅ **原子性保持**: 每个概念独立存储,避免混淆
- ✅ **关联性建立**: 相关概念自动建立语义连接
- ✅ **检索精确**: 原子Cue确保精确匹配
- ✅ **类型分离**: ATOMIC实体、LINK关系、PATTERN模式分别存储`
}
/**
* 获取使用帮助
*/
getUsageHelp () {
return `🧠 **Remember锦囊 - AI角色专属记忆系统**
## 📖 基本用法
remember 角色ID "记忆内容" "结构化认知" 记忆强度
## 🎯 必填参数
- **角色ID**: 要保存记忆的角色ID
- **记忆内容**: 要保存的重要信息或经验
- **结构化认知**: Mermaid mindmap格式的认知结构
- **记忆强度**: 0-1之间的数值(默认0.8)
## 📋 使用示例
\`\`\`bash
remember java-developer "React Hooks最佳实践" "mindmap\\n root((React))\\n Hooks\\n useState\\n useEffect" 0.9
remember product-manager "用户研究三步法" "mindmap\\n root((用户研究))\\n 观察\\n 访谈\\n 分析" 0.8
\`\`\`
## 🎭 角色专属记忆特性
- **认知体系**: 每个角色拥有独立的认知网络
- **语义连接**: 自动建立知识间的语义关联
- **智能检索**: 基于语义相似度的记忆检索
- **持久存储**: 长期记忆和语义网络双重存储
## 🔍 配套工具
- **查看角色**: welcome 工具查看所有可用角色ID
- **检索记忆**: recall 工具检索角色专属记忆
- **激活角色**: action 工具激活角色(自动激活语义网络)`
}
/**
* 获取PATEOAS导航信息
*/
getPATEOAS (args) {
const content = args.join(' ')
if (!content) {
return {
currentState: 'remember_awaiting_input',
availableTransitions: ['welcome', 'learn', 'recall'],
nextActions: [
{
name: '查看角色',
description: '选择角色获取专业知识',
method: 'MCP PromptX welcome 工具',
priority: 'medium'
},
{
name: '学习资源',
description: '学习新知识然后保存',
method: 'MCP PromptX learn 工具',
priority: 'high'
}
]
}
}
return {
currentState: 'memory_saved',
availableTransitions: ['recall', 'learn', 'action', 'remember'],
nextActions: [
{
name: '检索记忆',
description: '测试记忆是否可检索',
method: 'MCP PromptX recall 工具',
priority: 'high'
},
{
name: '应用记忆',
description: '在实际场景中应用记忆',
method: 'MCP PromptX action 工具',
priority: 'medium'
},
{
name: '继续内化',
description: '本轮对话还有更多值得记忆的信息',
method: 'MCP PromptX remember 工具',
priority: 'high'
}
],
metadata: {
savedMemory: content.substring(0, 50) + (content.length > 50 ? '...' : ''),
memoryLength: content.length,
timestamp: new Date().toISOString(),
systemVersion: '锦囊串联状态机 v1.0'
}
}
}
}
module.exports = RememberCommand