一个纯前端的聊天记录分析单页应用,用于导入微信聊天记录导出的 Excel 文件或单人 TXT 日志,并按时间尺度查看消息统计、关键词分布、正文内容和 AI 总结。
- 支持导入多个
.xlsx、.xls、.txt文件。 - 按年、月、周、日、时、分统计消息数量。
- 以热力图形式查看不同时间段的消息活跃度。
- 提取关键词并按出现频率展示。
- 在正文内容中高亮关键词,支持调整高亮数量和颜色衰减。
- 正文内容支持懒加载、复制、滚轮切换时间段和调整字号。
- 支持 AI 总结全文或选中文本,接口兼容 OpenAI Chat Completions 格式。
- 内置浅色、深色、Catppuccin、Rosé Pine、Nord、Gruvbox、Monokai、Dracula 等主题。
本项目不需要打包构建,使用静态服务器打开即可。
python -m http.server 8000然后在浏览器访问:
http://localhost:8000
也可以直接打开 index.html,但部分浏览器可能会限制本地文件下的 Web Worker,导致 Excel 解析回退或失败。推荐使用本地静态服务器。
- 打开页面后,将聊天记录文件拖入左侧导入区,或点击“选择文件”。
- 在顶部选择时间尺度:年、月、周、日、时、分。
- 在“消息统计”页查看热力图,点击时间单元可跳转到对应关键词统计。
- 在“关键词统计”页点击某个时间段卡片,可进入对应正文内容。
- 在“正文内容”页查看消息列表、复制内容,或点击“总结全文”“总结选中”进入 AI 总结。
- 如需 AI 总结,先在“AI总结”页点击“设置”,填写 Base URL、API Key、模型、温度、提示词等配置。
Excel 文件默认读取第一个工作表。当前解析逻辑基于微信聊天记录导出格式:
- 第 2 行:会话元信息。
- 第 2 列:
wxid - 第 4 列:昵称
- 第 6 列:备注
- 第 2 列:
- 第 5 行起:聊天消息。
- 第 1 列:序号
- 第 2 列:时间
- 第 3 列:发送者昵称
- 第 4 列:发送者 wxid
- 第 5 列:发送者备注
- 第 6 列:发送者角色
- 第 7 列:消息类型
- 第 8 列:消息内容
时间列支持 Excel 日期、YYYY-MM-DD HH:mm:ss、YYYY/MM/DD HH:mm:ss 等可被浏览器解析的格式。
TXT 文件适合导入单人日志。文件名去掉扩展名后会作为用户名。
每一行格式为:
消息内容<TAB 或两个以上空格>YYYY-MM-DD HH:MM:SS
示例:
今天整理了一下聊天记录 2026-04-24 10:15:30
这条消息会被识别为同一个人的发言 2026-04-24 10:16:02
AI 总结通过浏览器直接请求:
{Base URL}/v1/chat/completions
默认 Base URL 为:
https://api.openclawcn.net
你可以在设置中修改:
- Base URL
- API Key
- 可用模型列表
- 温度
- 自定义提示词
- 最大输出长度
max_tokens - 请求超时时间
自定义提示词支持 {{content}} 占位符,运行时会替换为当前需要总结的聊天内容。
- 文件解析、消息统计、关键词提取、正文浏览都在浏览器本地完成。
- 主题、AI 设置和 AI 总结缓存保存在浏览器
localStorage中。 - 只有在点击 AI 总结相关按钮时,所选聊天内容才会被发送到你配置的 AI API 服务。
- 请不要在不可信的 API 服务中提交敏感聊天内容。
.
├── index.html # 页面结构和入口
├── app.js # 主应用逻辑
├── excel-worker.js # Excel 解析 Web Worker
├── xlsx.full.min.js # SheetJS Excel 解析库
├── styles.css # 基础样式
├── themes.css # 多主题样式
├── CHANGELOG.md # 变更记录
├── WHEEL_FONT_MEMO.md # 滚轮和字号交互备忘
└── CLAUDE.md # 项目开发说明
- 纯 HTML、CSS、JavaScript 实现,无前端构建链。
- 使用 SheetJS 解析 Excel 文件。
- Excel 解析优先放在 Web Worker 中执行,避免阻塞主线程。
- 中文关键词提取优先使用
Intl.Segmenter,不支持时回退到 CJK bigram 提取。 - 消息统计、关键词结果、字符数和排序结果使用会话级缓存。
- 关键词卡片和正文消息采用分批渲染,提升大文件浏览性能。
推荐使用最新版 Chrome、Edge、Firefox 或 Safari。
如果浏览器不支持 Intl.Segmenter,关键词提取仍可运行,但中文分词质量会有所下降。
由于项目是静态页面,常规开发只需修改对应文件并刷新浏览器。
启动本地服务:
python -m http.server 8000查看 Git 状态:
git status --short目前项目没有配置自动化测试或格式化脚本。