>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Python

AI-chatgeschiedenis extraheren uit Cursor, Claude en Windsurf

Als je het afgelopen jaar of twee actief code hebt geschreven met AI-assistenten, zijn er gigabytes aan verborgen context op je schijf opgeslagen. Dit omvat honderden gesprekken, debugsessies, gegenereerde diffs, bewerkingen en contextfragmenten. Het probleem is dat elke tool deze gegevens op zijn eigen plekken verbergt. Cursor slaat geschiedenis op in SQLite-databases, Claude Code schrijft aparte JSONL-sessiebestanden, en Continue en Gemini CLI bewaren alles in diepe systeemmappen.

De repository ai-data-extraction van ontwikkelaar 0xSero lost een eenvoudig probleem op: het vindt alle lokale assistent-databases, parseert ze, en exporteert een schone dataset in een uniform JSONL-formaat.

Waarom deze gegevens extraheren

De hoofdreden is het fine-tunen van je eigen modellen. Wanneer ontwikkelaars open modellen zoals Qwen2.5-Coder of DeepSeek-Coder afstemmen op hun stack, schieten synthetische datasets vaak tekort. Je echte gesprekken met een assistent bevatten unieke gegevens: hoe je precies taken formuleert, welke fouten je oplost, welke bestanden je in de context meegeeft, en welke bewerkingsopties je daadwerkelijk accepteert.

De tweede reden is praktischer: eenvoudige back-up en lokaal zoeken. Een sessie van drie maanden geleden terugvinden in de Cursor- of Trae-interface kan lastig zijn, vooral als het project gesloten of gemigreerd is.

Wat de scriptscripts-collectie kan doen

Het project is een collectie van kleine Python-scripts. Een leuk detail: er zijn geen externe afhankelijkheden. Je hebt alleen standaard Python 3.6+ nodig, en de scripts gebruiken ingebouwde modules sqlite3, json, pathlib en os.

De set ondersteunt acht populaire tools:

  • Cursor (inclusief oudere chatversies, Composer v1 en v2 met tabellen cursorDiskKV)
  • Claude Code en Claude Desktop
  • Windsurf
  • Trae
  • Continue
  • OpenCode (de desktop Tauri-versie en CLI)
  • Google Gemini CLI
  • Codex

De scripts detecteren automatisch het besturingssysteem (macOS, Linux of Windows), lokaliseren de werkdirectories van de editors en extraheren gestructureerde geschiedenis.

Hoe het exportformaat werkt

Elke regel in het resulterende JSONL-bestand is een aparte volledige sessie. De scripts extraheren geen ruwe tekst maar een volledige context-snapshot:

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

Het bevat tool-systeemcalls, commando-uitvoerresultaten, toegepaste diffs en model-specifieke metadata.

Snelle start

Kloon de repository en voer het gewenste script uit:

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

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

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

Alle resultaten komen terecht in de map extracted_data/ als aparte timestamp-bestanden.

Je kunt alles samenvoegen tot één bestand met één systeemcommando:

cat extracted_data/*.jsonl > all_conversations.jsonl

Voorbereiden voor training via Unsloth

Na export kan de dataset eenvoudig worden gevoed aan fine-tuning-bibliotheken. De combinatie van datasets van Hugging Face en Unsloth neemt deze JSONL bijvoorbeeld direct op:

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)

Beveiliging en overwegingen

Controleer de inhoud van de resulterende dataset voordat je deze naar de cloud of een externe server stuurt. Je gespreksgeschiedenis bevat onvermijdelijk privé-codefragmenten, thuismappaden en soms vergeten API-sleutels.

De auteur van het project raadt aan om bestanden door een secret detector te halen:

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

Als de database van de editor vergrendeld is tijdens export (een veelvoorkomende situatie met SQLite wanneer Cursor open is), sluit dan simpelweg de editor voordat je het script uitvoert.

Voor wie is deze repository nuttig

Het project is nuttig voor ML-engineers die gegevens verzamelen voor lokale codemodellen en ontwikkelaars die een archief van hun AI-werk willen bewaren voor het geval ze van editor wisselen. De scriptcode is eenvoudig en open, waardoor het gemakkelijk uit te breiden is voor elke zeldzame plugin of aangepaste VS Code-fork.

Gerelateerde projecten