dpml-prompt
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.
268 lines (222 loc) • 7.51 kB
JavaScript
const BasePouchCommand = require('../BasePouchCommand')
const fs = require('fs-extra')
const path = require('path')
const { COMMANDS, buildCommand } = require('../../../../constants')
/**
* 记忆保存锦囊命令
* 负责将知识、经验和最佳实践保存到记忆库中
*/
class RememberCommand extends BasePouchCommand {
constructor () {
super()
}
getPurpose () {
return '增强AI长期记忆能力,主动内化专业知识、最佳实践和项目经验'
}
async getContent (args) {
const content = args.join(' ')
if (!content) {
return this.getUsageHelp()
}
try {
const memoryEntry = await this.saveMemory(content)
return this.formatSaveResponse(content, memoryEntry)
} catch (error) {
return `❌ 记忆内化失败:${error.message}
💡 可能的原因:
- AI记忆体系目录权限不足
- 磁盘空间不够
- 记忆内容格式问题
🔧 解决方案:
1. 检查 .promptx 目录权限
2. 确保磁盘空间充足
3. 检查记忆内容是否包含特殊字符`
}
}
/**
* 将知识内化到AI记忆体系(紧凑格式)
*/
async saveMemory (value) {
// 1. 确保AI记忆体系目录存在
const memoryDir = await this.ensureMemoryDirectory()
// 2. 使用单一记忆文件
const memoryFile = path.join(memoryDir, 'declarative.md')
// 3. 格式化为一行记忆
const memoryLine = this.formatMemoryLine(value)
// 4. 追加到记忆文件
const action = await this.appendToMemoryFile(memoryFile, memoryLine)
return {
value,
filePath: memoryFile,
action,
timestamp: new Date().toISOString()
}
}
/**
* 确保AI记忆体系目录存在
*/
async ensureMemoryDirectory () {
const promptxDir = path.join(process.cwd(), '.promptx')
const memoryDir = path.join(promptxDir, 'memory')
await fs.ensureDir(memoryDir)
return memoryDir
}
/**
* 格式化为一行记忆(紧凑格式)
*/
formatMemoryLine (value) {
const now = new Date()
const timestamp = `${now.getFullYear()}/${String(now.getMonth() + 1).padStart(2, '0')}/${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}`
// 自动生成标签
const tags = this.generateTags(value)
return `- ${timestamp} ${value} #${tags} #评分:8 #有效期:长期`
}
/**
* 自动生成标签
*/
generateTags (value) {
const tags = []
const lowerValue = value.toLowerCase()
// 基于value生成标签
if (lowerValue.includes('最佳实践') || lowerValue.includes('规则')) tags.push('#最佳实践')
if (lowerValue.includes('流程') || lowerValue.includes('步骤')) tags.push('#流程管理')
if (lowerValue.includes('命令') || lowerValue.includes('工具')) tags.push('#工具使用')
return tags.join(' ') || '#其他'
}
/**
* 追加到记忆文件
*/
async appendToMemoryFile (memoryFile, memoryLine) {
// 初始化文件(如果不存在)
if (!await fs.pathExists(memoryFile)) {
await fs.writeFile(memoryFile, `# 陈述性记忆
## 高价值记忆(评分 ≥ 7)
${memoryLine}
`)
return 'created'
}
// 读取现有内容
const content = await fs.readFile(memoryFile, 'utf-8')
// 追加新记忆(在高价值记忆部分)
const updatedContent = content + '\n\n' + memoryLine
await fs.writeFile(memoryFile, updatedContent)
return 'created'
}
/**
* 格式化保存响应(简化版本)
*/
formatSaveResponse (value, memoryEntry) {
const { action, timestamp } = memoryEntry
const actionLabels = {
created: '✅ AI已内化新记忆'
}
return `${actionLabels[action]}:${value}
## 📋 记忆详情
- **内化时间**: ${timestamp.split('T')[0]}
- **知识内容**: ${value.length > 100 ? value.substring(0, 100) + '...' : value}
## 🎯 能力增强效果
- ✅ **知识已内化到AI长期记忆**
- ✅ **可通过recall命令主动检索**
- ✅ **支持跨会话记忆保持**
## 🔄 下一步行动:
- 记忆检索: 验证知识内化效果
命令: \`${buildCommand.recall(value)}\`
- 能力强化: 学习相关知识增强记忆
命令: \`${buildCommand.learn('<protocol>://<resource-id>')}\`
- 应用实践: 在实际场景中运用记忆
命令: \`${buildCommand.action('<role-id>')}\`
📍 当前状态:memory_saved`
}
/**
* 获取使用帮助
*/
getUsageHelp () {
return `🧠 **Remember锦囊 - AI记忆增强系统**
## 📖 基本用法
\`\`\`bash
${buildCommand.remember('<知识内容>')}
\`\`\`
## 💡 记忆内化示例
### 📝 AI记忆内化
AI学习和内化各种专业知识
\`\`\`bash
${buildCommand.remember('"构建代码 → 运行测试 → 部署到staging → 验证功能 → 发布生产"')}
${buildCommand.remember('"用户反馈视频加载慢,排查发现是CDN配置问题,修改后加载速度提升60%"')}
${buildCommand.remember('"React Hooks允许在函数组件中使用state和其他React特性"')}
${buildCommand.remember('"每个PR至少需要2个人review,必须包含测试用例"')}
\`\`\`
## 🔍 记忆检索与应用
\`\`\`bash
${buildCommand.recall('<关键词>')} # AI主动检索记忆
${buildCommand.action('<role-id>')} # AI运用记忆激活角色
\`\`\`
🔄 下一步行动:
- 开始记忆: 内化第一条知识
命令: ${buildCommand.remember('<content>')}
- 学习资源: 学习新知识再内化
命令: ${buildCommand.learn('<protocol>://<resource>')}`
}
/**
* 获取PATEOAS导航信息
*/
getPATEOAS (args) {
const content = args.join(' ')
if (!content) {
return {
currentState: 'remember_awaiting_input',
availableTransitions: ['hello', 'learn', 'recall'],
nextActions: [
{
name: '查看角色',
description: '选择角色获取专业知识',
command: COMMANDS.HELLO,
priority: 'medium'
},
{
name: '学习资源',
description: '学习新知识然后保存',
command: buildCommand.learn('<protocol>://<resource>'),
priority: 'high'
}
]
}
}
return {
currentState: 'memory_saved',
availableTransitions: ['recall', 'learn', 'action', 'remember'],
nextActions: [
{
name: '检索记忆',
description: '测试记忆是否可检索',
command: buildCommand.recall('<关键词>'),
priority: 'high'
},
{
name: '学习强化',
description: '学习相关知识加强记忆',
command: buildCommand.learn('<protocol>://<resource>'),
priority: 'medium'
},
{
name: '应用记忆',
description: '在实际场景中应用记忆',
command: buildCommand.action('<role-id>'),
priority: 'medium'
},
{
name: '继续内化',
description: 'AI继续内化更多知识',
command: buildCommand.remember('<content>'),
priority: 'low'
}
],
metadata: {
savedMemory: content.substring(0, 50) + (content.length > 50 ? '...' : ''),
memoryLength: content.length,
timestamp: new Date().toISOString(),
systemVersion: '锦囊串联状态机 v1.0'
}
}
}
}
module.exports = RememberCommand