# Personal Twin

> 个人镜像（Personal Twin）：构建并持续维护一份关于"用户本人"的结构化画像，让 OpenClaw 能针对用户的知识水平、学习风格、性格倾向和易错点提供个性化服务。三层画像：①静态档案 （基本情况/目标）②证据驱动的能力熟悉度画像（不做严格 BKT 知识追踪，只依据笔记/项目/对话/ 错题卡点做 0-4 级熟悉度估计）③认知与人格画像（大五 BFI 量表打底 + 学习风格 VARK + AI 长期 微调，人格以量表为锚、不做心理诊断）。画像目录固定为 E:\obsidian\rein\_个人镜像\，每次更新 生成精简《_注入摘要.md》并同步到 openwave self-model，实现每轮自动"懂你"。 触发指令：【个人镜像 初始化】（首次：建档案+做量表）、【记录卡点】<一句话问题/错误/解决>、 【个人镜像 刷新】（立即全量重算）、【我现在什么水平】（读取画像出分析）、【更新档案】。 更新策略：默认静默自动更新（Windows 任务计划 PersonalTwin-Daily 每日23:00增量、 PersonalTwin-Weekly 周日21:00全量；用系统计划而非 smart-cron，电脑开机即跑、不依赖 OpenClaw 网关在线）， 每次留快照与 changelog， 用户随时可查 04_成长轨迹.md。红线：只扫描指定 Obsidian 库；熟悉度必须带证据与时间、不编造掌握； 人格以量表为锚、AI 只能补充不能被一两次对话推翻、不贴病理标签；自动更新留快照可回滚。

- Skill: `reinforce52/personal-twin` (Agent Skill, multi-file: 21 files)
- Install (CLI): `npx skillmds@latest add reinforce52/personal-twin`
- Raw SKILL.md: https://api.skillmd.com/api/skills/reinforce52/personal-twin/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: reinforce52 (https://skillmd.com/u/reinforce52)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/reinforce52/personal-twin

---


# personal-twin — 个人镜像（个性化自适应服务中枢）

> 目标：让 Agent 从"通用助手"变成"了解用户的专属助手"。
> 不新引入记忆框架——**长期记忆与每轮注入复用 openwave，定时复用 smart-cron，数据源复用
> Obsidian 四库（01每日日志/02学习库/03项目库/04简历库）**。本 skill 只负责"产出并维护画像"。

---

## 0. 画像文件布局（固定，禁止改路径）

