源码解读①前任.skill 微信解析器 wechat_parser.py 如何过滤噪音、提取高价值消息【免费下载链接】ex-skill前任 skill项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skillex-skill前任.skill是一个把聊天记录蒸馏成 AI 的开源 Skill 项目导入微信、iMessage、短信等原材料后生成一个像她一样说话的 AI。而整个流水线的第一道工序就是 tools/wechat_parser.py——一个专门的微信解析器。它要解决两个问题从几十 MB 的聊天记录里过滤噪音图片、语音、转账占位符并提取高价值消息长消息、情感类消息。本文带你完整读懂它的五步处理逻辑。项目背景解析器在整条流水线里的位置在 SKILL.md 定义的主流程中微信聊天记录是原材料导入的首选来源方式 A解析wechat_parser.py读取导出文件产出结构化消息分析AI 依据 prompts/memories_analyzer.md 提取时间线、偏好、情感模式生成写入exes/{slug}/memories.md等文件最终得到如 exes/example_xiaomei/memories.md 这样的共同记忆也就是说解析器提取的质量直接决定最终 Skill 的像不像。解析流程总览一个文件进一份记忆素材出整条处理链可以概括为一句话自动识别格式 → 按人筛选 → 正则/HTML 捕获消息 → 噪音过滤 → 三类分桶加权 → 输出 Markdown入口在main()用户只需一条命令python3 tools/wechat_parser.py --file chat.txt --target 小美 --output out.txt其中--target是关键只保留这个目标人物发出的消息——因为项目要还原的是她对方发的消息在这里只是背景不是分析对象。第一步按扩展名自动分发三种解析器tools/wechat_parser.py#L269-L276 的分发逻辑非常直白文件后缀解析器说明.html/.htmWechatHTMLParser解析 WechatExporter 导出的网页.csvparse_wechat_csv兼容中英文列名其他默认parse_wechat_txt正则匹配行格式HTML 版走的是标准的状态机思路WechatHTMLParser 监听sender/content/time三类标签消息拼接完成后才判断发送人是否包含目标姓名不是的话直接丢弃L54。CSV 版则贴心地做了列名兜底L138-L149sender/发送人/from/NickName任意一种都能识别不同导出工具的文件都能读。第二步一条正则通吃 TXT 导出的多种时间格式TXT 解析是工作量最大的一块L73-L128核心是这条正则L83-L85r^(?Ptime\d{4}[-/]\d{1,2}[-/]\d{1,2}[\s\d:]*)\s(?Psender.?)[:]\s*(?Pcontent.)$它能同时兼容2024-01-01 10:00:00和2024/01/01 10:00两种日期写法以及中英文冒号。还有一个细节很实用多行消息不会断。如果某一行匹配不上正则它会作为续行追加到当前消息内容里L105-L107——所以她发的那段小作文不会被切散。第三步️ 噪音过滤把占位符挡在门外tools/wechat_parser.py#L115-L119 维护了一份黑名单[图片][视频][语音][表情][文件][位置][名片][链接][红包][转账][撤回了一条消息]以及imgvideoaudio这类未转义标签命中任意一条即整条丢弃。为什么要这么狠因为这些占位符对理解她毫无信息量却会大量占用 AI 的上下文窗口稀释真正有价值的内容。同时空消息纯空白也会被一并过滤L122-L123。这一步的哲学给 AI 的不是全部聊天记录而是降噪后的信号。第四步 三类分桶给高价值消息加权extract_key_content() 是含金量所在它按优先级把消息分进三个桶桶判定规则用途长消息最高权重超过 50 字心情、想法、重要表达情感类消息命中情感关键词情感逻辑分析日常沟通其余说话风格参考注意判定顺序先看长度再看情感词——一段 50 字以上的长文即使不含关键词也会优先进入长消息桶。情感关键词表L186-L192很见功力想你、舍不得、吵架、冷战、和好、翻旧账场景词……中英文都覆盖miss、love、sorry。这些词恰恰对应着 prompts/memories_analyzer.md 中冲突与修复模式情感动态两大提取维度。第五步按权重排布输出直接喂给 AIformat_output() 生成的是一份带权重的 Markdown长消息心情/想法类权重最高——全量输出情感类消息——全量输出日常沟通风格参考——最多 200 条L249防止日常碎语淹没重点这份文件随后被 AIRead进去交给 prompts/memories_analyzer.md 和 prompts/persona_analyzer.md 完成记忆与性格的提取全部在本地完成不上传任何外部服务。设计小结三行代码之外的好设计只提一人--target贯穿所有解析分支从源头聚焦她先降噪再分类占位符先被拦掉分类桶里只剩有效信息优先级即权重长消息 情感 日常输出顺序本身就是给 AI 的提示防御式解析中英文列名、多种时间格式、多行续行兼容不同导出工具延伸阅读想继续深入源码推荐按这条路线读tools/wechat_parser.py本文主角微信解析全流程tools/sms_parser.py / tools/imessage_parser.py短信与 iMessage 解析思路同源prompts/memories_analyzer.md解析结果之后的记忆提取维度prompts/persona_analyzer.md性格与表达风格提取含标签翻译表exes/example_xiaomei/一份完整的前任 Skill 示例memories persona metaINSTALL.md安装方式详解【免费下载链接】ex-skill前任 skill项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考