Сохранить логи coding-агентов: гайд по созданию open-source датасета для AI | AiManual
AiManual Logo Ai / Manual.
25 Фев 2026 Гайд

Собираем цифровое золото: как сохранить логи coding-агентов и создать open-source датасет для AI

Пошаговый гайд по сохранению логов Claude Code, Codex CLI и других AI-агентов. Создаем open-source датасет для обучения моделей. Актуально на 2026 год.

Представь, что каждый раз, когда твой AI-помощник пишет код, он оставляет за собой крошки. Ценные, уникальные крошки, которые показывают, как он думает, где ошибается, как исправляет себя. А ты их просто сметаешь в мусорное ведро.

Так работает большинство coding-агентов в 2026 году. Мы используем Claude Code, Codex CLI, Kilo Code, но все их размышления, все цепочки мыслей (reasoning traces) исчезают в черной дыре терминала. Это как сжигать библиотеку после прочтения одной книги.

А ведь эти данные — цифровое золото для следующего поколения AI. Особенно для обучения с подкреплением (RL) и тонкой настройки (fine-tuning) агентных моделей. Без реальных траекторий мы тренируем модели на синтетике, и они продолжают тупить на элементарных задачах.

Почему все потеряли миллиарды токенов

Проблема в дизайне. Инструменты создавались для скорости, а не для наблюдаемости (observability). По умолчанию логи пишутся в stdout и исчезают. Настройки логгирования спрятаны за флагами или переменными окружения, о которых никто не знает.

Типичная ошибка: разработчик неделями использует агента, решает сложные задачи, а потом понимает, что не сохранил ни одной сессии для анализа. Все диалоги, все промежуточные шаги улетели в /dev/null.

Вторая проблема — приватность. Многие боятся логировать, потому что в сессиях может быть корпоративный код. Но решение есть: анонимизация и фильтрация чувствительных данных перед публикацией.

Третья — отсутствие стандартного формата. Каждый агент пишет логи по-своему. Нет единой схемы для хранения траекторий: промпт, ответ, инструменты (tools), выполнение кода, результат.

Инструменты, которые уже умеют логировать (но вы об этом не знали)

Начнем с самых популярных. Актуально на февраль 2026.

1Claude Code: ищем скрытый флаг

Claude Code к 2026 году оброс фичами, но логирование так и осталось полускрытым. По умолчанию он не сохраняет детальные сессии. Но есть флаг --log-level и переменная окружения ANTHROPIC_LOG.

Как НЕ надо делать: запускать просто claude-code generate. Все улетает в эфир.

Правильный способ — установить уровень логирования и направить вывод в файл:

# Устанавливаем максимально детальное логирование
export ANTHROPIC_LOG=debug

# Запускаем сессию и пишем логи в файл
claude-code generate --task "напиши функцию на Python" 2>&1 | tee claude_session_$(date +%s).log

# Или используем встроенный флаг (появился в версии 2.1)
claude-code --log-file ./sessions/ --log-format json generate --task "рефакторинг кода"
💡
Версия 2.1 (вышла в январе 2026) добавила нативную поддержку JSON-логов. Проверь свою версию: claude-code --version. Если ниже 2.1, обнови через pip install --upgrade claude-code.

Что сохраняется в логах? Промпты, полные ответы модели (включая reasoning), вызовы инструментов, временные метки. Золотая жила для анализа.

2Codex CLI и открытые альтернативы

С Codex CLI история похожая. Утилита от OpenAI (которая к 2026-му все еще жива, но сильно изменилась) имеет флаг --verbose, но он не сохраняет логи в файл. Придется использовать shell.

# Захват всей сессии с временными метками
codex --verbose --model gpt-4o-reasoning solve problem.py 2>&1 | awk '{print strftime("%Y-%m-%d %H:%M:%S"), $0}' > codex_session.log

Но если ты читал нашу статью про локальные альтернативы Cursor, то знаешь про Kilo Code. У него с логированием проще: в конфиге ~/.kilo-code/config.yaml можно включить сохранение сессий.

# ~/.kilo-code/config.yaml
observability:
  enable_session_logging: true
  log_directory: "~/kilo_logs"
  format: jsonl  # каждая сессия — отдельная строка JSON

Kilo Code, кстати, хранит не только диалог, но и контекст проекта (через LSP), что бесценно для исследований.

3Универсальный перехватчик: логируем любого агента

А если у агента нет встроенного логирования? Используем script или tee. Старо, но работает.

# Записываем ВСЕ, что происходит в терминале
script -q -c "your-ai-agent command" session.log

# Более современный вариант с timestamp
powershell -Command "Start-Transcript -Path session.log -IncludeInvocationHeader; your-ai-agent; Stop-Transcript"  # для Windows

Но это сырые логи. Их еще нужно распарсить. Для этого есть инструменты вроде Tapes.dev, который умеет структурировать потоки разных агентов.

От сырых логов к структурированному датасету

Собрать логи — полдела. Теперь нужно превратить их в датасет, которым смогут пользоваться другие исследователи.

Формат имеет значение. Я предлагаю использовать схему, вдохновленную OpenAI Evals, но расширенную для агентов.

ПолеОписаниеПример
session_idУникальный идентификатор сессииclaude_1740499200_abc123
timestampВремя начала сессии2026-02-25T10:30:00Z
agent_infoВерсия агента, модель{ "name": "Claude Code", "version": "2.1", "model": "claude-3.7-sonnet" }
trajectoryМассив шагов (промпт, ответ, действия)[ { "step": 1, "type": "prompt", "content": "..." } ]
outcomeРезультат сессии (успех/неудача)"success_with_edits"
metadataЯзык, домен, сложность{ "language": "python", "domain": "web", "difficulty": "medium" }

