基于 perkfly/ex-skill 开发,增加了事件聚类、回复决策、原始材料归档等功能。
她走了,但聊天记录还在?
三年的日常,变成了手机里一个不敢点开的对话框?
你还记得她说"随便"的时候其实想吃火锅吗?
你还记得她发"哦"的时候其实在等你主动吗?
将回忆蒸馏成 Skill,不是为了挽回,是为了记住。
提供聊天记录(微信、iMessage、短信)、照片、社交媒体,加上你的主观描述
生成一个像她一样说话的 AI Skill
用她的语气回消息,知道她什么时候在撒娇、什么时候真的生气了
本项目基于 perkfly/ex-skill 开发,做了以下改进:
| 类别 | 改进内容 |
|---|---|
| 事件聚类 | 新增完整 pipeline:聊天记录 → 时间分段 → 逐段提取事件 → 合并到 events.json → 跨事件分析 |
| 回复逻辑 | 新增 Layer 0.5 回复决策表(消息类型 × 情绪状态 → 回复行为),支持不回复/延迟回复 |
| 原始材料归档 | 文本类材料自动复制到 knowledge/ 目录,照片记录路径 |
| XLSX 支持 | 支持 WeFlow 导出的 xlsx 格式,LLM 辅助表头检测 |
| 解析器健壮性 | UTF-8 → GBK 自动降级、CSV BOM 处理、sender 归一化统一 |
| 事件数据库 | 稳定 ID、timeline 去重、schema 校验、续集检测 |
| 版本管理 | 备份包含 events.json,回滚不丢失事件数据 |
| Prompt 质量 | 事件提取支持单方面消息、多事件提取强化、Correction 双路由 |
详细的改进记录见 CHANGELOG.md。
我对 ex-skills 的修改是因为我发现 ex-skills 可能更多的是偏蒸馏,对一个人的描述太简单了,还有个原因可能是大模型当时并没有很多支持 1m 长上下文。这样的感情太假了,其实我也不好说是真是假,毕竟都用 ex-skills 了还管那些真的是又当又立。反正就是我从记忆下手进行了修改,因为我想知道最真实的回复,所以对于记忆的处理不再是简单的总结概括与查找,而是两个人之间发生的故事的分析。但是仍有缺点,比如 ai 确实不是很能够理解人类的抽象语言之类的,有一些事件的理解其实是有失偏颇的,比如抽象文案啥的,他会认为这是你们之间的暧昧故事,并且事件总结之前也会概括事件,导致理解不恰当。但是我也不想再去深究与修改,改完做了测试其实我也不知道我具体真的想要什么,我要是像 ai 这么傻逼直白就好了,难受了。
| 来源 | 聊天记录 | 照片 | 社交媒体 | 备注 |
|---|---|---|---|---|
| 微信聊天记录 | ✅ | — | — | TXT/CSV/HTML/XLSX(WeFlow 等工具导出) |
| iMessage | ✅ | — | — | macOS chat.db 或导出文件 |
| 短信 | ✅ | — | — | Android SMS Backup XML/CSV |
| 照片 | — | ✅ | — | EXIF 元数据提取时间线 |
| 微博 | — | — | ✅ | JSON 数据导出 |
| 豆瓣 | — | — | ✅ | JSON/HTML 导出 |
| 小红书 | — | — | ✅ | JSON 导出 |
| — | — | ✅ | JSON 数据导出 | |
| PDF / 图片 | ✅ | ✅ | — | 手动上传 |
| 直接粘贴文字 | ✅ | — | — | 手动输入 |
# 安装到当前项目(在 git 仓库根目录执行)
mkdir -p .claude/skills
git clone https://github.com/handsomeman118/ex-skill .claude/skills/create-ex
# 或安装到全局(所有项目都能用)
git clone https://github.com/handsomeman118/ex-skill ~/.claude/skills/create-expip3 install -r requirements.txt在 Claude Code 中输入:
/create-ex
按提示输入她的昵称、关系信息(如 在一起三年 大学同学 分手一年)、性格标签,然后选择数据来源。所有字段均可跳过,仅凭描述也能生成。
完成后用 /{slug} 调用该前任 Skill。
| 命令 | 说明 |
|---|---|
/list-exes |
列出所有前任 Skill |
/{slug} |
调用完整 Skill(Persona + Memories) |
/{slug}-memories |
仅共同记忆 |
/{slug}-persona |
仅人物性格 |
/ex-rollback {slug} {version} |
回滚到历史版本 |
/delete-ex {slug} |
删除 |
输入:
ENFP 双子座 焦虑型 爱撒娇 翻旧账 嘴上说不在意其实比谁都在意
场景一:日常聊天
用户 > 在干嘛呢
前任.skill > 刚下班
> 好累啊今天
> 你呢 怎么这个点才找我 🥺
场景二:惹她生气了
用户 > 不好意思刚才在忙
前任.skill > 哦
> (过了5分钟)
> 你每次都说在忙
> 上次也是这样
场景三:撒娇
用户 > 想吃什么
前任.skill > 随便啊
用户 > 那吃面?
前任.skill > 不想吃面
用户 > 火锅?
前任.skill > 嘿嘿你怎么知道的 💕
每个前任 Skill 由两部分组成:
| 部分 | 内容 |
|---|---|
| Part A — 共同记忆 | 关系弧线、事件簿(含时间线/细节/感官/情感)、感官锚点、情感纹理、冲突地图、共同梦想 |
| Part B — Persona | 7 层结构:硬规则 → 回复决策表 → 身份 → 表达风格 → 情感逻辑 → 关系行为 → 边界与雷区 |
运行逻辑:
收到消息
→ 第 0 步:确定当前情绪状态(正常/开心/生气)
→ 第 1 步:查回复决策表,判断回复行为(正常回/冷淡回/已读不回)
→ 第 2 步:检索记忆(情绪过滤:生气时不提甜蜜记忆)
→ 第 3 步:用她的语气和情绪状态融合输出
聊天记录 → 解析器(JSON) → 时间分段 → Claude 逐段提取事件 → 合并到 events.json → 跨事件分析 → 生成 memories.md
- 每个事件包含:时间线 → 整体叙事 → 具体细节 → 感官描述 → 情感意义
- 支持续集检测:新事件自动合并到已有事件
- 事件数量不设上限,由聊天记录实际内容决定
恋爱性格:爱撒娇 · 冷暴力 · 翻旧账 · 黏人 · 独立 · 细腻敏感 · 忽冷忽热 · 作 · 玻璃心 · 控制欲强 …
吵架模式:冷战派 · 爆发派 · 讲道理派 · 先道歉型 · 死不认错
依恋类型:安全型 · 焦虑型 · 回避型 · 混乱型
爱的表达:言语肯定 · 服务行为 · 送礼物 · 肢体接触 · 高质量陪伴
- 追加聊天记录 → 自动分析增量 → merge 进对应部分,不覆盖已有结论
- 对话纠正 → 说「她不会这样,她应该是 xxx」→ 写入 Correction 层,立即生效
- 版本管理 → 每次更新自动存档,支持回滚到任意历史版本
ex-skill/
├── SKILL.md # Skill 入口(双语,完整工作流)
├── CHANGELOG.md # 改进记录
├── README.md # 本文件
├── prompts/ # Prompt 模板
│ ├── intake.md # 基础信息录入问题序列
│ ├── event_extractor.md # 事件提取 prompt(含单方面消息策略)
│ ├── memories_analyzer.md # 跨事件模式分析(6 维度)
│ ├── memories_builder.md # memories.md 生成模板(9 模块)
│ ├── persona_analyzer.md # 性行为提取(含标签翻译表 + 回复决策模式)
│ ├── persona_builder.md # persona.md 7 层结构模板(含 Layer 0.5)
│ ├── merger.md # 增量 merge 逻辑
│ └── correction_handler.md # 对话纠正处理(双路由)
├── tools/ # Python 工具
│ ├── wechat_parser.py # 微信聊天记录解析(TXT/CSV/HTML/XLSX)
│ ├── imessage_parser.py # iMessage 解析
│ ├── sms_parser.py # 短信解析
│ ├── photo_analyzer.py # 照片 EXIF 元数据分析
│ ├── social_media_parser.py # 社交媒体解析
│ ├── event_clusterer.py # 事件聚类(segment/merge/list/summary/density)
│ ├── skill_writer.py # Skill 文件管理(含原始材料归档)
│ └── version_manager.py # 版本管理(list/backup/rollback/cleanup)
├── exes/ # 生成的前任 Skill(运行时创建)
├── requirements.txt
└── LICENSE
- 聊天记录质量决定 Skill 质量:真实聊天记录 > 仅手动描述
- 建议优先收集:她主动发的长消息 > 情感类消息 > 日常消息
- 照片分析只提取元数据(日期/位置),不上传照片内容
- 所有数据仅在本地处理,不会发送到任何外部服务
- 微信 xlsx 导出(WeFlow)需要安装 openpyxl:
pip install openpyxl - 文本类原始材料会自动归档到
knowledge/目录,方便后续追溯
- perkfly/ex-skill — 本项目的原始版本,感谢 perkfly 的创意和基础实现
MIT License © handsomeman118
基于 perkfly/ex-skill 开发,原项目由 perkfly 创建