>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Python

Cómo extraer todo el historial de chats de IA de Cursor, Claude y Windsurf

Si has estado escribiendo código activamente con asistentes de IA durante el último año o dos, gigabytes de contexto oculto se han acumulado en tu disco. Esto incluye cientos de conversaciones, sesiones de depuración, diffs generados, ediciones y fragmentos de contexto. El problema es que cada herramienta esconde estos datos en sus propios rincones. Cursor almacena el historial en bases de datos SQLite, Claude Code escribe archivos JSONL de sesión separados, y Continue y Gemini CLI guardan todo en carpetas profundas del sistema.

El repositorio ai-data-extraction del desarrollador 0xSero resuelve un problema simple: encuentra todas las bases de datos de asistentes locales, las analiza y exporta un conjunto de datos limpio en un formato JSONL unificado.

Por qué extraer estos datos

La razón principal es ajustar tus propios modelos. Cuando los desarrolladores ajustan modelos abiertos como Qwen2.5-Coder o DeepSeek-Coder para su stack, los conjuntos de datos sintéticos a menudo son insuficientes. Tus conversaciones reales con un asistente contienen datos únicos: cómo formulas exactamente las tareas, qué errores corriges, qué archivos pasas al contexto y qué opciones de edición aceptas realmente.

La segunda razón es más práctica: respaldo simple y búsqueda local. Encontrar una sesión de hace tres meses dentro de la interfaz de Cursor o Trae puede ser difícil, especialmente si el proyecto está cerrado o migrado.

Qué puede hacer la colección de scripts

El proyecto es una colección de pequeños scripts de Python. Un detalle interesante: no hay dependencias externas. Solo necesitas Python 3.6+ estándar, y los scripts usan módulos integrados sqlite3, json, pathlib y os.

El conjunto es compatible con ocho herramientas populares:

  • Cursor (incluidas versiones antiguas de chat, Composer v1 y v2 con tablas cursorDiskKV)
  • Claude Code y Claude Desktop
  • Windsurf
  • Trae
  • Continue
  • OpenCode (la versión de escritorio Tauri y CLI)
  • Google Gemini CLI
  • Codex

Los scripts detectan automáticamente el sistema operativo (macOS, Linux o Windows), localizan los directorios de trabajo de los editores y extraen el historial estructurado.

Cómo funciona el formato de exportación

Cada línea en el archivo JSONL resultante es una sesión completa separada. Los scripts no extraen texto sin formato sino una instantánea completa del 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
}

Incluye llamadas al sistema de herramientas, resultados de ejecución de comandos, diffs aplicados y metadatos específicos del modelo.

Inicio rápido

Clona el repositorio y ejecuta el script deseado:

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

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

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

Todos los resultados terminarán en la carpeta extracted_data/ como archivos separados con marca de tiempo.

Puedes fusionar todo en un solo archivo con un comando del sistema:

cat extracted_data/*.jsonl > all_conversations.jsonl

Preparándose para el entrenamiento a través de Unsloth

Después de la exportación, el conjunto de datos se puede alimentar fácilmente a bibliotecas de ajuste fino. Por ejemplo, la combinación de datasets de Hugging Face y Unsloth toma este JSONL directamente:

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)

Seguridad y consideraciones

Antes de enviar el conjunto de datos resultante a la nube o a un servidor externo, verifica su contenido. Tu historial de conversaciones inevitablemente contendrá fragmentos de código privado, rutas de directorio personal y a veces claves de API olvidadas.

El autor del proyecto recomienda pasar los archivos por un detector de secretos:

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

Si la base de datos del editor está bloqueada durante la exportación (una situación común con SQLite cuando Cursor está abierto), simplemente cierra el editor antes de ejecutar el script.

A quién le será útil este repositorio

El proyecto es útil para ingenieros de ML que recopilan datos para modelos de código locales y desarrolladores que quieren preservar un archivo de su trabajo con IA en caso de que cambien de editor. El código de los scripts es simple y abierto, lo que facilita la extensión para cualquier plugin raro o fork personalizado de VS Code.

Proyectos relacionados