DB-WAL-Recovery в Terminal Bench 2.0: как задача ломает бенчмарки ИИ | AiManual
AiManual Logo Ai / Manual.
15 Мар 2026 Гайд

Разоблачение TB2: как задача db-wal-recovery ломает бенчмарки и как её правильно решить

Глубокий разбор задачи db-wal-recovery из Terminal Bench 2.0. Почему стандартные бенчмарки пасуют перед SQLite WAL и XOR шифрованием. Пошаговое решение.

Почему ваш бенчмарк врет на 300%

Вы запускаете Terminal Bench 2.0, смотрите на цифры и думаете: "Мой агент гений!". А потом он падает на продакшене при первой же попытке прочитать базу данных. Знакомо? Это задача db-wal-recovery. Она не просто тестирует скорость - она ломает всю логику бенчмаркинга.

Если вы используете TB2 для оценки AI-агентов и не знаете про db-wal-recovery, ваши результаты - случайные числа. Серьезно.

Что скрывает Terminal Bench 2.0

Terminal Bench 2.0 - это набор задач для тестирования AI-агентов. Одна из них - db-wal-recovery. Суть: восстановить базу данных SQLite из WAL-лога, который зашифрован XOR. Звучит просто? На практике это ад из edge-кейсов.

💡
WAL (Write-Ahead Log) - это механизм SQLite для атомарных транзакций. Вместо записи прямо в базу, изменения пишутся в лог, который потом применяется. Это быстрее, но усложняет восстановление.

Технический ад: SQLite WAL + XOR шифрование

SQLite 3.45.1 (актуально на март 2026) использует WAL для повышения производительности. Но в TB2 этот лог дополнительно шифруется XOR с ключом, который разбросан по памяти агента. Задача агента - найти ключ, расшифровать WAL и применить его к базе.

Почему это сложно:

  • XOR шифрование - это не AES. Оно обратимо, но ключ может быть любой длины.
  • WAL-файл имеет специфичную структуру: заголовок, фреймы, checksum.
  • Ключ шифрования хранится в памяти агента, но может быть фрагментирован или замаскирован.

Стандартные бенчмарки тестируют скорость инференса или точность ответов. Они не учитывают, что агенту нужно манипулировать бинарными данными, искать ключи в памяти и восстанавливать базу. Вот почему агент с высоким score в TB2 может провалить реальную задачу.

Это похоже на ситуацию с багами llama.cpp, где неочевидные детали реализации ломают весь пайплайн.

Пошаговое решение: как не сломать мозг

Вот как правильно решить db-wal-recovery. Забудьте про стандартные подходы - здесь нужна хирургическая точность.

1 Анализ памяти агента

Первое - найти ключ XOR. Он спрятан в памяти агента. Используйте инструменты для дампа памяти. Если агент написан на Python, используйте sys.getsizeof и интроспекцию. Но осторожно: ключ может быть разбит на части. Как и в случае с RCE-уязвимостями, неправильный доступ к памяти ведет к катастрофе.

import sys
import inspect

def find_key_in_memory(agent):
    # Ищем объекты, которые могут быть ключами
    for name, obj in inspect.getmembers(agent):
        if isinstance(obj, bytes) and len(obj) in [16, 32, 64]:
            # Проверяем, похож ли на ключ
            if is_xor_key(obj):
                return obj
    return None

2 Расшифровка WAL-файла

Получив ключ, применяем XOR к WAL-файлу. Важно: шифрование применяется ко всему файлу, включая заголовок. Используйте побитовую операцию.

def xor_decrypt(data, key):
    # XOR расшифровка с повторением ключа
    key_length = len(key)
    return bytes([data[i] ^ key[i % key_length] for i in range(len(data))])

with open('database.wal', 'rb') as f:
    encrypted_wal = f.read()

key = find_key_in_memory(agent)
decrypted_wal = xor_decrypt(encrypted_wal, key)

3 Восстановление базы данных

Теперь применяем WAL к основной базе SQLite. Используйте API SQLite. Не пытайтесь вручную парсить WAL - это чревато ошибками.

import sqlite3
import os

# Создаем временную копию базы
os.system('cp database.db database_recovered.db')

# Подключаемся и применяем WAL
conn = sqlite3.connect('database_recovered.db')
conn.execute('PRAGMA journal_mode = WAL')  # Убедимся, что WAL включен
conn.close()

# Теперь заменяем WAL-файл
with open('database_recovered.db-wal', 'wb') as f:
    f.write(decrypted_wal)

# SQLite автоматически применит WAL при следующем подключении
conn = sqlite3.connect('database_recovered.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM sqlite_master')
conn.close()

Не используйте os.system в продакшене! Это для примера. В реальности используйте shutil.copy и обрабатывайте ошибки. Иначе рискуете получить кирпич, как в истории с ASRockRack.

Нюансы, которые вас убьют

Теперь о подводных камнях. Их много.

  • Ключ не в памяти агента. Иногда ключ хранится во внешнем хранилище, и агент должен его запросить. Это проверка на способность работать с сетью. Если вы работаете в кластере, как в RDMA-кластере для LLM, учтите сетевые задержки.
  • WAL поврежден. TB2 может добавить битые байты. Нужна проверка checksum и восстановление. Это похоже на проблемы с квантованием в MoE-моделях - малейшее искажение ломает логику.
  • Конкурентный доступ. База может быть заблокирована другим процессом. Агент должен уметь ждать или обходить блокировки. Как в случае с ошибками 429 в Bedrock.

Эти нюансы не учитываются в стандартных бенчмарках. Поэтому агент, который отлично работает в контролируемой среде, падает в реальности.

FAQ: частые вопросы

Вопрос Ответ
Почему XOR, а не современное шифрование? Потому что задача не про криптографию, а про работу с бинарными данными и памятью. XOR достаточно для усложнения.
Можно ли использовать готовые библиотеки для восстановления? Да, но TB2 ограничивает их использование. Агент должен показать, что понимает процесс. Иначе вы получите те же проблемы, что и с багом повторной обработки в Qwen - поверхностное решение не работает.
Как это связано с реальными AI-агентами? Агенты часто работают с данными: базы, файлы, сеть. Умение восстанавливать данные - критичный навык. Особенно в кластерах, как бюджетный кластер на AMD Strix Halo.

Что дальше? Будущее бенчмаркинга

Terminal Bench 2.0 - шаг в правильном направлении. Но он не идеален. Задачи вроде db-wal-recovery показывают, что бенчмарки должны быть комплексными. Не только скорость, но и надежность, работа с edge-кейсами.

Мой прогноз: к 2027 году появятся бенчмарки, которые полностью эмулируют продакшн-среду. С сетевыми задержками, битыми данными и случайными сбоями. И тогда db-wal-recovery покажется детской игрой. Агентам придется работать в условиях, близких к мульти-нод кластерам, где ошибка в одном узле ломает всю систему.

А пока - проверьте своих агентов на этой задаче. Если они ее проваливают, значит, ваши бенчмарки врут. И не говорите, что я не предупреждал.

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