根目录：`E:\obsidian\rein\_个人镜像\`

| 文件 | 作用 | 谁更新 |
|---|---|---|
| `00_我的档案.md` | 基本情况、目标、背景、设备、硬约束 | 用户给一次，可手改；【更新档案】 |
| `01_能力画像.md` | 各领域 0-4 级熟悉度 + 证据 + 高频坑点（人读版） | 自动（P1） |
| `mastery_data.json` | 能力画像结构化数据（供其他 skill 读取） | 自动（P1） |
| `02_认知与人格画像.md` | 大五分数 + VARK 学习风格 + 推导的"最佳服务方式" | 量表打底+AI微调 |
| `03_错题卡点日志.md` | 问过的问题/犯的错/解决方法（**能力画像核心信号源**） | 用户随手记，Agent 补全结构 |
| `04_成长轨迹.md` | 每周快照对比、里程碑、薄弱点变化曲线 | 自动追加 |
| `_注入摘要.md` | ≤1500 字精简画像，同步 openwave self-model | 自动 |
| `05_自适应服务参数.md` | P2 服务参数：各领域讲解深度/风格/例子 + 下一步推荐（其他 skill 接入用） | 自动 |
| `snapshots/` | 每次全量更新的历史快照（可回滚） | 自动 |

---

## 1. 触发指令与处理流程

### 指令 A：【个人镜像 初始化】（首次，只走一次）

1. 检查 `_个人镜像` 目录与 7 个文件是否存在，缺失则从 `templates/` 复制创建。
2. **采集静态档案**：向用户一次性询问 `references/intake-questions.md` 的字段（基本信息、
   考研/职业目标、当前基础、可用时间、设备、明确的"要/不要"）。用户已知信息（中南土木大三、
   跨考控制工程/机器视觉方向、拯救者 Y 系列 i7-13650HX+RTX4060 等）可预填，让用户补正即可，
   **不要反复问已知信息**。写入 `00_我的档案.md`。
3. **发放量表**：把 `questionnaires/BFI10_VARK.md` 的题目一次性发给用户作答
   - 大五 BFI-10（10 题，1-5 分）+ VARK 学习风格（16 题，每题选 V/A/R/K，可多选）
   - 用户答完用 `scripts/score_questionnaire.py` 计分
4. 结合"量表分数 + 静态档案"生成 `02_认知与人格画像.md`：
   - 五个维度分数与等级、VARK 偏好排序
   - **重点产出"最佳服务方式"清单**（见 `references/persona-framework.md` 的映射表）：
     讲解深浅、例子偏好、任务拆解粒度、督促/鼓励方式、复习与出题方式、沟通注意事项
   - 明确标注：量表为锚点，后续仅可被"≥3 次一致的长期行为证据"微调
5. 生成首版 `_注入摘要.md`，并指导用户/调用 openwave 同步 self-model（见 §4）。
6. 输出初始化报告：档案路径、量表结果、推荐的服务方式，请用户过目。

### 指令 B：【记录卡点】<一句话>（最高频，超低摩擦）

- 用户只需一句话，例如：【记录卡点】搞不清 BKT 里 p-slip 和 p-guess 区别，后来发现一个是蒙对一个是手滑
- Agent 自动补全为结构化条目（领域/知识点/问题类型/错误原因/解决方法/可迁移教训/日期），
  追加到 `03_错题卡点日志.md`，格式严格遵循 `references/evidence-schema.md`。
- **重复检测**：若同一知识点已有同类卡点，累加"出现次数"并标记 🔺高频（≥2 次）。
- 这是能力画像最真实的信号：错题/卡点比笔记更能定位短板。
- 追加后做一次轻量熟悉度修正（该知识点熟悉度不下调，但在"高频坑点"加权），并刷新注入摘要。

### 指令 C：【个人镜像 刷新】（立即全量）

执行 §3 的完整更新流水线（等同周日全量任务），完成后报告本次变化 diff。

### 指令 D：【我现在什么水平】

- 不重算，直接读 `01_能力画像.md` + `03_错题卡点日志.md` + `mastery_data.json`，
  输出：当前各领域熟悉度总览、最该补的 3 个短板、最近反复出错点、建议下一步动作。
- 若 `01_能力画像.md` 尚不存在（还没跑过刷新），先执行一次 `python scripts/run_refresh.py` 再分析。

### 指令 E：【更新档案】

用户口述变化（换目标、考完试、新设备等），更新 `00_我的档案.md`，留修改时间，刷新注入摘要。

---

## 2. 能力熟悉度模型（证据驱动，非 BKT）

> 用户不做严格做题记录，因此**不使用贝叶斯知识追踪**；改用"证据计数 + 衰减 + 错题加权"的启发式
> 0-4 级估计。评分规则详见 `references/familiarity-rubric.md`，Agent 不得凭感觉打分，必须能指出证据。

- **等级**：0 未接触 / 1 见过(能认) / 2 能复述(懂概念) / 3 能应用(做题/写代码/做成项目) / 4 能教别人(能讲清+迁移)
- **证据来源与权重**：
  - 学习库有该知识点笔记 → 基础证据
  - 项目库实际用到/跑通 → 强证据（可到 3）
  - 能向他人讲清/输出费曼总结/多次复现 → 到 4 的证据
  - 错题卡点：出现 1 次=标记薄弱点；同类 ≥2 次=🔺高频坑点，封顶该点评级直到"解决后复现正确"
  - 最近时间衰减：超过 30 天无任何接触，评级标注"生疏风险"（不自动降级，只提示）
- 每个知识点条目必须带：`等级 / 证据列表(出处+日期) / 最近接触 / 关联卡点 / 下一步`
- 领域划分跟随用户实际：控制工程、机器视觉(OpenCV/PyTorch)、土木力学数学、英语六级、编程工程化、求职等，
  不预设死，扫描时按 Obsidian 目录与笔记 frontmatter(topic/tags) 自动归类。

### 2.1 落地评级口径（脚本已实现，保守、可复算、不调 LLM）

区分"输入"与"输出"，避免看课多就虚高（这是最容易出错的地方）：

- **课程/视频笔记是输入，最高 2 级**：frontmatter 带 `platform` 或 tags 含"视频笔记/课程/bilibili"的，
  哪怕字数多、出现"实现/项目"等词，也只算"能复述(2)"，不算会应用。
- **导航文件不算实践**：`_MOC/_总览/_知识谱系/索引` 里的 ``` 块多是 mermaid/结构图，不作为代码实践证据，最高 2 级。
- **到 3 级必须有自己的输出型实践**：在 03-项目库且（真实代码≥10 行 或 status=已完成）；
  或标题明确是"复现/实战/亲手实现"。只注释/研读别人代码（如课程 report）仍算 2。
