Files
EPEEAIKit/.cursor/skills/profile-memory/SKILL.md

240 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: profile-memory
description: >-
渐进式用户/项目画像系统。在对话中被动检测用户个人特质(审美、技术偏好、做事风格等)
和项目信息(定位、技术栈、产品方向等),对话结束前统一总结并经用户确认后记录。
当用户提到"画像"、"profile"、"我的偏好"、"查看画像"、"项目信息"等时触发。
---
# Profile Memory
渐进式画像系统,被动收集并持久化用户个人特质与项目信息。
## 存储结构
| 文件 | 位置 | 用途 | 注入上下文 |
|------|------|------|-----------|
| user-profile.md | `~/.cursor/profile/` | 个人画像精简版 | 是(每次会话) |
| user-profile-log.md | `~/.cursor/profile/` | 个人画像详细日志 | 否 |
| project-profile.md | `.cursor/profile/` | 项目画像精简版 | 是(每次会话) |
| project-profile-log.md | `.cursor/profile/` | 项目画像详细日志 | 否 |
精简版 Profile 是 Agent 每次会话的上下文输入,必须极度精简。
详细 Log 保留完整上下文,供用户主动查阅和溯源。
## 硬上限
- user-profile.md不超过 **50 行**
- project-profile.md不超过 **30 行**
- 每条信息一行,`- ` 开头,措辞客观中立
## 操作 A被动检测 + 对话结束前确认
### 检测范围
在正常对话中被动检测以下信号(**不主动询问**
**个人特质**
- 审美/设计偏好("太花哨了"、"我喜欢 minimal"
- 技术偏好("以后都用 X"、"我不喜欢 class 写法"
- 做事风格("先讨论再动手"、"不要自作主张"
- 沟通偏好("给我简短的回答"、"多解释一下原理"
- 产品理解/思维方式
**项目信息**
- 项目定位和目标("这个项目是做 X 的"
- 技术栈与架构决策
- 设计约定和规范
- 产品方向和目标用户
### 检测原则
- **保守而非激进**:宁可漏记也不误记
- 只记录**持久性**的偏好/特质,忽略一次性的临时需求
- 区分"个人"和"项目"两个维度
### 变更分类
检测到的新信息与已有条目的关系分为三类,处理方式不同:
| 类型 | 定义 | 示例 | 提示强度 |
|------|------|------|---------|
| **新增** | 全新维度,无已有条目 | 首次提到审美偏好 | 常规 |
| **演进** | 已有条目的深化、细化或自然发展 | "偏好 React" → "偏好 React + Next.js 全栈" | 常规,展示前后对比 |
| **转向** | 与已有条目方向性矛盾或根本性变化 | "偏好 React" → "想转 Vue";项目方向从 B2C 转 B2B | **加强提醒**,展示前后对比 |
### 确认流程
```
1. 在对话过程中将检测到的信息在内部缓存,分类为"个人"或"项目"
2. 对每条缓存信息,与已有 Profile 比对,标记变更类型(新增/演进/转向)
3. 当用户的主线任务完成后,统一提出,格式如下:
"本次对话中我注意到以下可记录的画像信息:"
**个人画像:**
- [新增][分类] 条目内容
- [演进][分类] 旧xxx → 新yyy
- [转向][分类] 旧xxx → 新yyy ⚠️
**项目画像:**
- (同上格式)
转向类条目额外标注 ⚠️ 并附一句说明:
"⚠️ 以下条目与已有记录存在方向性变化,请特别关注:"
"是否记录?你可以全部确认、逐条修改或跳过。"
4. 用户确认后执行写入流程
5. 如本次对话未检测到任何画像信息,则不触发此流程
```
### 写入流程
```
1. 读取对应的精简 Profile 和详细 Log不存在则用模板创建
2. 按变更类型执行:
- 新增:在对应分类下追加条目
- 演进:替换对应旧条目为新措辞
- 转向:替换对应旧条目为新措辞(用户已在确认流程中审核)
3. 写入精简 Profile
4. 追加详细 Log其中
- 新增条目:操作记为"新增"
- 演进条目:操作记为"更新(旧值 → 新值)"
- 转向条目:操作记为"转向(旧值 → 新值)",便于溯源重大变化
5. 检查精简 Profile 是否超过硬上限,超过则提醒用户精简
```
## 操作 B用户主动管理
当用户说"查看我的画像"、"profile"、"查看项目画像"、"我的偏好"等:
```
1. 读取对应的精简 Profile展示给用户
2. 如用户要看详细版或溯源,读取对应 Log 展示
3. 用户可要求:
- 删除某条记录同步删除精简版条目Log 中标记为已删除)
- 修改某条记录的措辞
- 合并/重组分类
- 新增分类
```
## 操作 C变更比对与冲突处理
### 比对逻辑
```
对每条新检测到的信息,在同分类下的已有条目中查找语义相近项:
1. 无相近条目 → 标记为"新增"
2. 有相近条目且方向一致(深化/细化/补充) → 标记为"演进"
3. 有相近条目且方向矛盾(替代/转向/否定) → 标记为"转向"
```
### 前后对比格式
演进和转向类条目在确认流程中必须展示前后对比:
```
- [演进][技术偏好] 旧:偏好 React → 新:偏好 React + Next.js 全栈开发
- [转向][产品方向] 旧:面向 C 端个人用户 → 新:转向 B 端企业客户 ⚠️
```
### 用户选择
对每条演进/转向条目,用户可以:
- **确认更新**:用新条目替换旧条目
- **保留两者**:旧条目不动,新条目作为补充追加(适用于不同细分维度)
- **放弃**:不记录本条
## 数据文件模板
首次使用时,如对应文件不存在,按以下模板创建。
### user-profile.md
```markdown
# User Profile
## 审美与设计
## 技术偏好
## 做事风格
## 沟通偏好
## 产品理解
```
### user-profile-log.md
```markdown
# User Profile Log
详细记录每次画像更新的完整上下文,按时间正序追加。
## 记录
```
### project-profile.md
```markdown
# Project Profile
## 项目定位
## 技术栈与架构
## 设计约定
## 产品方向
```
### project-profile-log.md
```markdown
# Project Profile Log
详细记录每次项目画像更新的完整上下文,按时间正序追加。
## 记录
```
### Log 条目格式
每次写入 Log 时,追加以下格式的条目:
```markdown
### YYYY-MM-DD — 简短标题
- **分类**: 对应的精简 Profile 分类名
- **精简版**: 写入精简 Profile 的那一行内容
- **原始上下文**: 用户原话或对话中的关键语句
- **来源对话**: [对话简述](chat-uuid)
- **操作**: 新增 / 演进(旧值 → 新值)/ 转向(旧值 → 新值)/ 删除
```
## 分类扩展
预设的分类列表可以扩展。当检测到的信息不属于任何现有分类时:
```
1. 在确认流程中标注"建议新增分类: [分类名]"
2. 用户确认后在精简 Profile 中新增该分类的 H2 标题
3. 注意硬上限,新增分类会占用行数
```
## 与其他系统的协作
| 系统 | 关系 | 说明 |
|------|------|------|
| `profile-recall` Rule | 下游消费者 | 每次会话读取精简 Profile 并注入上下文 |
| `epee-orchestrator` | 注册 | 在 registry.md 中注册本 Skill |
## 自迭代日志
本节记录使用本 Skill 过程中发现的必要检查项。
### 已知必要检查
(暂无)