ai-data-extractor
AI编程助手聊天记录导出工具,支持Claude/Cursor/Copilot多平台
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
AI编程助手聊天记录导出工具,支持Claude/Cursor/Copilot多平台
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2025年末,一位开发者发现自己的 Claude Code 聊天记录在一场系统重装后化为乌有——多年积累的代码片段、调试思路、项目回顾全部清零。这不是个案。随着 AI 编程助手成为开发者的日常工具,其本地存储的聊天记录正在成为一座被忽视的数据金矿:它记录着开发者的思考路径、代码习惯、错误纠正过程——这些都是微调专属 AI 编程模型的珍贵语料。然而,这些数据散落在各家工具的私有数据库中,没有统一格式,无法直接使用。
bawadou/ai-data-extractor 正是为解决这一痛点而生:它是一个完全免费、开源的 CLI 工具,能够从 10 款主流 AI 编程助手中自动发现并提取聊天记录,统一转换为 JSONL 格式,让数据真正可用。
目前该工具支持以下 10 款工具的数据提取:
| 工具 | 存储方式 | 说明 |
|---|---|---|
| Claude Code | JSONL | 每会话一个文件,路径 ~/.claude/projects/**/*.jsonl |
| Codex CLI | JSONL | rollout 文件,位于 ~/.codex/sessions/**/rollout-*.jsonl |
| Cursor | SQLite | state.vscdb,支持历史多个版本格式 |
| Windsurf | SQLite | 未公开 schema,使用启发式方法提取 |
| Trae | SQLite + JSONL | 未公开 schema,启发式提取 |
| Continue | JSON | 每会话一个文件 |
| Gemini CLI | JSON | 聊天记录存储在 ~/.gemini/tmp/ |
| OpenCode | JSON | 多层 session/message/part 结构 |
| Cline / Roo Code | JSON | 每个 Task 一个文件夹 |
| Aider | Markdown | 项目目录下 .aider.chat.history.md |
工具支持 macOS、Linux 和 Windows 全平台,自动搜索各操作系统的标准应用数据目录,无需手动指定路径。
项目采用极简设计哲学:零第三方依赖,仅使用 Python 标准库(sqlite3、json、pathlib)实现全部功能,Python 3.9+ 即可运行。
整体架构分为两层:
核心抽象层(extractors/common.py):提供跨平台数据目录发现、JSONL/JSON 安全读取、SQLite 只读查询(含临时文件保护)、启发式 KV 存储提取等通用能力。
具体提取器(extractors/*.py):每个工具对应一个独立模块,遵循统一的 find_installations() + extract() 接口契约,复制 continue_ext.py 即可快速添加新工具支持。
以 Cursor 为例,其 SQLite 数据库 schema 从未公开,且经历了至少三次格式变化(workspace chat、inline composer、split bubbleId composer),项目对每种格式都有显式实现。Windsurf 和 Trae 因 schema 变化频繁,改用通用启发式方法(heuristic_extract_chat_from_kv),通过 key 关键字匹配 + JSON 结构扫描来提取对话,降低了维护成本。
数据库读取方面,所有 SQLite 操作都通过临时文件副本进行:读取时先将原数据库复制到临时文件,再对副本执行只读查询,确保即使应用正在运行也不会因数据库锁而失败,体现了极高的工程严谨度。
所有提取结果统一输出为 JSONL 格式,每行一个完整会话:
{
"messages": [
{"role": "user", "content": "...", "code_context": [...], "timestamp": "..."},
{"role": "assistant", "content": "...", "tool_use": [...], "timestamp": "..."}
],
"source": "cursor-composer",
"session_id": "...",
"project_path": "/Users/you/project",
"name": "项目名称",
"created_at": 1705414222000
}
提取完成后可一键合并为 all_conversations.jsonl,直接对接 HuggingFace datasets 库用于微调训练。
主要使用场景:
上手门槛极低:无需安装任何依赖,执行 python extract.py 或 ./extract_all.sh 即可自动发现已安装工具并导出数据。CLI 支持交互式菜单选择来源、--all 一键全量提取、--list 预览发现结果、--merge 合并输出。
局限性需要正视:Windsurf/Trae 等使用启发式提取的工具,在 schema 更新后可能需要手动调整 KEY_HINTS;Aider 的 Markdown 格式解析依赖目录结构,扫描深度有限;项目本身是纯 CLI 工具,缺少可视化界面,对非技术用户不够友好。
工具明确声明:它只读取本地设备上你自己的聊天记录,绝不向任何服务器发送数据。在使用导出数据进行分享或训练前,项目建议使用 detect-secrets 扫描导出的 JSONL 文件,并手动检查 code_context 和 tool_use 字段中是否包含 API Key 或专有代码。
随着 Claude Code、Cursor、Windsurf 等工具用户量快速增长,本地积累的聊天数据规模极为可观。然而,这些数据长期处于"数据孤岛"状态——各工具存储格式各异、无法互通。ai-data-extractor 以最小的依赖代价,提供了统一的标准化出口,让开发者能够真正掌控自己的 AI 编程数据资产。随着 AI 编程助手成为主流开发范式,这类数据提取工具的价值将持续提升。