Install
openclaw skills install @haiqingge/wechat-chat-analysis微信聊天记录人格分析与恋爱助手。当用户想要分析自己与某人的聊天记录、了解双方性格、进展、问题、改进建议,或问"下一步该怎么回"时触发。使用 wechat-cli 读取本地微信聊天数据,进行结构化分析。
openclaw skills install @haiqingge/wechat-chat-analysis通过 wechat-cli 读取本地微信聊天记录,对两个人的关系进行人格画像、进展评估、问题诊断和回复建议。
wechat-cli/click 会因 cp1252 编码崩溃,所有命令必须写临时文件,不要依赖 pipe 输出:
# ❌ 错误:pipe 获取输出会乱码/报错
wechat-cli sessions --format json # cp1252不能encode中文
# ✅ 正确:重定向到文件
wechat-cli sessions --format json > "$env:TEMP\_sessions.json"
# 然后用 Python 读取文件:
python -c "import json; print(json.load(open(r'$env:TEMP\_sessions.json', encoding='utf-8')))"
| 模式 | 触发时机 | 导出条数 | 分析重点 |
|---|---|---|---|
| 历史模式 | 用户说"分析一下和XX的聊天记录" | --limit 500(全量) | 人格画像、关系进展、问题诊断 |
| 实时模式 | 用户说"看下现在聊得怎么样"/"实时分析一下"/"现在该怎么回" \n 或 正在连续聊时切过来问 | --limit 30(最近一段) | 会话节奏、情绪温度、下一步策略 |
| 多人扫描 | 用户说"看看我这边谁在热聊"/"帮我看下现在和谁在聊" | 扫 sessions 找 active | 列活跃联系人,让用户选 |
情况 A:在最近会话中
wechat-cli sessions --limit 50 --format json > "$env:TEMP\_sessions.json"
读取输出,找到目标聊天。unread 字段 > 0 表示此时对方刚发了消息。如果能用聊天名直接 export,跳到 Step 2。
情况 B:不在最近会话(王萍萍等) 先搜联系人找微信号:
wechat-cli contacts --query "<关键词>" > "$env:TEMP\_contacts.json"
用 Python 解析,找到目标的 wxid_xxx。然后用 wxid 直接 export。
情况 C:确认有聊天但不知道名字 全局搜索:
wechat-cli search "<对方名字>" --limit 10 > "$env:TEMP\_search.json"
确认聊天内容存在,再用 contacts 找到 wxid。
历史模式:
wechat-cli export "<联系人昵称或wxid>" --format markdown --limit 500 > "$env:TEMP\_export.log" 2>&1
实时模式:
wechat-cli export "<联系人昵称或wxid>" --format markdown --limit 30 > "$env:TEMP\_realtime_export.log" 2>&1
多人扫描模式(主动检测谁在热聊): 当用户说"看看谁在聊"或你判断需要先扫一轮时:
$env:PYTHONIOENCODING='utf-8'
python <skills_dir>/scripts/analyze_chat.py --whoishot
检出有未读或最近5分钟活跃的私聊,列出来让用户选。
注意: 运行 Python 脚本时一定要
$env:PYTHONIOENCODING='utf-8',否则 stdout 写中文会 crash。
用户在微信上同时和多人聊天时,用以下方式指定分析对象:
方法一:直接点名
方法二:喊我扫(推荐 )
--whoishot 扫出活跃会话 → 列出来你选 → 再深度分析选中的两种方法的实现:
--chat "名字" → 直接分析指定人--whoishot → 扫活跃会话列表,不分析,只告诉你现在哪些人在活跃注意: 如果上一步找到的是 wxid,直接用它 export。wechat-cli 会自动解析联系人备注名作为 display_name。
检查输出文件中"消息数量: XX"来确认成功。
历史模式 - 用脚本:
python <skills_dir>/scripts/analyze_chat.py --chat "<昵称/wxid>" --limit 500
脚本输出统计报告+原文到文件。
实时模式 - 不要跑脚本: 直接读导出的最近消息,AI 做实时分析。因为实时模式要的不是统计数字,而是会话节奏、情绪曲线、下一轮策略,脚本的统计报告反而多余。
读消息之后按以下框架分析(见下文「实时模式分析框架」)。
## 一、基础数据概览
- 总消息数 / 比例 / 时间跨度 / 日均消息
## 二、双方人格画像
### 你的性格特点
### 对方性格特点
### 互动模式分析
## 三、关系进展评估
- 当前阶段判断
- 关键里程碑
- 亲密度指标
## 四、问题诊断
- 你的不足
- 对方的不足
- 互动问题
## 五、改进建议
## 六、下一步回复(3条策略)
## 会话状态总览
- 正在聊 / 冷场中 / 对方刚回 / 你刚回复
- 本轮持续了多久,几条消息
## 节奏分析
- 回复速度评估(秒回 / 正常 / 拖延)
- 字数趋势(增/减/持平)
- 谁在驱动话题
## 情绪温度
- 当前氛围:热 / 温 / 冷 / 卡住
- 最近的信号检测(绿灯 / 红灯 / 黄灯)
- 和之前比是升温了还是降温了
## ✨ 策略建议
- 这轮该怎么回(推荐方向)
- 节奏建议(立即回 / 晾一下)
- 具体回复参考(1-2条,嵌入当前语境)
- 如果有危险信号,预警提示
详见 references/analysis_framework.md,核心维度:
详见 references/response_templates.md:
↑ 说明很久没聊了。流程:
contacts --query → 找到 wxid → export wxid_xxx → 成功导出
用 wxid 替代联系人昵称 export,效果一样。
所有命令必须重定向到文件,再从文件读取。不要用 capture_output=True 接 pipe,会死在 click 的 click.echo 里。
$env:PYTHONIOENCODING='utf-8'
python analyze_chat.py --whoishot
否则 Python stdout 遇到中文会 cp1252 crash。
分析脚本 analyze_chat.py 版本 V3 包含以下改进:
每条消息之间的回复间隔被精确计算(按时间戳排序,同一人连续发送归为同轮),输出:
--whoishot 自动过滤:
gh_ 开头的公众号brandsessionholder, notifymessage 等服务号@placeholder_foldgroup 等占位会话每次分析自动保存快照到 data/history.json。第二次分析同一联系人时自动输出:
报告最后输出 ## ⏱ 回复建议时间上下文,包含:
AI 生成回复建议时必须基于这些时间数据,不能脱离上下文瞎猜。
60 秒内同一联系人+limit 的导出会用缓存,免去重复调用 wechat-cli(启动快了)。
不再硬绑 Python 3.10。检测顺序:
shutil.which("python3")shutil.which("python")# 记录对某条建议的反馈
python analyze_chat.py --feedback "<建议ID>" "好/中/差"
数据存 data/feedback.json。AI 可以查历史反馈来优化建议质量。