- **到 4 级**：用户自己命名的费曼输出（非课程、≥500 字、结构化），且该领域实践≥2、知识点≥8（覆盖面够才谈"能教迁移"）。
- 领域等级聚合：有真实实践→3；只有笔记且≥3 篇→2；仅 1-2 篇→1。求职/简历材料不评掌握度。
- 时间衰减只提示不降级：>30 天标 ⚠️、>60 天标 🔕。规则源码在 `scripts/update_mastery.py`，改口径只改这一个文件。

---

## 3. 更新流水线（静默自动，留痕可查）

**一键入口 `scripts/run_refresh.py`**：先 `update_mastery.py`（扫描→评级→画像/快照）再 `build_injection.py`（注入摘要），定时任务只调这一条。

| 时机 | 触发 | 实际命令 | 产出 |
|---|---|---|---|
| 每日 23:00 | Windows 计划任务 `PersonalTwin-Daily` → `refresh_daily.bat` | `python run_refresh.py` | 重算 01 画像/mastery_data.json + 刷新注入摘要 |
| 周日 21:00 | Windows 计划任务 `PersonalTwin-Weekly` → `refresh_weekly.bat` | `python run_refresh.py --full` | 额外存 `snapshots/日期.json`、与上周对比追加 04 成长轨迹 |
| 立即 | 对话里【个人镜像 刷新】 | 同上（等同 --full） | 完成后报告本次 diff |

> 为什么用 Windows 任务计划而不是 smart-cron：OpenClaw 网关一关，内部定时就失效；系统计划任务只要电脑开机就会跑，日志在 `logs/refresh.log`。电脑当时关机则错过当次（不会补跑，可次日手动【个人镜像 刷新】）。

### 脚本职责
- `scan_libraries.py`：遍历 `E:\obsidian\rein`（+额外库 `E:\obsidian\考研英语长难句`），解析 frontmatter/字数/代码行/双链/修改时间，排除 `.obsidian/_个人镜像/非学习内容`，输出文件级证据。可单独跑看分类概览。
- `update_mastery.py`：按 §2.1 口径做文件级→领域级 0-4 评级，关联 03 高频坑点、时间衰减、算短板 TOP3，写 `mastery_data.json` 与 `01_能力画像.md`；`--full` 再做快照与成长轨迹。
- `adaptive_service.py`（P2）：读 mastery_data.json + 00 档案，输出**服务参数**（每个领域讲解深度/风格/例子/节奏）与**下一步推荐**（熟悉度低+缺实践+时间衰减+成绩硬证据→P0/P1/P2 行动）。`--profile` 出 JSON 供 skill 读取，`--out` 落盘 05 文件。
- `run_refresh.py`：三步串联（评级→注入摘要→服务参数），定时只调它。
- 运行环境：计划任务固定用系统 Python（仅用标准库，无需装包）；bat 内设 `PYTHONUTF8=1` 防中文日志乱码。

### 每周全量额外做的人格层
汇总本周对话/卡点中的行为证据，若与量表锚点出现 ≥3 次一致偏差，提出"微调建议"（**只建议、写待确认区，不擅自改量表分**，等用户【我现在什么水平】时确认）。

> 自动更新默认不打扰用户；所有改动写快照与 04 成长轨迹，可回溯、可回滚。

---

## 4. 注入摘要与 openwave 打通（让每轮都"懂你"）

1. `scripts/build_injection.py` 从 00/01/02/03 抽取最关键信息，压成 ≤1500 字 `_注入摘要.md`，
   结构：一句话画像 → 当前核心目标 → 各领域熟悉度速览 → 高频坑点(≤5) → 学习风格与最佳服务方式 → 沟通禁忌。
2. 同步到 openwave（二选一，优先第一种）：
   - **方式一（推荐）**：Agent 调用 openwave 的 `brain_update_self_model` 工具，把注入摘要写进 user/self model，
     openwave 之后每轮自动注入，无需手动读文件。
   - 方式二（兜底）：在其他 skill 或会话开始时，让 Agent 先读 `_注入摘要.md` 再作答。
