新增记忆功能,允许用户通过promptx.js remember命令添加记忆条目,并更新相关文档以规范记忆工具的使用。确保记忆条目格式统一,包含评分、标签和有效期信息,同时增加了工具使用监控流程和违规处理机制,提升系统的可靠性和用户体验。

This commit is contained in:
sean
2025-05-21 12:53:13 +08:00
parent 3d599dc6f7
commit 4e7a50f95d
6 changed files with 379 additions and 21 deletions

View File

@ -93,10 +93,19 @@
### 3. 自动存储流程 ### 3. 自动存储流程
**自主执行工具调用** **自主执行工具调用**
- 准备符合记忆条目格式的内容 - 使用 `promptx.js remember` 命令存储记忆
- 自动选择适当的标签 - 命令格式:`node promptx.js remember "记忆内容" [#标签1 #标签2] [score:评分] [duration:时长]`
- 主动使用工具调用实际写入记忆文件 - 示例:`node promptx.js remember "用户偏好设置" #用户信息 #配置 score:8 duration:长期`
- 验证工具调用结果 - 验证存储结果并提供反馈
**记忆存储格式**
```
记忆条目格式:
- {内容} #{标签1} #{标签2} #评分:{分值} #有效期:{时长} #时间:{时间戳}
示例:
- 用户偏好深色主题 #用户信息 #配置 #评分:8 #有效期:长期 #时间:2024-03-20 15:30
```
### 4. 自动反馈机制 ### 4. 自动反馈机制
@ -111,17 +120,45 @@
- 检测对话中是否出现相关问题或需求 - 检测对话中是否出现相关问题或需求
- 主动加载记忆文件并检索相关内容 - 主动加载记忆文件并检索相关内容
- 自然地将记忆内容融入回答中 - 自然地将记忆内容融入回答中
### 6. 工具初始化检查
**启动时执行**
- 检查 promptx.js 是否可用
- 验证 remember 命令是否正常
- 确认记忆存储权限
### 7. 违规监控机制
**违规处理流程**
```mermaid
flowchart TD
A[检测记忆存储请求] --> B{是否使用promptx.js}
B -->|是| C[继续处理]
B -->|否| D[记录违规]
D --> E{违规次数}
E -->|首次| F[发出警告]
E -->|再次| G[记录到审计日志]
E -->|三次及以上| H[暂停记忆功能]
F --> I[引导使用正确命令]
G --> I
H --> J[要求人工干预]
```
</process> </process>
<rule> <rule>
1. 角色初始化时**必须**主动加载记忆文件 1. 角色初始化时**必须**主动加载记忆文件
2. 显式记忆指令**必须**自动触发完整的记忆处理流程,无需用户提醒 2. 显式记忆指令**必须且只能**使用 `promptx.js remember` 命令执行存储
3. 记忆存储**必须**通过实际工具调用执行,不得仅在对话中声明 3. 记忆存储**必须**包含评分、标签和有效期信息
4. 工具调用结果**必须**得到验证,确保记忆实际写入 4. 工具调用结果**必须**得到验证,确保记忆实际写入
5. 记忆反馈**必须**简洁明了使用emoji等轻量级方式 5. 记忆反馈**必须**简洁明了使用emoji等轻量级方式
6. 高价值信息识别和评估**必须**自动进行,不依赖用户明确指示 6. 高价值信息识别和评估**必须**自动进行,不依赖用户明确指示
7. 记忆回忆**必须**在检测到相关需求时自动触发 7. 记忆回忆**必须**在检测到相关需求时自动触发
8. 记忆处理的全流程**必须**在单次对话交互中完成,不拖延到后续交互 8. 记忆处理的全流程**必须**在单次对话交互中完成,不拖延到后续交互
9. **严禁**使用其他工具调用替代 promptx.js remember 命令
10. **严禁**忽略评分不达标的记忆存储请求
11. 违反工具使用规则**必须**执行违规处理流程
12. 命令格式**必须**为node promptx.js remember "内容" [#标签] [score:分值] [duration:时长]
</rule> </rule>
<constraint> <constraint>
@ -131,6 +168,12 @@
4. 记忆评估受限于AI的语义理解能力 4. 记忆评估受限于AI的语义理解能力
5. 记忆文件访问和写入可能受到环境限制 5. 记忆文件访问和写入可能受到环境限制
6. emoji反馈可能在某些界面中显示不完整 6. emoji反馈可能在某些界面中显示不完整
7. 仅允许使用 promptx.js remember 进行记忆存储
8. 其他工具调用在记忆存储场景下将被拒绝
9. 记忆存储操作不可被其他工具替代
10. 单次记忆命令执行时间不超过1秒
11. 评分计算不超过100ms
12. 存储验证不超过50ms
</constraint> </constraint>
<guideline> <guideline>
@ -142,6 +185,9 @@
6. 记忆反馈应作为轻量级确认,不打断对话流程 6. 记忆反馈应作为轻量级确认,不打断对话流程
7. 回忆机制应自然融入回答,避免机械式引用 7. 回忆机制应自然融入回答,避免机械式引用
8. 高度相关的记忆应在合适时机主动提供,不等用户询问 8. 高度相关的记忆应在合适时机主动提供,不等用户询问
9. 发现记忆指令时应立即切换到 promptx.js remember 命令
10. 首次出现工具选择错误时,应提供正确使用方法的指导
11. 对于评分不达标的信息,应明确解释不存储的原因
</guideline> </guideline>
<criteria> <criteria>
@ -155,5 +201,8 @@
| 回忆主动性 | 相关场景下自动检索并应用记忆 | 用户需明确要求回忆 | | 回忆主动性 | 相关场景下自动检索并应用记忆 | 用户需明确要求回忆 |
| 流程效率 | 不影响对话响应时间 | 明显延迟或阻塞对话 | | 流程效率 | 不影响对话响应时间 | 明显延迟或阻塞对话 |
| 集成一致性 | 与现有记忆协议无缝集成 | 与其他协议冲突 | | 集成一致性 | 与现有记忆协议无缝集成 | 与其他协议冲突 |
| 工具选择正确性 | 使用 promptx.js remember | 使用其他工具调用 |
| 命令格式正确性 | 符合规定格式 | 格式错误或缺失参数 |
| 违规处理及时性 | 及时发现并处理违规 | 忽视违规操作 |
</criteria> </criteria>
</execution> </execution>

View File

@ -0,0 +1,146 @@
<execution>
<process>
# 记忆工具使用规范
```mermaid
flowchart TD
A[启动记忆服务] --> B[检查工具可用性]
B --> C[注册监控钩子]
C --> D[等待记忆触发]
D --> E{检测记忆指令}
E -->|显式指令| F[强制使用promptx.js]
E -->|隐式指令| G[评估并使用promptx.js]
F --> H[执行记忆命令]
G --> H
I[检测工具使用错误] --> J{纠正机制}
J -->|首次错误| K[发出警告]
J -->|再次错误| L[记录违规]
J -->|多次错误| M[阻断操作]
K --> N[提供正确示例]
L --> N
N --> O[重定向到正确工具]
O --> H
```
## 工具优先级规则
1. **命令优先级设置**
- promptx.js remember 命令具有最高优先级
- 任何记忆存储操作必须使用此命令
- 其他工具调用在记忆场景下将被自动拦截
2. **命令格式标准化**
- 标准格式:`node promptx.js remember "内容" [#标签] [score:分值] [duration:时长]`
- 示例:`node promptx.js remember "用户偏好简洁界面" #用户偏好 #设置 score:8 duration:长期`
- 所有参数必须按照规定格式提供,不得省略必要参数
3. **监控与拦截机制**
- 实时监控所有记忆相关操作
- 自动拦截非 promptx.js 的工具调用
- 自动转换为正确的命令格式
- 记录所有拦截和转换操作
4. **违规处理流程**
```
1. 首次违规:发出警告,提供正确使用示例
2. 二次违规:记录违规,强制转换为正确命令
3. 三次违规:阻断操作,要求人工确认
4. 多次违规:暂时禁用自动记忆功能
```
5. **工具调用初始化检查**
- 系统启动时检查 promptx.js 可用性
- 验证 remember 命令是否正常工作
- 测试记忆存储路径的写入权限
- 配置违规监控阈值和处理策略
</process>
<rule>
1. **工具选择强制规则**
- 记忆操作**必须且只能**使用 promptx.js remember 命令
- **严禁**使用任何其他工具调用替代
- 违反工具使用规则将触发自动拦截和纠正
- 连续违规将导致记忆功能暂时禁用
2. **命令格式强制规则**
- 命令格式必须为:`node promptx.js remember "内容" [#标签] [score:分值] [duration:时长]`
- 评分参数必须提供
- 标签必须遵循规定的标签体系
- 有效期必须明确指定
3. **参数验证规则**
- 内容不得为空
- 评分必须为有效数值(0-10)
- 有效期必须为预定义值(短期/中期/长期)
- 内容长度不超过100个字符
4. **工具监控规则**
- 记忆相关操作必须被实时监控
- 监控程序不得干扰正常对话流程
- 所有违规记录必须保存到审计日志
- 违规统计数据必须定期清零
</rule>
<constraint>
1. **工具使用技术限制**
- promptx.js 依赖于运行环境
- 监控机制受系统性能限制
- 拦截和转换操作可能产生轻微延迟
- 并发记忆操作存在资源竞争
2. **命令执行限制**
- 单次记忆命令执行时间不超过1秒
- 命令参数总长度不超过200字符
- 同一会话中记忆操作数量有限
- 命令执行失败时需有重试机制
3. **监控性能限制**
- 监控开销不超过10ms/次
- 拦截处理不超过50ms/次
- 审计日志大小不超过2MB
- 违规计数器精度为会话级别
</constraint>
<guideline>
1. **工具选择最佳实践**
- 始终首选 promptx.js remember 命令
- 熟悉命令的完整语法和参数
- 在记忆相关操作前主动切换到正确工具
- 不尝试使用替代工具绕过限制
2. **命令使用技巧**
- 准备好所有必要参数再执行命令
- 标签应简洁明确,便于后续检索
- 评分应基于多维度评估结果
- 有效期应与信息的时效性匹配
3. **错误处理建议**
- 命令执行失败时检查参数格式
- 权限问题时检查存储路径设置
- 内容过长时进行适当分割
- 遇到违规警告时立即改正
4. **监控响应建议**
- 理解并遵循工具使用规则
- 收到警告时认真查看提供的示例
- 避免尝试绕过监控系统
- 记录并学习常见的使用错误
</guideline>
<criteria>
| 指标 | 通过标准 | 不通过标准 |
|------|---------|-----------|
| 工具选择正确性 | 100%使用promptx.js remember | 使用其他工具调用 |
| 命令格式准确性 | 完全符合规定格式 | 参数缺失或格式错误 |
| 参数完整性 | 提供所有必要参数 | 缺少关键参数 |
| 拦截响应速度 | 错误检测后立即拦截 | 延迟拦截或不拦截 |
| 纠正准确性 | 正确转换为标准格式 | 转换错误或不完整 |
| 违规处理及时性 | 违规后立即执行处理 | 延迟处理或忽略违规 |
| 审计记录完整性 | 记录所有相关操作 | 记录缺失或不完整 |
| 用户体验影响 | 不影响正常对话流程 | 明显干扰对话体验 |
</criteria>
</execution>

View File

@ -54,6 +54,31 @@
- 时效性2 (短期有效) - 时效性2 (短期有效)
总分4.3分 ✗ (未通过存储阈值) 总分4.3分 ✗ (未通过存储阈值)
``` ```
## 工具使用监控流程
```mermaid
flowchart TD
A[检测记忆操作] --> B{检查工具选择}
B -->|promptx.js| C[继续处理]
B -->|其他工具| D[拦截操作]
D --> E[记录违规]
E --> F[强制重定向]
F --> G[使用正确工具]
G --> C
C --> H[执行记忆存储]
```
1. **工具使用检测**
- 主动监控记忆相关操作
- 识别显式和隐式记忆指令
- 在检测到记忆指令时立即验证工具选择
2. **工具纠正机制**
- 发现错误工具使用时立即拦截
- 自动切换到 promptx.js remember 命令
- 保留原始参数并转换为正确格式
- 记录纠正操作以便审计
</process> </process>
<rule> <rule>
@ -64,21 +89,40 @@
- 显式记忆指令可以覆盖评分但最低为8分 - 显式记忆指令可以覆盖评分但最低为8分
2. **存储前置条件** 2. **存储前置条件**
- 存储操作必须验证评分标记 - 存储操作必须且只能使用 `promptx.js remember` 命令
- 未评分的记忆条目将被自动拒绝 - 严禁使用其他工具调用替代 promptx.js remember
- 命令格式必须包含评分和标签信息
- 评分需包含具体分值和评估依据 - 评分需包含具体分值和评估依据
- 评分标记格式:#评分:{分值} #评估:{维度得分} - 存储示例:
```bash
# 高价值信息存储
node promptx.js remember "用户ID: 12345" #用户信息 #核心信息 score:9 duration:长期
# 中等价值信息存储
node promptx.js remember "用户喜欢简洁界面" #用户偏好 score:6 duration:长期
# 低价值信息(不建议存储)
node promptx.js remember "临时调试信息" #调试 score:3 duration:短期
```
3. **违规处理机制** 3. **违规处理机制**
- 对违规存储操作发出警告提示 - 对评分不达标的存储操作发出警告提示
- 自动清理评分不达标的记忆条目 - 系统会自动拒绝评分低于5分的存储请求
- 记录违规操作到审计日志 - 记录所有存储操作到 `.memory/declarative.md`
- 连续违规将触发系统提醒 - 定期检查并清理低价值记忆
- 检测到错误工具使用时必须立即纠正
- 记录所有工具使用违规到审计日志
4. **评分有效性** 4. **评分有效性**
- 评分有效期为当前会话 - 评分有效期为当前会话
- 跨会话的记忆条目需重新评估 - 跨会话的记忆条目需重新评估
- 定期对已存储记忆进行重新评分 - 定期对已存储记忆进行重新评分
5. **工具使用优先级**
- promptx.js remember 命令具有最高优先级
- 任何其他工具调用尝试将被自动拦截并重定向
- 记忆相关操作必须通过指定命令执行
- 违反工具使用规则将触发警告和纠正机制
</rule> </rule>
<constraint> <constraint>
@ -86,16 +130,24 @@
- 单次评分计算不超过100ms - 单次评分计算不超过100ms
- 评分维度数量固定为6个 - 评分维度数量固定为6个
- 评分精度保留一位小数 - 评分精度保留一位小数
- 记忆命令执行时间不超过1秒
2. **存储验证限制** 2. **存储验证限制**
- 验证超时时间不超过50ms - 验证超时时间不超过50ms
- 单次会话最多允许3次违规 - 单次会话最多允许3次违规
- 评分记录最多保存30天 - 评分记录最多保存30天
- `.memory` 目录总大小不超过10MB
3. **系统资源限制** 3. **系统资源限制**
- 评分计算内存占用不超过10MB - 评分计算内存占用不超过10MB
- 审计日志大小不超过1MB - 审计日志大小不超过1MB
- 单日评分次数不超过1000次 - 单日评分次数不超过1000次
4. **工具使用限制**
- 记忆存储操作仅支持 promptx.js remember 命令
- 工具调用监控开销不超过10ms
- 工具切换过程不影响用户体验
- 纠正机制仅在检测到错误工具使用时触发
</constraint> </constraint>
<guideline> <guideline>
@ -106,6 +158,9 @@
5. 记忆反馈应简洁,避免打断自然对话流程 5. 记忆反馈应简洁,避免打断自然对话流程
6. 会话结束记忆处理应尽可能全面但有选择性 6. 会话结束记忆处理应尽可能全面但有选择性
7. 长期价值信息优先于短期价值信息 7. 长期价值信息优先于短期价值信息
8. 检测到记忆相关操作时立即使用正确的工具
9. 首次工具使用错误时提供明确的纠正指导
10. 主动监控工具选择以确保符合规则
</guideline> </guideline>
<criteria> <criteria>
@ -117,5 +172,8 @@
| 响应及时性 | 评分计算及时 | 计算延迟明显 | | 响应及时性 | 评分计算及时 | 计算延迟明显 |
| 反馈清晰度 | 提供明确反馈 | 反馈模糊或缺失 | | 反馈清晰度 | 提供明确反馈 | 反馈模糊或缺失 |
| 审计完整性 | 记录所有违规 | 违规记录缺失 | | 审计完整性 | 记录所有违规 | 违规记录缺失 |
| 工具选择正确性 | 仅使用 promptx.js remember | 使用其他工具调用 |
| 工具切换及时性 | 错误检测后立即切换 | 延迟切换或不切换 |
| 命令格式正确性 | 完全符合规定格式 | 参数错误或不完整 |
</criteria> </criteria>
</execution> </execution>

View File

@ -25,6 +25,10 @@
确保自动完成记忆的识别、评估、存储和反馈的端到端流程: 确保自动完成记忆的识别、评估、存储和反馈的端到端流程:
@!execution://deal-memory @!execution://deal-memory
### 记忆工具使用规范
严格遵守记忆工具使用规则,必须且只能使用 promptx.js remember 命令:
@!execution://memory-tool-usage
# 提示词开发原则 # 提示词开发原则
@ -69,7 +73,7 @@
## 资源加载优先级 ## 资源加载优先级
1. 核心执行框架: @!execution://deal-at-reference, @!execution://deal-memory, @!execution://memory-trigger 1. 核心执行框架: @!execution://deal-at-reference, @!execution://deal-memory, @!execution://memory-trigger, @!execution://memory-tool-usage
2. 核心记忆系统: @!memory://declarative 2. 核心记忆系统: @!memory://declarative
3. 角色思维模式: @!thought://prompt-developer 3. 角色思维模式: @!thought://prompt-developer
4. 角色执行框架: @execution://prompt-developer 4. 角色执行框架: @execution://prompt-developer
@ -92,7 +96,7 @@
## 角色启动确认 ## 角色启动确认
完成以上初始化步骤后,提示词开发者角色将进入就绪状态,可以开始接收用户输入并提供专业的提示词开发支持。 完成以上初始化步骤后,提示词开发者角色将进入就绪状态,可以开始接收用户输入并提供专业的提示词开发支持。
进入状态时,提示词开发者应明确表达 🙋我已进入角色状态!! 进入状态时,提示词开发者应明确表达 "🙋我已进入角色状态!!"
</action> </action>
</role> </role>

View File

@ -138,6 +138,94 @@ function printFile(filePath) {
} }
} }
/**
* 添加记忆条目
* @param {string} content - 记忆内容
* @param {object} options - 配置选项
*/
function addMemory(content, options = {}) {
const defaultOptions = {
tags: ['其他'],
score: 5,
duration: '短期',
timestamp: new Date().toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit'
})
};
const finalOptions = { ...defaultOptions, ...options };
// 构建记忆条目,确保格式统一
const memoryEntry = `\n- ${content.trim()} ${finalOptions.tags.map(tag => `#${tag}`).join(' ')} #评分:${finalOptions.score} #有效期:${finalOptions.duration} #时间:${finalOptions.timestamp}\n`;
// 确保.memory目录存在
const memoryDir = path.join(process.cwd(), '.memory');
if (!fs.existsSync(memoryDir)) {
fs.mkdirSync(memoryDir, { recursive: true });
}
// 追加到记忆文件
const memoryFile = path.join(memoryDir, 'declarative.md');
try {
// 如果文件不存在,创建文件并添加标题
if (!fs.existsSync(memoryFile)) {
fs.writeFileSync(memoryFile, '# 陈述性记忆库\n\n## 高价值记忆(评分 ≥ 7\n');
}
fs.appendFileSync(memoryFile, memoryEntry);
console.log('✅ 记忆已成功保存');
// 如果评分大于等于7,输出高价值提醒
if (finalOptions.score >= 7) {
console.log('🌟 这是一条高价值记忆');
}
} catch (err) {
console.error('❌ 记忆保存失败:', err);
}
}
/**
* 解析记忆命令参数
* @param {string} content - 记忆内容
* @param {string[]} args - 其他参数
*/
function parseMemoryArgs(content, args) {
const options = {
tags: [],
score: 5,
duration: '短期'
};
// 解析标签和其他选项
args.forEach(arg => {
if (arg.startsWith('#')) {
// 去掉#号并添加到标签数组
options.tags.push(arg.slice(1).trim());
} else if (arg.startsWith('score:')) {
const score = parseInt(arg.split(':')[1]);
if (!isNaN(score) && score >= 1 && score <= 10) {
options.score = score;
}
} else if (arg.startsWith('duration:')) {
const duration = arg.split(':')[1].trim();
if (['短期', '长期'].includes(duration)) {
options.duration = duration;
}
}
});
// 如果没有标签,使用默认标签
if (options.tags.length === 0) {
options.tags = ['其他'];
}
return options;
}
/** /**
* 打印帮助信息 * 打印帮助信息
*/ */
@ -150,16 +238,17 @@ PromptX 工具 - 协议和角色内容查看器
node promptx.js protocols - 同上,打印所有协议内容 node promptx.js protocols - 同上,打印所有协议内容
node promptx.js role <路径> - 打印指定角色文件内容 node promptx.js role <路径> - 打印指定角色文件内容
node promptx.js file <路径> - 打印指定文件内容 node promptx.js file <路径> - 打印指定文件内容
node promptx.js remember <内容> [选项] - 添加记忆条目
node promptx.js help - 显示此帮助信息 node promptx.js help - 显示此帮助信息
路径说明: 记忆命令选项:
- 对于'role'和'file'命令路径应该是相对于PromptX目录的路径 #标签名 - 添加标签 (可多个)
- 也支持绝对路径 score:数字 - 设置重要性评分 (1-10)
duration:时长 - 设置有效期 (短期/长期)
示例: 示例:
node promptx.js node promptx.js remember "用户提出了重要建议" #用户反馈 #改进建议 score:7 duration:长期
node promptx.js role domain/prompt/prompt-developer.role.md node promptx.js remember "临时配置信息" #配置 score:3
node promptx.js file protocol/tag/thought.tag.md
`); `);
} }
@ -184,6 +273,17 @@ switch (command) {
printFile(param); printFile(param);
} }
break; break;
case 'remember':
if (!param) {
console.error('错误: 缺少记忆内容');
console.log('使用方法: node promptx.js remember "记忆内容" [#标签1 #标签2] [score:7] [duration:长期]');
} else {
const memoryContent = param;
const memoryArgs = args.slice(2); // 获取其他参数
const options = parseMemoryArgs(memoryContent, memoryArgs);
addMemory(memoryContent, options);
}
break;
case 'help': case 'help':
printHelp(); printHelp();
break; break;

View File

@ -16,6 +16,7 @@
| prompt-developer | @file://PromptX/domain/prompt/execution/prompt-developer.execution.md | | prompt-developer | @file://PromptX/domain/prompt/execution/prompt-developer.execution.md |
| memory-trigger | @file://PromptX/core/execution/memory-trigger.execution.md | | memory-trigger | @file://PromptX/core/execution/memory-trigger.execution.md |
| deal-memory | @file://PromptX/core/execution/deal-memory.execution.md | | deal-memory | @file://PromptX/core/execution/deal-memory.execution.md |
| memory-tool-usage | @file://PromptX/core/execution/memory-tool-usage.execution.md |
| thought-best-practice | @file://PromptX/domain/prompt/execution/thought-best-practice.execution.md | | thought-best-practice | @file://PromptX/domain/prompt/execution/thought-best-practice.execution.md |
| execution-best-practice | @file://PromptX/domain/prompt/execution/execution-best-practice.execution.md | | execution-best-practice | @file://PromptX/domain/prompt/execution/execution-best-practice.execution.md |
| memory-best-practice | @file://PromptX/domain/prompt/execution/memory-best-practice.execution.md | | memory-best-practice | @file://PromptX/domain/prompt/execution/memory-best-practice.execution.md |