⚠️ 本项目只提供查看界面,不提供任何解密工具
本仓库不含密钥提取、数据库解密等任何工具与代码。聊天数据由用户自行准备后导入目录。
实测微信版本:4.1.13.12(Windows)
让用户在本机直接浏览微信聊天记录:会话列表、消息浏览、全文搜索、多格式导出。数据由用户提供,本工具只负责查看,全部本地运行,零外部依赖。
- 📱 会话列表:按时间倒序展示所有会话(单聊/群聊/公众号)
- 💬 消息浏览:按时间正序渲染(64 万条消息已实测导入,浏览流畅)
- 🔍 全文搜索:基于 FTS5,1 秒内返回搜索结果
- 🤖 LLM 集成:支持 OpenAI 兼容协议(DeepSeek / OpenAI / 硅基流动 / Ollama 等),流式输出总结/问答
- ⚡ 本地优先:所有数据本地处理,零外部依赖(除用户配置的 LLM)
- Python 3.10+
- Node.js 22+
- Windows 10/11
主界面:
联系人导出(支持按类型/关键词筛选,导出 CSV / JSON):
- 把用户自己的聊天数据放到项目根目录(二选一,自动识别):
wechat-local-viewer/ ├── decrypted/ (或 .decrypted/) │ ├── contact/ # 联系人数据 │ ├── session/ # 会话数据 │ ├── message/ # 消息数据(message_*.db) │ └── hardlink/ # 图片索引(可选) └── start.bat - 双击
start.bat - 浏览器自动打开 http://127.0.0.1:18787/(后端直接托管前端构建产物)
| 端口 | 用途 |
|---|---|
| 18787 | 后端 FastAPI(避开 8765 等 Windows 保留端口) |
| 15713 | 前端 Vite dev(避开 5173 易冲突) |
set WCVIEWER_PORT=28888
set WCVIEWER_FRONT_PORT=25813
start.batstart.bat 启动前会做端口冲突检测,被占用会报错并给出提示。
# 后端
cd backend
pip install -r requirements.txt
python -m uvicorn app.main:app --host 127.0.0.1 --port 18787
# 前端(开发模式)
cd frontend
npm install
npm run dev
# 生产用:npm run build → 后端自动托管 distdecrypted/ (或 .decrypted/,二选一自动识别)
├── contact/ # 联系人数据
├── session/ # 会话数据
├── message/ # 消息数据(message_*.db 等)
└── hardlink/ # 图片文件索引(hardlink.db,可选)
.
├── backend/ # 后端服务
│ ├── app/
│ │ ├── api/ # API 路由
│ │ ├── parsers/ # 数据解析器
│ │ ├── llm/ # LLM 客户端
│ │ └── etl.py # ETL 主流程
│ ├── tests/
│ └── requirements.txt
├── frontend/ # 前端应用
│ ├── src/
│ │ ├── api/ # API 客户端
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── views/ # 页面组件
│ │ └── components/# UI 组件
│ └── package.json
├── .github/ # CI 工作流
├── start.bat # 一键启动脚本
├── refresh.bat # 增量刷新脚本
├── THIRD_PARTY_NOTICES.md # 第三方组件说明
├── CONTRIBUTING.md / CHANGELOG.md / LICENSE
└── README.md
以下目录由工具/服务在运行时生成或由用户提供,均已通过 .gitignore 排除,不要提交到版本库:
| 目录 | 作用 |
|---|---|
decrypted/ 或 .decrypted/ |
微信聊天数据(用户提供) |
.cache/ |
中间层数据库 app.db(ETL 自动创建) |
.export/ |
导出产物 |
.tmp/ |
日志等临时文件 |
┌──────────────────────────────────────┐
│ 数据源(用户提供) │
│ decrypted/ │
└──────────────┬──────────────────────┘
│ ① ETL (etl.py)
│ 指纹判断:全量 / 增量 / 跳过
│ parse_sessions→sessions 表
│ parse_contacts→contacts 表
│ parse_messages→messages 表 (+FTS5 索引)
│ _update_session_stats 聚合统计
▼
┌──────────────────────────────────────┐
│ .cache/app.db (中间层查询库) │
│ sessions / contacts / messages + FTS │
└──────────────┬──────────────────────┘
│ ② API (FastAPI :18787)
▼
┌──────────────────────────────────────┐
│ frontend (Vue, 已构建至 dist) │
│ 会话列表 / 消息浏览 / 搜索 / 导出 │
└──────────────────────────────────────┘
-
检查文件结构
cd <仓库根目录> tree /F frontend
-
前端依赖安装
cd frontend npm config set registry https://registry.npmmirror.com npm config set maxsockets 4 npm config set audit false npm install
-
一键启动
cd <仓库根目录> start.bat
| 端点 | 方法 | 说明 |
|---|---|---|
/api/sessions |
GET | 会话列表(按 last_time 倒序) |
/api/sessions/{username} |
GET | 单会话详情 |
/api/messages?session=X |
GET | 消息分页 |
/api/messages/{id} |
GET | 单消息详情 |
/api/messages/{id}/context |
GET | 消息上下文 |
/api/search?q=X |
GET | 全文搜索(FTS5) |
/api/search/suggest?q=X |
GET | 搜索建议 |
/api/contacts/export |
GET | 联系人导出(csv/json,支持 type/keyword 筛选) |
/api/admin/etl |
POST | 触发 ETL({force:bool}) |
/api/admin/status |
GET | ETL 状态 |
/api/admin/logs |
GET | 日志尾部 |
/api/admin/rebuild-fts |
POST | 重建 FTS 索引 |
/api/admin/stats/daily |
GET | 每日统计 |
/api/llm/config |
GET / POST | LLM 配置 |
/api/llm/chat |
POST | LLM 流式问答(SSE) |
/media/... |
GET | 媒体静态文件(仅已还原的部分图片可用) |
打开页面右上角「设置」,填:
- Base URL:OpenAI 兼容服务地址
- DeepSeek:
https://api.deepseek.com/v1 - OpenAI:
https://api.openai.com/v1 - Ollama:
http://localhost:11434/v1 - 硅基流动:
https://api.siliconflow.cn/v1
- DeepSeek:
- API Key:对应服务的 key
- Model:模型名(如
deepseek-chat、gpt-4o-mini、qwen2.5:7b)
API key 仅存浏览器 localStorage,随每次问答请求发给后端(也可用环境变量 LLM_BASE_URL / LLM_API_KEY / LLM_MODEL 做后备默认值)。未配置时点「总结」会给出明确提示。
- 零外发:除 LLM base_url 外无任何 outbound HTTP。
- 静态
/media/不列目录。 - LLM API key 仅存浏览器 localStorage。
| 项 | 备注 |
|---|---|
| 启动 → 首屏 | 数秒(64 万消息库,未实测计时) |
| 打开会话(首屏 30 条) | 索引查询,表现良好(未实测计时) |
| 全文搜索 | FTS5 索引,秒级(未实测计时) |
| LLM 流式首字 | 取决于模型服务(未实测计时) |
- Python pip 用清华源。
- Node
^22.19.0 || >=24.0.0。 - 默认端口 18787(后端)/ 15713(前端),避开 8765(Windows 保留)/ 5173(易冲突)。
本项目基于 MIT License 开源。
本项目在 LINUX DO 社区进行开源推广,感谢社区佬友的交流、反馈与建议。

