# Wechat Persona Insight

> 微信聊天数据心理画像分析：基于本机已解密的微信 vault，分析用户自身人格特征与性格弱点、两两关系深度复盘（谁在索取、谁在付出、抢功/甩锅/金钱往来检测）、以及全关系网画像，输出带数据证据的性格优化建议。当用户说"分析我和XX的关系/聊天"、"XX是什么样的人"、"总结我的性格/人格/弱点"、"给我画个像"、"关系复盘"、"我该不该深交XX"时使用。数据层依赖 yichen-wechat-local-vault（vault 未解密时先走该 skill 的抓密钥+解密流程）。

- Skill: `vibeinging/wechat-persona-insight` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add vibeinging/wechat-persona-insight`
- Raw SKILL.md: https://api.skillmd.com/api/skills/vibeinging/wechat-persona-insight/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: vibeinging (https://skillmd.com/u/vibeinging)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/vibeinging/wechat-persona-insight

---


# 微信人格与关系洞察（wechat-persona-insight)

在已解密的微信本地 vault 之上做行为与语言模式分析。定位：**分析层**——数据获取/解密归 `yichen-wechat-local-vault`，本 skill 负责"从消息到人格结论"。

## 数据层硬坑（必读，全部实测踩过）

先读 [references/pitfalls.md](references/pitfalls.md)。核心五条：

1. 消息分布在 `message/message_0.db` 和 `message/message_1.db` **两个库**，只查一个会漏整段时间的数据。
2. `real_sender_id` 是**各库自己的 Name2Id 表 rowid**，两个库映射不同，必须分库解析身份。
3. 消息体可能是 zstd 压缩的 BLOB，压缩标志列名是 `WCDB_CT_message_content`，不是 `compression_flag`。
4. 会话表名 = `Msg_ + md5(username)`；群名在 `contact` 表的 `nick_name`，session 表里的 name/summary 只是消息预览。
5. `chatroom_member` 只有**当前**成员，查历史发言必须在群 Msg 表里按 sender rowid 反查。

## 前置检查与数据获取（一键）

```bash
python3 <SKILL_DIR>/scripts/chat_stats.py vault      # 只检查
python3 <SKILL_DIR>/scripts/bootstrap.py --yes       # 缺数据时一键打通
```

bootstrap 的行为：已有密钥且仍有效 → 自动增量刷新；缺密钥/密钥失效（微信升级后 salt 轮换）→ 自动完成"复制重签名副本（含 chmod/xattr 坑修复）→ 优雅退出原版 → frida 抓密钥 → 全量解密"。抓密钥阶段会弹系统通知，需要用户在 240 秒窗口内于副本中打开「收藏」和「朋友圈」——**模型此时必须明确告知用户这个操作要求，然后等待**。

关于"不重签名能不能拿到"：不能，已实测。原版微信启用 Hardened Runtime（腾讯团队证书），frida attach 和 spawn 均返回 PermissionDeniedError；SIP 开启时 root 也无法注入此类进程。重签名副本是唯一不关 SIP 的路径。

## 三种分析场景

### 场景 A：两两关系深度分析（"分析我和XX的关系"、"XX能不能深交"）

1. **定位会话**：`chat_stats.py find "名字"`（支持备注/昵称/群名模糊匹配，返回 username）。
2. **结构统计**：`chat_stats.py chat <username>` → 方向比、会话发起比（>6h 间隔）、双方回复延迟、月度方向演变、时间跨度。这些数字直接回答"谁主导、谁更主动、关系冷热走势"。
3. **关系探针**：`relation_probe.py probe <username>` → 主题密度（炒股/工作/生活）、请求:付出比、金钱往来、第三人提及、对方全部群足迹（含已退群）、被反驳后的反应链。
4. **深挖验证**：对探针标记的信号，用 `relation_probe.py context <username> --start "YYYY-MM-DD" --end ...` 拉原文时间线，**结论必须引用原文**。
5. **抢功检测**（工作关系必做）：`relation_probe.py claims <username>` 把对方在群里所有成果型发言与你私聊 48h 内的前驱消息交叉对照。
6. 输出：数据表 + 原文证据 + **公平校准段**（对方真实优点，防止单侧叙事）+ 边界建议。

### 场景 B：自我画像（"总结我的性格/弱点"）

1. **全景排名**：`chat_stats.py top` → 你在全部会话的发言量排名，识别高频关系。
2. **模式扫描**：`pattern_scan.py all`（或指定会话）→ 答应:拒绝比、付出:求助比、情绪词、All-in/冲动表述、FOMO 语句、提问率、时段分布。
3. **亲疏矩阵**：`pattern_scan.py closeness` → 对不同联系人的平均消息长度、情感词密度对比——检验"亲疏倒置"。
4. **跨会话验证**：单会话发现的模式（如全仓思维）要在 ≥3 个会话复现才能升级为"人格特征"，否则只是情境行为。
5. 输出：一个贯穿性结构（不是缺点清单）+ 真实优势校准 + 可执行的落地路径（配额/规则式，不是"要注意"式）。

### 场景 C：全关系网画像

A+B 的组合：先 top 排名 → 对 top 会话批量跑 pattern_scan → 识别关系类型（至亲/消耗/协作/工具）→ 综合画像。报告落在 `docs/analysis/`。

## 分析纪律（防自嗨）

- 每个人格结论必须有：统计数字 + 原文引用 + 出现频次。三者缺一不算结论。
- 语言模式用正则初筛后**必须抽查原文**确认语境（"操"可能是语气词不是情绪失控）。
- 结论分"结构"和"事件"两层：结构（长期比例、分布）权重高于单次事件。
- 对被分析对象的负面结论要主动找反证（他给过什么 credit、付出过什么）。
- 分析用户本人时同样执行：弱点必须配真实优势校准。
- 健康相关信号（如自述疼痛、失眠）只呈现证据原文，提醒就医，不做医学判断。

## 报告规范

- 保存到项目 `docs/analysis/YYYY-MM-DD-主题.md`。
- 结构：一句话画像 → 数据总览 → 证据分层呈现 → 公平校准 → 落地建议。
- HTML 可视化报告：分析完成后把结论写成 insights JSON（字段：`headline` / `paragraph` / `findings[]`{title,detail,stats,quotes} / `fairness` / `advice[]` / `plain`{headline,paragraph,advice}（说人话版，报告下半部分用普通人能懂的自然语言重述） / `relations{名字:{headline,findings,advice}}`；每条结论必须带统计数字与原文引用），然后
  `report_ui.py --deep "名字" --insights <json> --out docs/analysis/wechat-insight-report.html`。
  未注入 insights 时报告只有数据无结论（脚本会提示）；insights JSON 与报告同存于 `docs/analysis/`。
- 隐私：聊天原文只进本地报告文件；对话回复里少量引用必要原文即可；密钥/salt/wxid 不出现在报告中。

## 脚本清单

| 脚本 | 用途 |
|---|---|
| `scripts/bootstrap.py` | 一键获取层：环境检查 → 密钥有效性检测（短路增量）→ 重签名副本+坑修复 → 退出原版 → frida 抓密钥 → 解密 → 验证 |
| `scripts/insight_lib.py` | 共用库：进程内 import 上游 vault_cli，方向判断 `is_me()`（上游把你标为显示名而非"我"） |
| `scripts/chat_stats.py` | `vault` / `find` / `chat <username>` / `top` 四个子命令，结构统计 |
| `scripts/pattern_scan.py` | `all` / `<username>` / `closeness` 自我语言模式扫描 |
| `scripts/relation_probe.py` | 关系探针：`probe` / `claims`（抢功对照）/ `context`（原文时间线） |
| `scripts/report_ui.py` + `assets/template.html` | 生成单文件 HTML 可视化报告（深色仪表盘，零外部依赖零网络请求；周×小时热图、月度输出曲线、全部模式类别可展开证据、关系深析含金钱往来线索），`--deep "名字"` 可重复深挖，`--insights <json>` 注入模型结论区，`--demo` 生成纯合成数据的示例报告（README 展示用，不访问 vault），wxid 全量脱敏 |

脚本只出数不解读；人格判断由 AI 基于本 SKILL.md 的纪律执行。

