>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Python

Como Extrair Todo o Histórico de Chat de IA do Cursor, Claude e Windsurf

Se você tem escrito código ativamente com assistentes de IA nos últimos anos, gigabytes de contexto oculto se acumularam no seu disco. Isso inclui centenas de conversas, sessões de depuração, diffs gerados, edições e snippets de contexto. O problema é que cada ferramenta esconde esses dados em seus próprios cantos. O Cursor armazena histórico em bancos de dados SQLite, o Claude Code escreve arquivos JSONL separados, e o Continue e o Gemini CLI mantêm tudo em pastas profundas do sistema.

O repositório ai-data-extraction do desenvolvedor 0xSero resolve um problema simples: ele encontra todos os bancos de dados locais dos assistentes, faz o parsing e exporta um dataset limpo em um formato JSONL unificado.

Por que extrair esses dados

O principal motivo é fazer fine-tuning dos seus próprios modelos. Quando desenvolvedores ajustam modelos abertos como Qwen2.5-Coder ou DeepSeek-Coder para sua stack, datasets sintéticos frequentemente ficam aquém. Suas conversas reais com um assistente contêm dados únicos: como exatamente você formula tarefas, quais erros você corrige, quais arquivos você passa para o contexto e quais opções de edição você realmente aceita.

O segundo motivo é mais prático: backup simples e busca local. Encontrar uma sessão de três meses atrás na interface do Cursor ou Trae pode ser difícil, especialmente se o projeto está fechado ou foi migrado.

O que a coleção de scripts pode fazer

O projeto é uma coleção de pequenos scripts Python. Um detalhe interessante: não há dependências externas. Você só precisa do Python 3.6+ padrão, e os scripts usam módulos nativos sqlite3, json, pathlib e os.

O conjunto suporta oito ferramentas populares:

  • Cursor (incluindo versões mais antigas de chat, Composer v1 e v2 com tabelas cursorDiskKV)
  • Claude Code e Claude Desktop
  • Windsurf
  • Trae
  • Continue
  • OpenCode (a versão desktop Tauri e CLI)
  • Google Gemini CLI
  • Codex

Os scripts detectam automaticamente o sistema operacional (macOS, Linux ou Windows), localizam os diretórios de trabalho dos editores e extraem o histórico estruturado.

Como funciona o formato de exportação

Cada linha no arquivo JSONL resultante é uma sessão completa separada. Os scripts não extraem texto bruto, mas sim um snapshot completo de contexto:

{
  "messages": [
    {
      "role": "user",
      "content": "Как исправить эту ошибку типизации в TypeScript?",
      "code_context": [
        {
          "file": "/Users/user/project/src/index.ts",
          "code": "const x: string = 123;",
          "range": {
            "selectionStartLineNumber": 10,
            "positionLineNumber": 10
          }
        }
      ],
      "timestamp": "2025-01-16T14:30:22.123Z"
    },
    {
      "role": "assistant",
      "content": "Ошибка возникает из-за присвоения числа переменной строкового типа...",
      "suggested_diffs": [],
      "model": "claude-sonnet-4-5",
      "timestamp": "2025-01-16T14:30:25.456Z"
    }
  ],
  "source": "cursor-composer",
  "name": "TypeScript Type Error Fix",
  "created_at": 1705414222000
}

Ele inclui chamadas do sistema de ferramentas, resultados de execução de comandos, diffs aplicados e metadados específicos do modelo.

Início rápido

Clone o repositório e execute o script desejado:

git clone https://github.com/0xSero/ai-data-extraction.git
cd ai-data-extraction

# Выгрузить только Cursor
python3 extract_cursor.py

# Или вытащить данные сразу со всех установленных инструментов
./extract_all.sh

Todos os resultados vão para a pasta extracted_data/ como arquivos separados com timestamp.

Você pode mesclar tudo em um único arquivo com um comando do sistema:

cat extracted_data/*.jsonl > all_conversations.jsonl

Preparando para treinamento via Unsloth

Após a exportação, o dataset pode facilmente ser alimentado para bibliotecas de fine-tuning. Por exemplo, a combinação de datasets do Hugging Face e Unsloth aceita esse JSONL diretamente:

from datasets import load_dataset
from unsloth import FastLanguageModel

# Загружаем собранные сессии
dataset = load_dataset('json', data_files='extracted_data/*.jsonl', split='train')

# Оставляем только сессии с ответами ассистента
dataset = dataset.filter(lambda x: any(m['role'] == 'assistant' for m in x['messages']))

model, tokenizer = FastLanguageModel.from_pretrained(
    "unsloth/qwen2.5-coder-7b-instruct",
    max_seq_length=4096,
    load_in_4bit=True,
)

def format_chat(example):
    return {
        'text': tokenizer.apply_chat_template(
            example['messages'],
            tokenize=False
        )
    }

dataset = dataset.map(format_chat)

Segurança e considerações

Antes de enviar o dataset resultante para a nuvem ou um servidor externo, verifique seu conteúdo. Seu histórico de conversas inevitavelmente conterá fragmentos de código privado, caminhos do diretório home e às vezes chaves de API esquecidas.

O autor do projeto recomenda rodar os arquivos por um detector de segredos:

pip install detect-secrets
detect-secrets scan extracted_data/*.jsonl

Se o banco de dados do editor estiver bloqueado durante a exportação (situação comum com SQLite quando o Cursor está aberto), simplesmente feche o editor antes de executar o script.

Para quem este repositório será útil

O projeto é útil para engenheiros de ML coletando dados para modelos de código locais e desenvolvedores que querem preservar um arquivo de seu trabalho com IA caso mudem de editor. O código dos scripts é simples e aberto, facilitando a extensão para qualquer plugin raro ou fork personalizado do VS Code.

Projetos relacionados