桌面开发6 min8 次浏览

拾语:让微信聊天记录变成可以提问的记忆

想象一个很具体的场景:你记得三年前和某个朋友聊过一件很重要的事,只记得大概聊过「预算」和「周五」,但翻了半小时聊天记录还是没找到。微信自带的搜索能按关键词定位到某几条消息,可它回答不了「我们当时到底商量的什么」——它只会把消息一条条列给你,阅读和归纳还是你自己的事。 「拾语」(Shiyu,版本 1.…

拾语:让微信聊天记录变成可以提问的记忆
目录(展开)

想象一个很具体的场景:你记得三年前和某个朋友聊过一件很重要的事,只记得大概聊过「预算」和「周五」,但翻了半小时聊天记录还是没找到。微信自带的搜索能按关键词定位到某几条消息,可它回答不了「我们当时到底商量的什么」——它只会把消息一条条列给你,阅读和归纳还是你自己的事。

「拾语」(Shiyu,版本 1.1.0)解决的就是这一步:它直接读本机微信的聊天数据库,把任意会话、任意时间段的消息变成可以提问、可以总结的语料。你选中一段对话,问「我们上次约定的交付时间是什么」,它给出答案,并附上「引用 N 条」——点开就能在聊天记录里定位到它依据的那几条消息。

它是什么

项 值
形态 Windows 桌面应用(Electron + React 19,无边框窗口)
数据来源 直连本机微信数据库,支持微信 3.x(WeChat Files)与 4.x(xwechat_files)
解密 自实现 SQLCipher 解密,全程在本机完成
模型服务 DeepSeek / GLM / 任意自定义 OpenAI 兼容接口
网络行为 仅在你点「提问 / 总结 / 测试模型」时,把选中片段发给你填写的接口地址
存储 全部本地:%APPDATA%\shiyu,API Key 与密钥环经系统密钥链加密

它不依赖 chatlog 这类外部导出工具,也不用你先做一次「备份 → 解析」的流程。微信数据库就在你自己的电脑上,拾语直接读它——这决定了它的两个特性:实时(微信来新消息,点一下刷新就有)和离线(除了发给模型的请求,什么都不出网)。

三步开始

首次启动是一个三步引导,每一步都在设置里完成:

  1. 确认数据目录。拾语按一套固定顺序自动检测:设置里填的目录 → %APPDATA%\Tencent\xwechat\config\*.ini 里记录的 4.x 保存目录 → 文档目录等常见位置 → 各盘符浅层查找。微信把数据放在 E:\Documents\byWechat\xwechat_files 这种非默认位置也能自动找到,找不到再手动选一次。
  2. 获取密钥。微信的聊天库是加密的,拾语提供「自动获取密钥」:微信保持登录时点一下,1~2 秒内扫完微信进程内存,拿到全部密钥并存入本机密钥环,下次启动不再重复。技术上怎么做到的,见另一篇文章《解开「每库一钥」》。
  3. 填 API Key。DeepSeek 或 GLM 的 Key 粘贴进去,点「测试模型」看到 连接成功 · 模型名 · N ms 即可。Key 只存本机,只发给你填写的地址。

之后的主界面就是三栏:左侧会话列表(带最近 7 天 / 30 天 / 全部筛选),中间聊天记录(时间正序、跨天分隔、长消息折叠),右侧 AI 问答面板。每 60 秒轻量检查一次会话表,有新消息的会话时间会变红。

提问与总结,各自怎么工作

提问:当前会话、当前日期范围内的消息是材料。不超过上下文预算(默认 20000 字)时整段交给模型;超过时按关键词切段打分,只带相关片段和前后文——回答下方会如实标注「检索 x/y 段 · n 字」,你能看到模型到底看了什么。

总结:同一份材料,超长时先分段提炼再汇总(map-reduce),你可以留空让它出摘要,也可以写上关注点让它带着问题总结。

三个细节值得单独说:

  • 引用可核对。回答下方显示「引用 N 条」,点开会左侧定位并高亮这次真正上传的消息。AI 的回答是否可靠,你自己看原文验证,不用信它一面之词。
  • 可随时中断。生成中按钮变「停止」,点了立刻断流,已输出的内容保留。
  • 线程留痕。问答按会话保存在本机(threads.json),重启后能在「历史对话」里找回;同一个会话可以开多条线程,比如一条问工作、一条问生活。

隐私边界:发什么,存什么,删什么

这是这类工具最该说清楚的部分,拾语把它做成了明确的边界:

动作 发出去什么
浏览会话 / 看消息 什么都不发,纯本地读取
提问 当前会话、当前日期范围内检索命中的消息片段 + 你的问题
总结 同范围消息(超长时分段发)
测试模型 只有两句固定文本
本地存储 位置 生命周期
API Key / 微信密钥 %APPDATA%\shiyu\config.json,safeStorage 加密(DPAPI) 手动清除
数据库密钥环 wechat-keys.json,整环加密 点「清除」即删
解密后的明文库 wechat-cache\*.db 退出应用自动清空,并校验无残留
问答线程 threads.json 只在本机

解密缓存这条值得强调:拾语为了查询速度会把微信的加密库解出一份明文 SQLite 放在缓存目录,但它选择了退出即删,而不是留一份明文在磁盘上等你哪天忘了。启动时还会顺手清理 7 天未用的孤儿快照。

合规与使用边界

在继续之前,把这条工具的适用范围说清楚:

  • 只用于本人数据。拾语的设计前提是你正在使用自己的电脑、自己的微信账号,读取的是你自己产生并保存在本机的聊天记录。它不提供、也不应被用于访问他人的数据。
  • 不绕过身份认证。获取密钥的前提是本机微信处于已登录状态——你先通过了微信自己的身份验证,工具才能工作。它不是攻击工具,也不声称能绕过任何账号保护。
  • 遵守《个人信息保护法》。聊天记录里往往包含他人的个人信息。导出或交给模型处理时,请保持在个人合理使用的范围内:不公开传播、不用于分析或骚扰他人、不做商业性利用。
  • 与腾讯无隶属关系。本项目为独立的个人工具,未经微信官方认可;微信版本更新可能改变数据格式导致不兼容,属正常现象。
  • 责任自担。软件按「现状」提供,使用者需自行确保自己的使用方式符合当地法律法规及微信用户协议。

版本与安装

三个形态:Shiyu-Setup-1.1.0.exe 安装版(装到 %LOCALAPPDATA%\Programs\拾语,可从系统设置卸载)、Shiyu-1.1.0-portable.exe 免安装版(单文件双击运行,不写注册表)、dist\win-unpacked\拾语.exe 解包目录版(排查问题用)。

一个已知的不便:当前构建没有代码签名证书,SmartScreen 会提示「未知发布者」,需要点「更多信息 → 仍要运行」。这是独立开发者分发 Windows 软件的常见代价,不影响功能。

已知的边界

  • 取密钥需要微信正在运行且已登录。微信退出了、或进程受保护读不到内存,自动获取会失败,需要重试或手动填 Key。
  • 重装微信 / 换账号后旧密钥失效,需要重新取一次。
  • 微信大版本改表名时会出现「不认识这个数据库结构」,设置里的「结构诊断」会打印每个库的表名列名,反馈即可补适配——拾语对 4.x 的策略是结构自适应而不是写死表名。
  • 单会话默认最多读 20000 条(可调),长会话先渲染最近 400 条、向上增量加载,这是性能与体验的平衡点。

为什么做它

聊天记录是一个人最完整的非结构化记忆之一,但它被锁在一个只适合「人翻」的界面里。拾语做的事情不玄乎:解密、归一化、检索、把选好的片段交给模型,然后把核对原文的入口还给你。它不替你下结论,只是让你翻聊天记录的方式从「搜索 + 肉眼」变成「提问 + 引用」。

相 关 文 章

3 篇
全部文章
桌面开发

解开「每库一钥」:拾语直连微信聊天数据库的实现

拾语的核心能力建立在一个前提上:能直接读取 本人设备上、本人账号 的微信聊天数据库。这件事说起来一句话,做起来要连闯四关——数据库是 SQLCipher 加密的;微信 4.x 把密钥拆成了「每个库一把」;密钥不在任何文件里,而在微信进程的内存里;微信还在持续往库里写数据。这篇文章把这四关逐一拆开讲。…

8 min

Android 开发

闪光摩斯:让手电筒替你说话

想象一个很具体的场景:山里没有信号,手机只剩 30% 电,天已经黑了。你想让两公里外的人知道「我在这里,我需要帮助」,但你没有对讲机、没有卫星电话,连短信都发不出去。 这时候你手里其实已经握着两样东西:一颗能打到几百米外的 LED 灯,和一块能照亮整间屋子的屏幕。它们缺的只是一套语法。 「闪光摩斯」…

6 min

Android 开发

把点划钉在纳秒上:FlashMorse 的时序引擎与 Miuix 界面工程

上一篇《闪光摩斯:让手电筒替你说话》讲了这个 App 想解决什么问题。这一篇拆工程实现:一条从文本到光的链路,以及为了让「点划比例」在任何设备上都站得住,踩过的那些坑。 所有结论都来自源码与真机实测,不含推测。源码以 MIT 许可开源在 Fq77/FlashMorse,下面引用的每一段代码都可以在仓…

12 min

© 2026 风起 版权所有|永远相信美好的事情即将发生!

隐私说明豫ICP备2026055814号-1豫公网安备41018302000627号