3. openwave 的 contextBudget 有限，注入摘要务必精简，细节留在画像文件里、按需检索。

---

## 5. 人格层的科学边界（必须遵守）

- 大五/VARK 是**自我描述与协作偏好**，不是心理诊断；禁止输出病症、病理、人格障碍类标签。
- 量表分是锚点，单次对话情绪（如熬夜烦躁、报错沮丧）**不得**改写人格维度。
- AI 推断人格在学界仅中等信度，因此：量表 > 长期一致行为证据 > 单次印象。
- 输出人格内容时用"倾向于/偏好在…"这类描述性措辞，不下"你就是…"的绝对结论。

---

## 6. 红线（硬性）

1. 只允许读写 `E:\obsidian\rein\` 与本 skill 目录；禁止扫描系统/其他磁盘隐私目录。
2. 熟悉度、能力结论必须来自真实笔记/项目/卡点/对话，**严禁虚构掌握或编造证据**；证据不足标"待观察"。
3. 人格以量表为锚，不做心理诊断、不贴病理标签、不被一两次对话推翻。
4. 自动更新必须留快照与 changelog，可回滚；`00_我的档案.md` 用户手改内容不被自动覆盖。
5. 注入摘要 ≤1500 字，不把隐私心理长文每轮硬塞，注意 token 经济。
6. 错题卡点日志只增不丢；重复条目做合并计数，不删除历史。
7. 模型通道不限制（用户已授权），但画像文件只存本机。

---

## 7. 分阶段路线

- **P0（已完成）**：skill 骨架 + 档案 + BFI-10/VARK 量表与计分 + 认知人格画像框架 + 错题卡点机制 + 注入摘要/openwave 打通。
- **P1（已完成）**：四库扫描 `scan_libraries.py`、熟悉度计算 `update_mastery.py`、`run_refresh.py` 一键入口、mastery_data.json、01 能力画像、snapshots 快照与 04 成长轨迹、Windows 计划任务每日/每周静默定时。
- **P2（已完成核心）**：`adaptive_service.py` 统一读取入口——其他 skill / Agent 用 `--profile` 拿各领域讲解深度与风格、`--next` 拿"下一步学什么"；推荐融合熟悉度+时间衰减+**00 档案成绩硬证据**（如数学66/力学63/六级363未过→P0 补课项）；05 服务参数文件随每次刷新自动更新。
- **P2 已完成接入**：`video-to-knowledge`、`topic-knowledge-base`、`material-to-knowledge-base`、`resume-builder`、`deep-research` 五个 skill 的 SKILL.md 已加"自适应接入"钩子（统一约定见 `references/adaptation-guide.md`），在各自关键环节读取画像参数调整深度/例子/输出形式；读不到画像按通用方式执行不阻塞。
- **P2 剩余**：①用户填完 BFI-10/VARK 量表后补全 02 人格画像、计分并同步 openwave self-model（量表已填，02 已生成；openwave self-model 同步需在 OpenClaw 侧调 brain_update_self_model）；②基于熟悉度+艾宾浩斯轻量推荐复习节奏（仍不做严格 BKT）。

---

## 8. 常用命令速查

```bash
# —— 日常最常用 ——
python scripts/run_refresh.py            # 一键：扫描评级 + 刷新注入摘要（=每日任务）
python scripts/run_refresh.py --full     # 全量：额外快照 + 成长轨迹（=周日任务/手动刷新）

# —— 分步调试 ——
python scripts/scan_libraries.py         # 只扫描，看领域/类型分类概览
python scripts/update_mastery.py --full  # 只重算画像+快照
python scripts/build_injection.py        # 只重生成注入摘要
python scripts/adaptive_service.py       # P2：服务参数+下一步推荐（--profile/--next 出 JSON）

# —— 量表计分（用户答完题后）——
python scripts/score_questionnaire.py --bfi "4,3,5,2,4,2,4,3,2,4" --vark "V,A,R,K,..."
```

计划任务管理（PowerShell）：

```powershell
schtasks /query  /tn "PersonalTwin-Daily" /fo list   # 查状态/下次运行
schtasks /run    /tn "PersonalTwin-Daily"            # 立即手动触发一次
schtasks /change /tn "PersonalTwin-Daily" /st 22:30  # 改时间
schtasks /delete /tn "PersonalTwin-Daily" /f         # 卸载（Weekly 同理）
# 日志：skills/personal-twin/logs/refresh.log
```

