AI Data Extractor Skill:一键导出多平台 AI 编程助手聊天记录为统一 JSONL 格式

AI Data Extractor Skill:一键导出 AI 编程助手聊天记录为统一 JSONL 格式

如果你用过 Claude Code、Cursor、Windsurf 这些 AI 编程工具,你可能有过这个困扰:每个工具存储聊天记录的方式完全不一样——有的用 SQLite,有的用 JSONL,有的干脆就是一个 Markdown 文件散落在项目目录里。想把它们统一备份、做分析、或者喂给模型微调,光是整理数据格式就要花大半天。

ai-data-extractor 解决的就是这个痛点:一个 Python 工具,自动扫描你的电脑,找出所有主流 AI 编程助手的聊天历史,统一转换为标准 JSONL 格式输出。2026 年 9 月 11 日上线,9 天内斩获 840 star,热度仍在上升。

功能与设计原则

核心能力:自动发现 + 统一导出。将不同 AI 编程助手的私有存储格式(SQLite、JSONL、JSON、Markdown)统一转换为标准化 JSONL,每条记录包含 messages、session_id、source、code_context、tool_use 等字段。

设计原则:
– 零依赖:纯 Python 标准库,无第三方包
– 只读优先:所有数据库连接均为只读模式,工具运行中不会阻塞编辑器
– 防御性解析:即便某个文件损坏,工具也会跳过并继续处理,不会整体崩溃
– 格式自适配:Cursor/Windsurf/Trae 等使用不透明 SQLite schema 的工具,采用启发式 key 扫描而非硬编码字段名

认可度

  • GitHub Star:840(截至 2026-09-20),9 天新 repo,爆发力强
  • Forks:135
  • Issue 数:0(社区无 open issue,维护状态活跃)
  • 增长轨迹:2026-09-12 约 61 star → 09-13 约 163 star → 09-14 约 377 star → 09-15 约 794 star(4 天翻 13 倍)
  • GitHub trending:2026-09-19 GitHub 热门榜单新晋项目,AI 开发者工具类目持续吸睛

链接

GitHub:https://github.com/kruzovic7/ai-data-extractor

原作者

GitHub 用户名:kruzovic7(独立开发者)

暂无详细个人主页,但项目 README 描述清晰,更新频率高(最近一次更新 2026-09-19),可以看出是活跃维护状态。

详细介绍

ai-data-extractor 是一个开源 Python 工具包,解决 AI 编程助手数据碎片化问题。目前支持 10 个主流工具:

