源码解读①:前任.skill 微信解析器 wechat_parser.py 如何过滤噪音、提取高价值消息

发布时间:2026/10/2 22:19:02

源码解读①:前任.skill 微信解析器 wechat_parser.py 如何过滤噪音、提取高价值消息 源码解读①前任.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),仅供参考
延伸阅读

更多相关文章

2026/10/2 22:19:02

Bootstrap5分页实战:从组件渲染到后端联动与深分页优化

做后台系统这些年,Bootstrap5的分页(pagination)组件几乎每个项目都会碰。它看着简单,无非是一排带数字的链接,可真要把它和真实接口对接起来,你会发现坑比想象中多:样式偶尔错位、点击没反应、…

2026/10/2 22:19:02

少走弯路:2026年顶尖AI论文网站榜单,AI工具一键写高质论文

2026 年实测 10 款主流 AI 论文工具,千笔AI 以全流程覆盖 语义级降重 免费查重领跑综合榜;ThouPen 稳坐留学生毕业全流程工具头把交椅;免费工具中 DeepSeek Scholar、豆包学术版表现亮眼,30 分钟即可生成万字高质量初稿&#xf…

2026/10/2 22:14:01

告别无效社交:如何建立真正彼此照亮的关系

前阵子和一个老朋友喝酒,他说了一句话让我愣了很久:“我通讯录里三千人,真正能在凌晨两点打电话说‘我撑不住了’的,不超过三个。”这句话让我开始认真面对“拒绝无效社交,做彼此的照亮者”这件事。过去几年&#xff0…

2026/10/2 23:14:29

WSL2 Ubuntu 20.04 纯root环境配置:彻底告别sudo与权限问题

直接说结论:如果你和我一样,在Windows下用WSL2跑Ubuntu 20.04做日常开发,不想每次敲命令都跟sudo较劲,那“纯root环境”这一套配置值得你花十分钟折腾一次。这个方案的核心思路很简单——把WSL2默认用户从普通的ubuntu用户改成roo…

2026/10/2 23:14:29

AI Agent-Manus 构建经验解读(上):KV 缓存与上下文工程实战拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 23:14:29

容器化Java服务Dockerfile集成SkyWalking APM避坑指南

最近给一个 Java 服务做容器化改造,正好赶上要给系统接 SkyWalking 做链路追踪,就想在 Dockerfile 里直接把 agent 打进镜像,省得每次发布还要单独挂目录、搞版本同步。第一版写得很顺,以为加个-javaagent就完事了,结果…

2026/10/2 23:14:29

AMD 显卡别慌,先花 3 分钟查清楚你能不能跑 ComfyUI

你是不是打开 AMD 驱动面板,看着型号一脸茫然,不知道自己的卡到底能不能跑 ComfyUI? 别慌,我第一张 AMD 卡是 RX 580,当时连 ROCm 是什么都不知道,照样一步步摸过来了。 这篇不装 ComfyUI,只做三…

2026/10/2 23:09:29

final 关键字

一、final 关键字概述final是最终、不可改变的意思,可以用来修饰类、方法、变量。 被 final 修饰之后,内容就不能被修改,不同修饰对象效果完全不同。二、final 修饰类1. 核心规则final 修饰的类叫最终类,不能被继承,没…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/2 18:20:53

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 10:48:55

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/2 0:02:57

PWN入门:从栈溢出原理到ROP链实战

1. 这不是“学PWN”,是重新理解你每天敲的每一行C代码我第一次在CTF赛场上写出能控制程序流的exp时,手抖得连gdb的c命令都输错三次。那道题只有23行C代码,一个gets()调用,一个printf(),一个return——它甚至没开NX&…

2026/10/2 0:02:57

Windows下cudaMallocHost显存占用之谜:WDDM与TCC模式差异及优化方案

1. 一个反直觉的显存占用现象第一次在 Windows 上看到cudaMallocHost把显存吃掉的时候,我的反应是打开任务管理器反复确认了三遍。明明调用的是主机端锁页内存分配,按 CUDA 文档的说法,这块内存应该落在系统 RAM 里,跟 GPU 的显存…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