>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Python

Jak wyeksportować całą historię czatów AI z Cursor, Claude i Windsurf

Jeśli aktywnie piszesz kod z asystentami AI od roku lub dwóch, na dysku nagromadziły się gigabajty ukrytego kontekstu. Obejmuje to setki rozmów, sesji debugowania, wygenerowanych diffów, edycji i fragmentów kontekstu. Problem polega na tym, że każde narzędzie ukrywa te dane w swoich własnych zakątkach. Cursor przechowuje historię w bazach danych SQLite, Claude Code zapisuje osobne pliki sesji JSONL, a Continue i Gemini CLI trzymają wszystko w głębokich folderach systemowych.

Repozytorium ai-data-extraction autorstwa dewelopera 0xSero rozwiązuje prosty problem: znajduje wszystkie lokalne bazy danych asystentów, parsuje je i eksportuje czysty zbiór danych w ujednoliconym formacie JSONL.

Dlaczego warto eksportować te dane

Głównym powodem jest dostrajanie własnych modeli. Gdy deweloperzy dostrajają otwarte modele takie jak Qwen2.5-Coder lub DeepSeek-Coder do swojego stacka, syntetyczne zbiory danych często okazują się niewystarczające. Twoje prawdziwe rozmowy z asystentem zawierają unikalne dane: jak dokładnie formułujesz zadania, które błędy naprawiasz, które pliki przekazujesz do kontekstu i które opcje edycji faktycznie akceptujesz.

Drugi powód jest bardziej praktyczny: prosta kopia zapasowa i wyszukiwanie lokalne. Znalezienie sesji sprzed trzech miesięcy w interfejsie Cursor lub Trae może być trudne, zwłaszcza jeśli projekt jest zamknięty lub zmigrowany.

Co potrafi zestaw skryptów

Projekt to zbiór małych skryptów Python. Miły szczegół: nie ma żadnych zewnętrznych zależności. Potrzebujesz tylko standardowego Pythona 3.6+, a skrypty używają wbudowanych modułów sqlite3, json, pathlib i os.

Zestaw obsługuje osiem popularnych narzędzi:

  • Cursor (w tym starsze wersje czatu, Composer v1 i v2 z tabelami cursorDiskKV)
  • Claude Code i Claude Desktop
  • Windsurf
  • Trae
  • Continue
  • OpenCode (wersja desktopowa Tauri i CLI)
  • Google Gemini CLI
  • Codex

Skrypty automatycznie wykrywają system operacyjny (macOS, Linux lub Windows), lokalizują katalogi robocze edytorów i wyodrębniają ustrukturyzowaną historię.

Jak działa format eksportu

Każda linia w wynikowym pliku JSONL to osobna, kompletna sesja. Skrypty nie wyodrębniają surowego tekstu, lecz pełny snapshot kontekstu:

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

Zawiera wywołania systemowe narzędzi, wyniki wykonania poleceń, zastosowane diffy oraz metadane specyficzne dla modelu.

Szybki start

Sklonuj repozytorium i uruchom żądany skrypt:

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

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

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

Wszystkie wyniki trafią do folderu extracted_data/ jako osobne pliki z timestampami.

Możesz połączyć wszystko w jeden plik jednym poleceniem systemowym:

cat extracted_data/*.jsonl > all_conversations.jsonl

Przygotowanie do treningu przez Unsloth

Po eksporcie zbiór danych można łatwo przekazać do bibliotek dostrajających. Na przykład kombinacja datasets z Hugging Face i Unsloth bezpośrednio obsługuje ten JSONL:

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)

Bezpieczeństwo i uwagi

Przed wysłaniem wynikowego zbioru danych do chmury lub zewnętrznego serwera, sprawdź jego zawartość. Historia twoich rozmów nieuchronnie zawiera prywatne fragmenty kodu, ścieżki do katalogu domowego, a czasem zapomniane klucze API.

Autor projektu zaleca przepuszczenie plików przez detektor sekretów:

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

Jeśli baza danych edytora jest zablokowana podczas eksportu (częsta sytuacja z SQLite, gdy Cursor jest otwarty), po prostu zamknij edytor przed uruchomieniem skryptu.

Kto znajdzie to repozytorium przydatne

Projekt jest przydatny dla inżynierów ML zbierających dane do lokalnych modeli kodowania oraz dla deweloperów, którzy chcą zachować archiwum swojej pracy z AI na wypadek zmiany edytora. Kod skryptów jest prosty i otwarty, co ułatwia rozszerzenie o dowolny rzadki plugin lub niestandardowy fork VS Code.

Powiązane projekty