工具 存储格式 扫描路径
Claude Code JSONL(每会话一个文件) ~/.claude/projects/*/.jsonl
Codex CLI JSONL(rollout 文件) ~/.codex/sessions/*/rollout-.jsonl
Cursor SQLite(state.vscdb) ~/…/Cursor/User/{global,workspace}Storage
Windsurf SQLite(未公开 schema) ~/…/Windsurf/User/{global,workspace}Storage
Trae SQLite + JSONL ~/…/Trae
Continue JSON(每会话一个文件) ~/.continue/sessions/*.json
Gemini CLI JSON ~/.gemini/tmp//chats/*.json
OpenCode JSON(session/message/part 树) ~/.local/share/opencode/storage/
Cline / Roo Code JSON(每任务一个文件夹) /User/globalStorage//tasks/
Aider Markdown(每个项目目录一个) /.aider.chat.history.md

工具自动检测操作系统(macOS / Linux / Windows),覆盖各系统标准数据路径,无需手动指定。

Cursor、Windsurf、Trae 使用未公开的 SQLite schema,且这些 schema 在产品迭代中多次变更(如 Cursor 就经历至少三种 schema 形态)。工具对 Cursor 的三种已知形态均做了显式适配;对 Windsurf/Trae 则采用启发式 key 扫描(heuristic_extract_chat_from_kv),扫描键值对中匹配 role+text 结构的记录。

Aider 的存储最为特殊:每个项目目录下都有一个 .aider.chat.history.md,没有任何中心化数据库。工具默认扫描 home 目录加若干常见项目目录名(projects、code、dev、repos、workspace 等),最深 5 层,可通过 --search-path 参数指定项目路径。

特点

  • 零依赖:仅用 Python 标准库(json、sqlite3、pathlib 等),pip install 免了
  • 跨平台自动发现:macOS / Linux / Windows 三系统路径自动适配,无需手动指定
  • 只读安全:数据库连接全部为只读模式,运行中的编辑器不会被打断
  • 容错解析:启发式 schema 适配,未知版本也有概率成功提取
  • 统一输出格式:JSONL 每行一个会话,包含 messages、source、session_id、project_path、created_at 等标准化字段
  • 支持合并导出:--merge 参数可将所有来源合并为单一 all_conversations.jsonl 文件
  • 支持扩展:提取器模块接口统一(find_installations + extract),可自行添加新工具支持

使用方法

基本安装

git clone https://github.com/kruzovic7/ai-data-extractor
cd ai-data-extractor
python3 extract.py --help

查看已安装工具(不提取)

python3 extract.py --list

交互式提取(菜单选择来源)

python3 extract.py

指定来源提取

# 只提取 Cursor 和 Claude Code
python3 extract.py --sources cursor,claude_code

# 提取全部来源
python3 extract.py --all

合并输出

python3 extract.py --all --merge
# 生成 extracted_data/all_conversations.jsonl

指定额外搜索路径

python3 extract.py --sources aider --search-path ~/client-work --search-path /mnt/data/repos

输出文件在 extracted_data/ 目录,每源一个时间戳文件:

extracted_data/
├── claude_code_conversations_20260920_143022.jsonl
├── cursor_conversations_20260920_143022.jsonl
└── ...

使用场景与人群

适用场景:
– 数据备份:在工具数据库被清除前统一导出历史会话
– 微调训练:将个人编程对话整理为训练数据集,用于微调代码模型
– 成本审计:分析 token 使用量和对话频率,评估 AI 编程投入产出
– 合规留存:企业场景下留存 AI 辅助编程的完整对话记录
– 工作流复盘:回溯特定 bug 或功能的历史 AI 辅助决策过程

目标用户:
– 深度使用 Claude Code、Cursor、Windsurf 等工具的开发者
– 需要汇总团队成员 AI 编程数据的 Tech Lead
– 计划用个人编程数据微调模型的研究者和独立开发者
– 关注 AI 辅助编程效率与合规管理的企业团队

输入与输出案例

输入(Claude Code 原始 JSONL 片段):

{
  "messages": [
    {"role": "user", "content": "How do I fix this TypeScript error?", "code_context": [{"file": "/src/index.ts", "code": "const x: string = 123;"}]},
    {"role": "assistant", "content": "The error occurs because you're assigning a number to a string type...", "tool_use": [{"name": "edit_file", "input": {"path": "src/index.ts"}}]}
  ],
  "source": "claude-code",
  "session_id": "c1a2b3...",
  "project_path": "/Users/you/project",
  "name": "TypeScript Type Error Fix",
  "created_at": 1705414222000
}

输出(统一 JSONL,单行一条会话,可直接用于 datasets.load_dataset("json", data_files=...)):

{"messages": [...], "source": "claude-code", "session_id": "c1a2b3...", "project_path": "/Users/you/project", "name": "TypeScript Type Error Fix", "created_at": 1705414222000}

使用注意:提取后正式分享或训练前,强烈建议运行 detect-secrets 扫描敏感信息,并人工审查 code_context 和 tool_use 字段中是否包含私有代码路径、API Key 或客户代码片段。


GitHub: https://github.com/kruzovic7/ai-data-extractor

评论区

0 条评论

登录后可评论。

Skill超级捕获手 597 阅读