>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Python

Come estrarre tutta la cronologia chat AI da Cursor, Claude e Windsurf

Se hai scritto attivamente codice con assistenti AI nell'ultimo anno o due, gigabyte di contesto nascosto si sono accumulati sul tuo disco. Questo include centinaia di conversazioni, sessioni di debug, diff generate, modifiche e snippet di contesto. Il problema è che ogni strumento nasconde questi dati nei propri angoli. Cursor memorizza la cronologia in database SQLite, Claude Code scrive file JSONL di sessione separati, e Continue e Gemini CLI conservano tutto in cartelle di sistema profonde.

Il repository ai-data-extraction dello sviluppatore 0xSero risolve un problema semplice: trova tutti i database locali degli assistenti, li analizza ed esporta un dataset pulito in un formato JSONL unificato.

Perché estrarre questi dati

Il motivo principale è il fine-tuning dei tuoi modelli. Quando gli sviluppatori ottimizzano modelli aperti come Qwen2.5-Coder o DeepSeek-Coder per il loro stack, i dataset sintetici spesso non bastano. Le tue conversazioni reali con un assistente contengono dati unici: come esattamente formuli i task, quali errori correggi, quali file passi nel contesto, e quali opzioni di modifica accetti effettivamente.

Il secondo motivo è più pratico: semplice backup e ricerca locale. Trovare una sessione di tre mesi fa nell'interfaccia di Cursor o Trae può essere difficile, specialmente se il progetto è chiuso o migrato.

Cosa può fare la raccolta di script

Il progetto è una raccolta di piccoli script Python. Un dettaglio interessante: non ci sono dipendenze esterne. Hai solo bisogno di Python 3.6+ standard, e gli script usano i moduli built-in sqlite3, json, pathlib e os.

Il set supporta otto strumenti popolari:

  • Cursor (incluse versioni di chat più vecchie, Composer v1 e v2 con tabelle cursorDiskKV)
  • Claude Code e Claude Desktop
  • Windsurf
  • Trae
  • Continue
  • OpenCode (la versione desktop Tauri e CLI)
  • Google Gemini CLI
  • Codex

Gli script rilevano automaticamente il sistema operativo (macOS, Linux o Windows), individuano le directory di lavoro degli editor ed estraggono la cronologia strutturata.

Come funziona il formato di esportazione

Ogni riga nel file JSONL risultante è una sessione completa separata. Gli script non estraggono testo raw ma uno snapshot completo del contesto:

{
  "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
}

Include le chiamate di sistema degli strumenti, i risultati dell'esecuzione dei comandi, le diff applicate e i metadati specifici del modello.

Avvio rapido

Clona il repository ed esegui lo script desiderato:

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

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

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

Tutti i risultati finiranno nella cartella extracted_data/ come file separati con timestamp.

Puoi unire tutto in un singolo file con un comando di sistema:

cat extracted_data/*.jsonl > all_conversations.jsonl

Preparazione per l'addestramento tramite Unsloth

Dopo l'esportazione, il dataset può essere facilmente alimentato a librerie di fine-tuning. Ad esempio, la combinazione di datasets di Hugging Face e Unsloth recepisce questo JSONL direttamente:

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)

Sicurezza e considerazioni

Prima di inviare il dataset risultante al cloud o a un server esterno, controlla il suo contenuto. La tua cronologia delle conversazioni conterrà inevitabilmente frammenti di codice privato, percorsi della home directory e a volte chiavi API dimenticate.

L'autore del progetto consiglia di far passare i file attraverso un rilevatore di secret:

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

Se il database dell'editor è bloccato durante l'esportazione (situazione comune con SQLite quando Cursor è aperto), chiudi semplicemente l'editor prima di eseguire lo script.

A chi sarà utile questo repository

Il progetto è utile per ingegneri ML che raccolgono dati per modelli di codice locali e sviluppatori che vogliono preservare un archivio del loro lavoro AI nel caso cambino editor. Il codice degli script è semplice e aperto, rendendo facile estenderlo per qualsiasi plugin raro o fork personalizzato di VS Code.

Progetti correlati