Теперь пишем скрипт-конвертер, который берет наши логи и выдает JSONL-файл.

#!/usr/bin/env python3
# convert_logs.py
import json
import sys
from datetime import datetime

def parse_claude_log(raw_log: str) -> dict:
    """Парсит лог Claude Code версии 2.1"""
    # Здесь твоя логика парсинга
    # Простейший пример:
    lines = raw_log.split('\n')
    trajectory = []
    for line in lines:
        if line.startswith('PROMPT:'):
            trajectory.append({'step': len(trajectory)+1, 'type': 'prompt', 'content': line[7:]})
        elif line.startswith('REASONING:'):
            trajectory.append({'step': len(trajectory)+1, 'type': 'reasoning', 'content': line[10:]})
    
    return {
        'session_id': f"claude_{int(datetime.now().timestamp())}",
        'timestamp': datetime.utcnow().isoformat() + 'Z',
        'agent_info': {
            'name': 'Claude Code',
            'version': '2.1',
            'model': 'claude-3.7-sonnet'  # уточни по логам
        },
        'trajectory': trajectory,
        'outcome': 'unknown',  # нужно определить эвристиками
        'metadata': {
            'language': 'python',
            'domain': 'general',
            'difficulty': 'unknown'
        }
    }

if __name__ == '__main__':
    with open('raw_session.log', 'r') as f:
        raw = f.read()
    
    parsed = parse_claude_log(raw)
    
    with open('dataset.jsonl', 'a') as out:
        out.write(json.dumps(parsed, ensure_ascii=False) + '\n')

Это базовая структура. В реальности парсинг будет сложнее, но идея ясна.

Очистка и анонимизация: не сливай продакшен

Самая опасная часть. В логах могут быть ключи API, пароли, имена переменных из корпоративного кода.

Никогда не публикуй логи без проверки. Одна ошибка — и твой датасет станет учебником по взлому твоей компании.

Что нужно удалять или заменять на хеши:

  • Ключи API (паттерны вроде sk-, ghp_)
  • Пароли и токены
  • IP-адреса, домены внутренних сервисов
  • Имена реальных людей, клиентов
  • Фрагменты кода, которые могут быть коммерческой тайной

Используй инструменты вроде ggshield (от GitGuardian) или самописные скрипты с регулярными выражениями.

# Простой скрипт для санитации
def sanitize_log_content(text: str) -> str:
    import re
    # Удаляем ключи OpenAI
    text = re.sub(r'sk-[a-zA-Z0-9]{48}', '[API_KEY_REDACTED]', text)
    # Удаляем emails
    text = re.sub(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', '[EMAIL_REDACTED]', text)
    # Заменяем имена доменов на примерные
    text = re.sub(r'\b(?:api\.|internal\.)?mycompany\.com\b', '[INTERNAL_DOMAIN]', text)
    return text

Потом проверь логи через гайд по observability — там есть дополнительные методы анализа.

Публикация: делаем датасет полезным для сообщества

Собрал, почистил, структурировал. Теперь выкладывай. Лучшая платформа — Hugging Face Datasets. Заведи аккаунт (если нет) и создай новый датасет.

💡
Используй лицензию, которая разрешает использование для исследований и коммерции, но требует атрибуции. Например, MIT или Apache 2.0. Укажи точный источник данных и процесс очистки.

Создай хорошее README с описанием:

  • Размер датасета (количество сессий, токенов)
  • Источники (какие агенты, модели, периоды)
  • Схему данных
  • Примеры использования (например, для обучения reward-моделей)
  • Ограничения (языки, домены, возможные смещения)

Загрузи данные в формате JSONL или Parquet (для эффективности). Добавь скрипты для загрузки через datasets библиотеку.

# Пример кода для загрузки твоего датасета
from datasets import load_dataset

ds = load_dataset("your-username/coding-agent-trajectories", split="train")
print(ds[0])  # первая сессия

И вот ты уже создал ценный ресурс для сообщества. Теперь другие исследователи могут тренировать на твоих данных RL-агентов или анализировать паттерны ошибок.

Что дальше? Неочевидные применения

Собранные траектории — не просто архив. Это сырье для инноваций.

Обучение reward-моделей: Разметить сессии по успешности (например, код прошел тесты) и обучить модель, которая оценивает качество действий агента. Это ключ к RLHF для coding-агентов.

Анализ слабых мест: Сгруппируй ошибки. Может, все агенты тупят на работе с асинхронностью в Python? Значит, нужно улучшить тренировочные данные именно в этой области.

Бенчмаркинг: Создай реалистичные тесты на основе реальных сессий. Вместо синтетических задач из LeetCode — настоящие проблемные ситуации из логов.

И помни: следующий прорыв в AI-ассистентах произойдет не из-за новой архитектуры модели, а из-за качества данных для их обучения. Твои логи могут стать тем самым недостающим звеном.

Начни сегодня. Поставь скрипт, который логирует каждую сессию с Claude Code. Через месяц у тебя будет уникальная коллекция. Через полгода — датасет, который захотят использовать в Anthropic или OpenAI. (Шучу, они скорее всего соберут свои. Но твой будет открытым.)

И последний совет: не пытайся собрать все и сразу. Начни с малого — со своих личных проектов. Постепенно добавляй логи от коллег (с их согласия). Качество важнее количества. Одна хорошо размеченная сессия стоит сотни сырых логов.

Удачи. И не теряй цифровое золото.

Подписаться на канал