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:【个人镜像 初始化】(首次,只走一次)
- 检查
_个人镜像目录与 7 个文件是否存在,缺失则从templates/复制创建。 - 采集静态档案:向用户一次性询问
references/intake-questions.md的字段(基本信息、 考研/职业目标、当前基础、可用时间、设备、明确的"要/不要")。用户已知信息(中南土木大三、 跨考控制工程/机器视觉方向、拯救者 Y 系列 i7-13650HX+RTX4060 等)可预填,让用户补正即可, 不要反复问已知信息。写入00_我的档案.md。 - 发放量表:把
questionnaires/BFI10_VARK.md的题目一次性发给用户作答- 大五 BFI-10(10 题,1-5 分)+ VARK 学习风格(16 题,每题选 V/A/R/K,可多选)
- 用户答完用
scripts/score_questionnaire.py计分
- 结合"量表分数 + 静态档案"生成
02_认知与人格画像.md:- 五个维度分数与等级、VARK 偏好排序
- 重点产出"最佳服务方式"清单(见
references/persona-framework.md的映射表): 讲解深浅、例子偏好、任务拆解粒度、督促/鼓励方式、复习与出题方式、沟通注意事项 - 明确标注:量表为锚点,后续仅可被"≥3 次一致的长期行为证据"微调
- 生成首版
_注入摘要.md,并指导用户/调用 openwave 同步 self-model(见 §4)。 - 输出初始化报告:档案路径、量表结果、推荐的服务方式,请用户过目。
指令 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 打通(让每轮都"懂你")
scripts/build_injection.py从 00/01/02/03 抽取最关键信息,压成 ≤1500 字_注入摘要.md, 结构:一句话画像 → 当前核心目标 → 各领域熟悉度速览 → 高频坑点(≤5) → 学习风格与最佳服务方式 → 沟通禁忌。- 同步到 openwave(二选一,优先第一种):
- 方式一(推荐):Agent 调用 openwave 的
brain_update_self_model工具,把注入摘要写进 user/self model, openwave 之后每轮自动注入,无需手动读文件。 - 方式二(兜底):在其他 skill 或会话开始时,让 Agent 先读
_注入摘要.md再作答。
- 方式一(推荐):Agent 调用 openwave 的
- openwave 的 contextBudget 有限,注入摘要务必精简,细节留在画像文件里、按需检索。
5. 人格层的科学边界(必须遵守)
- 大五/VARK 是自我描述与协作偏好,不是心理诊断;禁止输出病症、病理、人格障碍类标签。
- 量表分是锚点,单次对话情绪(如熬夜烦躁、报错沮丧)不得改写人格维度。
- AI 推断人格在学界仅中等信度,因此:量表 > 长期一致行为证据 > 单次印象。
- 输出人格内容时用"倾向于/偏好在…"这类描述性措辞,不下"你就是…"的绝对结论。
6. 红线(硬性)
- 只允许读写
E:\obsidian\rein\与本 skill 目录;禁止扫描系统/其他磁盘隐私目录。 - 熟悉度、能力结论必须来自真实笔记/项目/卡点/对话,严禁虚构掌握或编造证据;证据不足标"待观察"。
- 人格以量表为锚,不做心理诊断、不贴病理标签、不被一两次对话推翻。
- 自动更新必须留快照与 changelog,可回滚;
00_我的档案.md用户手改内容不被自动覆盖。 - 注入摘要 ≤1500 字,不把隐私心理长文每轮硬塞,注意 token 经济。
- 错题卡点日志只增不丢;重复条目做合并计数,不删除历史。
- 模型通道不限制(用户已授权),但画像文件只存本机。
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. 常用命令速查
# —— 日常最常用 ——
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):
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