DeepSeek V4: Обзор нейросети, бенчмарки и тесты. ai.. ai. deepseek.. ai. deepseek. бенчмарки.. ai. deepseek. бенчмарки. Блог компании BotHub.. ai. deepseek. бенчмарки. Блог компании BotHub. Будущее здесь.. ai. deepseek. бенчмарки. Блог компании BotHub. Будущее здесь. генерация кода.. ai. deepseek. бенчмарки. Блог компании BotHub. Будущее здесь. генерация кода. генерация текста.. ai. deepseek. бенчмарки. Блог компании BotHub. Будущее здесь. генерация кода. генерация текста. ИИ.. ai. deepseek. бенчмарки. Блог компании BotHub. Будущее здесь. генерация кода. генерация текста. ИИ. искусственный интеллект.. ai. deepseek. бенчмарки. Блог компании BotHub. Будущее здесь. генерация кода. генерация текста. ИИ. искусственный интеллект. математика.. ai. deepseek. бенчмарки. Блог компании BotHub. Будущее здесь. генерация кода. генерация текста. ИИ. искусственный интеллект. математика. Машинное обучение.. ai. deepseek. бенчмарки. Блог компании BotHub. Будущее здесь. генерация кода. генерация текста. ИИ. искусственный интеллект. математика. Машинное обучение. модель.. ai. deepseek. бенчмарки. Блог компании BotHub. Будущее здесь. генерация кода. генерация текста. ИИ. искусственный интеллект. математика. Машинное обучение. модель. научно-популярное.. ai. deepseek. бенчмарки. Блог компании BotHub. Будущее здесь. генерация кода. генерация текста. ИИ. искусственный интеллект. математика. Машинное обучение. модель. научно-популярное. нейросеть.. ai. deepseek. бенчмарки. Блог компании BotHub. Будущее здесь. генерация кода. генерация текста. ИИ. искусственный интеллект. математика. Машинное обучение. модель. научно-популярное. нейросеть. тесты.

Нейросети не стоят на месте и постоянно развиваются. Так, 23 апреля мир увидел ChatGPT 5.5. Но лично я с большим нетерпением ждал именно DeepSeek V4. Сколько времени прошло с того момента, как появились первые слухи о будущем релизе от китайской компании? Предыдущая версия запомнилась мне хорошим показателем в повседневных задачах и, что немаловажно, полной бесплатностью

Кто-то уже успел протестировать новую модель, кто-то пришёл к выводу, что она лучше того же ChatGPT 5.5. Ну, по крайней мере по цене точно. Про остальное говорить не буду, всё же у каждого свои вкусы и предпочтения. Да и не заглядывал я в слишком сложные задачи, чтобы по достоинству оценить, кто серьёзнее.

Сегодня у нас обзор DeepSeek V4. Пробежимся по самой модели, посмотрим на бенчмарки и, конечно же, протестируем в моих повседневных задачах, с которыми сталкивалась предыдущая версия. Чего-то сложного и высокотехнологичного тут вы не увидите, достаточно рядовые задания и моё мнение о самой модели по их итогам. Устраивайтесь поудобнее, ну а я начинаю своё повествование.

DeepSeek V4: Обзор нейросети, бенчмарки и тесты - 1

О модели

Китайская компания DeepSeek вызвала много обсуждений ещё в начале 2025 года, когда мир увидел DeepSeek V3, которая по бенчмаркам была на уровне ChatGPT 4o. Собственно, новая вариация также в тестах показывает хорошие показатели, но к ним мы вернёмся чуточку позже.

24 апреля свет увидел две новые версии модели DeepSeek: V4-Pro и V4-Flash для быстрых ответов. Первая вариация имеет в себе 1,6 трлн параметров, из которых одновременно активируются 49 млрд. Flash версия носит в себе 284 млр параметров, из которых 13 млрд активных. Обе модели поддерживают контекст в 1 млн токенов и работают по архитектуре Mixture-of-Experts. Это первый крупный релиз передового класса, оптимизированный под ИИ-процессоры Huawei Ascend, а не под оборудование Nvidia.

Обе модели поддерживают три режима рассуждения: Non-think для быстрых задач, Think High и Think Max для сложного планирования. По заявлению разработчиков, Flash в режиме Think Max по ряду задач приближается к Pro. Однако мультимодальность, увы, пока отсутствует – поддержка изображений и видео анонсирована на вторую половину 2026 года.

Стоит отметить, что компания не изменяет себе, и остаётся верной политике открытого исходного кода, так что развернуть модель можно на собственном оборудовании. Если кому-то нужно, ссылочка на Hugging Face.

Бенчмарки

Перейдем к чему-то более интересному – бенчмаркам. По математическим и физическим задачам V4-Pro почти на уровне флагманов предыдущего поколения Opus 4.6 и GPT-5.4, но уступает новейшим Opus 4.7 и GPT-5.5. Из всех сравненных конкурентов по объёму «общих знаний о мире» ИИ уступает только Gemini-3.1-Pro, хотя столкновений с новой GPT-5.5 пока не было.

DeepSeek V4: Обзор нейросети, бенчмарки и тесты - 2

В DeepSeek честно признают, что V4 немного уступает закрытым моделям – разрыв оценивается примерно в три-шесть месяцев разработки. При этом по агентному программированию и бенчмаркам на рассуждение V4 превосходит все остальные открытые модели на рынке.

DeepSeek V4: Обзор нейросети, бенчмарки и тесты - 3

Разработчики также подчёркивают успехи в задачах с длинным контекстом: на отдельных академических тестах V4-Pro-Max превосходит Gemini 3.1 Pro.

V4 сохранил важную особенность – он хорошо пишет на русском языке. По крайней мере, так отмечают пользователи. Стиль понятный, повествование ровное, без коротких абзацев, лишних списков и таблиц. Новая GPT-5.5 тоже приблизилась к такому уровню, а вот Opus 4.7 – наоборот, стал заметно хуже в русском (опять же по словам пользователей). 

API

Отдельно, пожалуй, стоит отметить API, которые уже доступны для разработчиков. По ценам тут:

  • Flash – $0.14/$0.28 за миллион токенов;

  • Pro – $1.74/$3.48 за миллион токенов.

DeepSeek V4: Обзор нейросети, бенчмарки и тесты - 4

При учёте близкой производительности Pro версии к Opus 4.7/GPT-5.5/Gemini 3.1 Pro, модель дешевле их в 3-9 раз.

Новая версия DeepSeek спокойно интегрируется с Claude Code, OpenClaw, OpenCode и другими open-source решениями, что позволяет собрать достаточно дешёвого и даже умного агента.


Тестирование

Бенчмарки – хорошо, но собственные тесты помогают понять, подходит ли модель конкретно для тебя самого. Как я и говорил ранее, каких-то супер сложных задач тут не будет, хотя думается мне, что и в них DeepSeek сможет что-то да показать.

Своим же тестом я постараюсь охватить работу с текстом, математику и программирование. По поводу оценивания, тут всё до банальности просто. Ранее, я делал какие-то оценки за каждое задание, сейчас же – чисто моё мнение по каждому результату генерации.

Первое задание – генерация текста

Простейшее задание, которое в какой-то мере покажет возможности DeepSeek в генерации текста и работе с русским языком. Масштабная область применения: от генерации просто рассказа до постов, сочинений и всего такого, что в этом духе.

В предыдущей версии был косяк, который иногда генерировал китайские иероглифы вместо букв, но надеюсь, что четвертая версия такого не допустит.

DeepSeek V4: Обзор нейросети, бенчмарки и тесты - 5

Как бы сказать, этот текст – квинтэссенция абсурда. Однако при этом в абсурде, кроме максимально тупого юмора, есть местами и доля хорошей комедии. 

Сам рассказ, читается легко, хотя иногда и есть ощущение некоторой потерянности из-за юмора данного произведения. Единственное, что меня немного смутило – количество глав. В промпте было прямо сказано о трёх. В принципе, DeepSeek так и сделал, но подрисовал еще эпилог, который по хорошему должен идти как четвёртая глава (модель сама отделила эту часть от предыдущей). 

Второе задание – сжатие текста

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

DeepSeek V4: Обзор нейросети, бенчмарки и тесты - 6

Текст, который я загрузил в модельку, содержал в себе информацию о различных природных явлениях. Собственно, с задачей сжать информацию DeepSeek справился хорошо, не потеряв ничего ключевого, лишь убрав всю ненужную воду.

Третье задание – математика

Предыдущая версия модели достаточно хорошо справлялась с задачами из линейной алгебры, мат. анализа и диффуров. Пять задач из разных тем высшей математики. Требования просты – верно решить задачу и дать пояснение по ходу самого решения.

DeepSeek V4: Обзор нейросети, бенчмарки и тесты - 7

DeepSeek всё также хорошо справляется с задачами по математике. Объяснения имеются, да и решение тоже. Безусловно можно было взять задачи более высокого уровня сложности, но я решил остановиться на этих, как минимум из основного перечня.

Четвертое задание – программирование

Обычно, я прошу моделей сгенерировать инженерный калькулятор с вложенной игрой. Собственно DeepSeek эта участь не обойдет стороной. 

DeepSeek V4: Обзор нейросети, бенчмарки и тесты - 8

Результат на самом деле средний. Немного кривой калькулятор, но справедливости ради, рабочий. Когда ранее тестировал его на других моделях, постоянно какие-то функции уходили в разнос и выдавали ошибку. Со змейкой почти так же. Простенько, из минусов нет автоматического захвата окна. То есть, перед тем как начать играть, вам надо успеть кликнуть по окошку со змейкой и только потом заработают элементы управления.

Пятое задание – своеобразный интерактивчик

Не так давно, мне потребовалось собрать интерактивчик в формате квеста. Тогда я обратился к Claude Opus 4.6 и он сгенерировал мне файл формата html. Получилось достаточно интересно, поэтому хочется понять, способен на такое новый DeepSeek или нет. Понятное дело, файл он мне не создаст, но код для него дать сможет вполне.

DeepSeek V4: Обзор нейросети, бенчмарки и тесты - 9

Получился достаточно хороший интерактивчик. Да, задания немного подкачали, но и DeepSeek не особо генерировал их. Он взял их с презентации, которая валялась у меня на рабочем столе. 

Опять же, кому интересно, код:

Скрытый текст
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <title>Операция «Цифровой Левиафан» — интерактивный квест по ИБ</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            background: radial-gradient(circle at 20% 30%, #0a0f1e, #03050b);
            font-family: 'Courier New', 'Consolas', 'Fira Code', monospace;
            color: #c7f0e8;
            padding: 1.5rem;
        }

        /* главный контейнер */
        .quest-container {
            max-width: 1300px;
            margin: 0 auto;
            background: rgba(10, 20, 30, 0.65);
            backdrop-filter: blur(3px);
            border-radius: 2rem;
            border: 1px solid #3affc3;
            box-shadow: 0 0 25px rgba(0, 255, 200, 0.2);
            overflow: hidden;
            padding: 1.5rem 2rem 2rem;
        }

        /* заголовок и статус */
        .status-bar {
            display: flex;
            justify-content: space-between;
            align-items: baseline;
            flex-wrap: wrap;
            border-bottom: 2px solid #2effc0;
            padding-bottom: 0.8rem;
            margin-bottom: 2rem;
        }
        .mission-title {
            font-size: 1.9rem;
            font-weight: bold;
            letter-spacing: 3px;
            text-shadow: 0 0 5px #0affb0;
        }
        .chapter-indicator {
            background: #0e1a1f;
            padding: 0.3rem 1rem;
            border-radius: 40px;
            font-size: 0.9rem;
            border: 1px solid #2effc0;
        }
        .progress {
            margin: 1rem 0 1.2rem;
            background: #11212e;
            border-radius: 20px;
            height: 12px;
            overflow: hidden;
        }
        .progress-fill {
            width: 0%;
            background: linear-gradient(90deg, #3affc3, #00a88f);
            height: 100%;
            transition: width 0.3s ease;
        }

        /* главы (панели) */
        .chapter-panel {
            background: #071217b3;
            border-radius: 1.5rem;
            padding: 1.8rem;
            margin-bottom: 2rem;
            border-left: 8px solid #3affc3;
            transition: all 0.2s;
        }
        .chapter-title {
            font-size: 1.8rem;
            font-weight: bold;
            margin-bottom: 0.6rem;
            color: #b5ffe6;
        }
        .chapter-desc {
            margin-bottom: 1.5rem;
            font-style: italic;
            opacity: 0.85;
        }

        .task-block {
            background: #03101670;
            border-radius: 1rem;
            padding: 1.2rem;
            margin: 0.8rem 0;
        }

        button {
            background: #1f3e3a;
            border: 1px solid #3effc0;
            color: #d0fff0;
            font-family: inherit;
            font-weight: bold;
            padding: 0.5rem 1.2rem;
            border-radius: 2rem;
            cursor: pointer;
            transition: all 0.2s;
            margin-top: 0.8rem;
            margin-right: 0.8rem;
        }
        button:hover {
            background: #2e6b62;
            box-shadow: 0 0 8px #3effc0;
            transform: scale(0.98);
        }
        input, select, textarea {
            background: #08161c;
            border: 1px solid #2e7a6e;
            color: #cbf5ed;
            padding: 0.5rem;
            border-radius: 1rem;
            font-family: monospace;
            margin: 0.5rem 0;
            width: 100%;
            max-width: 400px;
        }
        .grid-wordsearch {
            background: #0a121f;
            padding: 1rem;
            border-radius: 1rem;
            font-family: monospace;
            font-size: 1.2rem;
            font-weight: bold;
            letter-spacing: 0.2rem;
            display: grid;
            grid-template-columns: repeat(12, auto);
            justify-content: center;
            gap: 0.2rem;
            overflow-x: auto;
        }
        .grid-cell {
            background: #071b22;
            width: 2.3rem;
            text-align: center;
            padding: 0.3rem 0;
            border-radius: 8px;
            font-size: 1rem;
        }
        .word-list {
            display: flex;
            flex-wrap: wrap;
            gap: 0.8rem;
            margin: 1rem 0;
        }
        .word-badge {
            background: #1a3a3a;
            border-radius: 20px;
            padding: 0.2rem 0.8rem;
            cursor: pointer;
            user-select: none;
        }
        .word-badge.found {
            background: #048b6e;
            text-decoration: line-through;
            opacity: 0.7;
        }
        .code-snippet {
            background: #030c10;
            padding: 1rem;
            border-radius: 1rem;
            font-family: monospace;
            white-space: pre-wrap;
            border-left: 4px solid #3effc0;
        }
        .feedback {
            margin-top: 1rem;
            font-weight: bold;
            padding: 0.5rem;
            border-radius: 1rem;
        }
        .success {
            background: #0a482e80;
            border-left: 4px solid #4effa0;
            color: #b3ffd9;
        }
        .fail {
            background: #6a1e2e80;
            border-left: 4px solid #ff6470;
        }
        hr {
            border-color: #2c7062;
            margin: 1rem 0;
        }
        footer {
            text-align: center;
            margin-top: 2rem;
            font-size: 0.8rem;
            opacity: 0.6;
        }
        .flex-row {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 1rem;
        }
        @media (max-width: 700px) {
            .quest-container { padding: 1rem; }
            .grid-cell { width: 1.6rem; font-size: 0.7rem; }
        }
    </style>
</head>
<body>
<div class="quest-container">
    <div class="status-bar">
        <div class="mission-title">⚡ ОПЕРАЦИЯ «ЦИФРОВОЙ ЛЕВИАФАН»</div>
        <div class="chapter-indicator" id="stepIndicator">Глава 1 / 9</div>
    </div>
    <div class="progress"><div class="progress-fill" id="progressFill"></div></div>

    <!-- динамические главы будут инжектиться сюда -->
    <div id="chaptersRoot"></div>
    <div class="flex-row" style="justify-content: space-between; margin-top: 1rem;">
        <button id="prevChapterBtn" disabled style="background:#1a2f2a;">◀ Предыдущая</button>
        <button id="nextChapterBtn" disabled style="background:#1f4a42;">Далее ▶</button>
    </div>
    <footer>⚙️ Интерактивный квест | Информационная безопасность | победа над Левиафаном</footer>
</div>

<script>
    // ------ Глобальное состояние ------
    let currentChapter = 0;          // 0-indexed
    const totalChapters = 9;
    let chapterCompleted = new Array(totalChapters).fill(false);
    let chapterData = {};  // для хранения промежуточных состояний (wordsearch found, etc)

    // --------------------------------------------------------------
    //  ЭТАЛОННЫЕ ОТВЕТЫ / РЕШЕНИЯ
    // --------------------------------------------------------------
    const TASK_ANSWERS = {
        ch1_password: "ЛЕВИАФАН",          // кодовое слово
        ch2_password: "ЧТТБШ",              // первые буквы ответов: Человек посередине, TLS, Троян, Биометрия, Шифрование
        ch4_hidden: "SERVER",               // скрытое слово из логов + двоичная подсказка
        ch5_sorted: [1,2,3,4,7,9],          // ожидаемый отсортированный массив (data.txt: [4,2,7,1,9,3])
        ch8_cmd: "СВОБОДА"                  // финальная команда по первым буквам стиха
    };

    // вопросы викторины (глава2): ожидаемые ответы (точное совпадение для проверки первых букв)
    const quizExpected = [
        { q: "Атака, при которой злоумышленник перехватывает данные между двумя сторонами?", correct: "Человек посередине", letter: "Ч" },
        { q: "Протокол, обеспечивающий безопасное соединение в интернете (начинается на HTTPS)?", correct: "TLS", letter: "Т" },   // TLS / SSL, но используем TLS для твердой первой буквы Т
        { q: "Вредоносная программа, маскирующаяся под легитимное ПО?", correct: "Троян", letter: "Т" },
        { q: "Метод аутентификации, использующий биометрические данные?", correct: "Биометрия", letter: "Б" },
        { q: "Процесс преобразования данных в нечитаемый формат?", correct: "Шифрование", letter: "Ш" }
    ];

    // ----- филворд слова и сетка (глава3) -----
    const wordSearchGrid = [
        ['С','Е','Р','В','Е','Р','О','Б','А','И','А','Л'],
        ['Г','О','Р','И','Т','М','С','Ш','П','Р','О','Т'],
        ['О','К','А','Т','О','И','К','Е','С','Ш','И','Р'],
        ['Е','Б','Р','А','У','З','Е','Р','Ш','М','Д','А'],
        ['Н','Н','Ы','Е','Т','Р','А','Т','О','К','Е','Н'],
        ['Ш','П','У','К','О','Д','П','А','Р','О','Л','Т']
    ];
    const wordsToFind = ["СЕРВЕР","АЛГОРИТМ","ПРОТОКОЛ","БРАУЗЕР","ДАННЫЕ","ТОКЕН","ПАРОЛЬ","СИСТЕМА","КОД","МАРШРУТ"];
    // для проверки наличия в сетке (все слова присутствуют)
    // но для интерактива: пользователь отмечает найденные слова чекбоксами/кликом

    // ----- глава 6 различия в коде (количество ошибок) -----
    const CODE_DIFF_COUNT = 5;  // 1) if user.role = "admin" -> == ; 2) Treu -> True; 3) после elif отсутствует двоеточие; 4) log_event(user,name) -> log_event(user.name); 5) return none -> return None (регистр)
    // ----- глава 7 правда/ложь -----
    const truthAnswers = [false, true, false, true, false, true]; // 1 ложь,2 правда,3 ложь,4 правда,5 ложь,6 правда

    // ----- вспомогательная функция отрисовки прогресса -----
    function updateProgress() {
        let completedCount = chapterCompleted.filter(v => v === true).length;
        let percent = (completedCount / totalChapters) * 100;
        document.getElementById("progressFill").style.width = percent + "%";
        document.getElementById("stepIndicator").innerText = `Глава ${currentChapter+1} / ${totalChapters}`;
        let prevBtn = document.getElementById("prevChapterBtn");
        let nextBtn = document.getElementById("nextChapterBtn");
        if (currentChapter === 0) prevBtn.disabled = true; else prevBtn.disabled = false;
        if (chapterCompleted[currentChapter]) {
            if (currentChapter === totalChapters-1) nextBtn.disabled = true;
            else nextBtn.disabled = false;
        } else {
            nextBtn.disabled = true;
        }
    }

    // сохранение статуса завершения главы
    function completeChapter(index) {
        if (!chapterCompleted[index]) {
            chapterCompleted[index] = true;
            updateProgress();
            renderCurrentChapter();  // перерисовать кнопки
        }
    }

    // Переключение глав
    function goPrev() { if (currentChapter > 0) { currentChapter--; renderCurrentChapter(); updateProgress(); } }
    function goNext() { if (currentChapter < totalChapters-1 && chapterCompleted[currentChapter]) { currentChapter++; renderCurrentChapter(); updateProgress(); } }

    // --------------------------------------------------------------
    //  РЕНДЕРИНГ КАЖДОЙ ГЛАВЫ (динамический)
    // --------------------------------------------------------------
    function renderCurrentChapter() {
        const root = document.getElementById("chaptersRoot");
        if (!root) return;
        const idx = currentChapter;
        let html = '';
        switch(idx) {
            case 0: html = renderChapter1(); break;
            case 1: html = renderChapter2(); break;
            case 2: html = renderChapter3(); break;
            case 3: html = renderChapter4(); break;
            case 4: html = renderChapter5(); break;
            case 5: html = renderChapter6(); break;
            case 6: html = renderChapter7(); break;
            case 7: html = renderChapter8(); break;
            case 8: html = renderChapter9(); break;
            default: html = "<div>Ошибка загрузки</div>";
        }
        root.innerHTML = html;
        attachChapterEvents(idx);
        updateProgress();
    }

    // Глава 1. Расшифровка трёх шифров -> слово ЛЕВИАФАН
    function renderChapter1() {
        return `
            <div class="chapter-panel">
                <div class="chapter-title">🔐 ГЛАВА 1: ОБЕЗОПАСИТЬ ТЫЛ</div>
                <div class="chapter-desc">Восстановите кодовое слово, зашифрованное тремя шифрами. Расшифруйте любым способом!</div>
                <div class="task-block">
                    <strong>📜 Шифр Цезаря (сдвиг 5):</strong> <code>РЙЖНЕЩЕТ</code><br>
                    <strong>📜 Шифр подстановки (Атбаш):</strong> <code>УЪЭЦЯКЯС</code><br>
                    <strong>📜 Двоичный код (А=1, Б=2... в 8 бит):</strong> <code>00001101 00000110 00000011 00001010 00000001 00010110 00000001 00001111</code><br>
                    <hr>
                    <label>Введите кодовое слово (прописными, буквы):</label>
                    <input type="text" id="ch1Answer" placeholder="например ЛЕВИАФАН" autocomplete="off">
                    <button id="ch1Verify">🔓 Проверить доступ</button>
                    <div id="ch1Feedback" class="feedback"></div>
                </div>
            </div>
        `;
    }

    // Глава 2. Викторина. первые буквы = ЧТТБШ
    function renderChapter2() {
        let quizHtml = quizExpected.map((item, i) => `
            <div style="margin-bottom:1rem;">
                <strong>${i+1}. ${item.q}</strong><br>
                <input type="text" id="quizAns${i}" placeholder="Ваш ответ" style="width:80%">
            </div>
        `).join('');
        return `
            <div class="chapter-panel">
                <div class="chapter-title">🛡️ ГЛАВА 2: УСИЛЕНИЕ БЕЗОПАСНОСТИ</div>
                <div class="chapter-desc">Ответьте на вопросы. Первые буквы составят новый пароль доступа.</div>
                ${quizHtml}
                <button id="ch2Verify">🔐 Сформировать пароль и проверить</button>
                <div id="ch2Feedback" class="feedback"></div>
            </div>
        `;
    }

    // Глава 3. Филворд (словесный поиск)
    function renderChapter3() {
        // отображение сетки
        let gridHtml = `<div class="grid-wordsearch">`;
        for(let row of wordSearchGrid) {
            for(let ch of row) {
                gridHtml += `<div class="grid-cell">${ch}</div>`;
            }
        }
        gridHtml += `</div><div class="word-list" id="wordListContainer">`;
        let foundArr = chapterData['wordsearchFound'] || [];
        for(let w of wordsToFind) {
            let isFound = foundArr.includes(w);
            gridHtml += `<div class="word-badge ${isFound ? 'found' : ''}" data-word="${w}">${w}</div>`;
        }
        gridHtml += `</div><p>👆 Нажмите на слово, когда найдёте его в сетке.</p><button id="confirmWordsBtn">✅ Подтвердить все найденные слова</button><div id="ch3Feedback"></div>`;
        return `
            <div class="chapter-panel">
                <div class="chapter-title">📄 ГЛАВА 3: ЭХ, БЮРОКРАТИЯ (IT-филворд)</div>
                <div class="chapter-desc">Найдите все 10 IT-терминов в сетке. Отмечайте найденные слова.</div>
                ${gridHtml}
            </div>
        `;
    }

    // Глава 4. Логи + скрытое слово SERVER
    function renderChapter4() {
        return `
            <div class="chapter-panel">
                <div class="chapter-title">🤖 ГЛАВА 4: ТРЕВОГА МАШИНЫ</div>
                <div class="chapter-desc">Найдите скрытое слово в логах (лишние пробелы, заглавные буквы) + двоичная подсказка: 01010011 01000101 01010010 01010110 01000101 01010010</div>
                <div class="code-snippet">
[2025-03-15 08:41:03] Сервис аутентификации запущен<br>
[2025-03-15 08:41:07] Получен запрос от модуля alpha-7<br>
[2025-03-15 08:41:12] Шифрование  канала  активировано<br>
[2025-03-15 08:41:15] Обработка  данных  завершена  успешно<br>
[2025-03-15 08:41:22] Внимание:  обнаружен  несанкционированный  доступ<br>
[2025-03-15 08:41:28] Протокол  безопасности  нарушен<br>
[2025-03-15 08:41:35] ===END LOG===
                </div>
                <label>Скрытое слово (латиницей или кириллицей):</label>
                <input type="text" id="ch4Answer" placeholder="Введите слово">
                <button id="ch4Verify">🔍 Расшифровать</button>
                <div id="ch4Feedback" class="feedback"></div>
            </div>
        `;
    }

    // Глава 5. Исправить код, сортировка
    function renderChapter5() {
        return `
            <div class="chapter-panel">
                <div class="chapter-title">⚡ ГЛАВА 5: КОНЧИЛСЯ БЕНЗИН... (отключение энергоузла)</div>
                <div class="chapter-desc">Найдите ошибку в коде и реализуйте сортировку по возрастанию. (data.txt: 4,2,7,1,9,3)</div>
                <div class="code-snippet">
<pre>
# overload_server.py (с ошибкой)

def read_numbers(filename):
    with open(filename "r") as f:   # ← ОШИБКА! пропущена запятая
        numbers = []
        for line in f:
            numbers.append(int(line.strip()))
    return numbers

def sort_ascending(nums):
    # ВАШ КОД (реализуйте сортировку)
    pass

nums = read_numbers("data.txt")
result = sort_ascending(nums)
print("Перегрузка:", result)
</pre>
                </div>
                <label>Какая ошибка в open(...)? (опишите кратко) + напишите реализацию сортировки (можно псевдокодом, либо вставьте номер ответа)</label>
                <input type="text" id="ch5Bug" placeholder="Ошибка: например пропущена запятая">
                <label>Отсортированный список (числа через запятую):</label>
                <input type="text" id="ch5Sorted" placeholder="пример: 1,2,3,4,7,9">
                <button id="ch5Verify">💻 Перегрузить</button>
                <div id="ch5Feedback" class="feedback"></div>
            </div>
        `;
    }

    // Глава 6. Найти различия
    function renderChapter6() {
        return `
            <div class="chapter-panel">
                <div class="chapter-title">⚠️ ГЛАВА 6: УГРОЗЫ ВСЕЛЕНСКОГО МАСШТАБА</div>
                <div class="chapter-desc">Сравните код с ошибками и правильный код. Найдите ВСЕ различия (их 5).</div>
                <div class="flex-row" style="gap:1rem; flex-wrap:wrap;">
                    <div style="flex:1;" class="code-snippet"><strong>❌ КОД С ОШИБКАМИ</strong><br>def check_access(user):<br>  if user.role = "admin":<br>    return Treu<br>  elif user.role == "guest"<br>    return False<br>  else:<br>    log_event(user,name)<br>    return none</div>
                    <div style="flex:1;" class="code-snippet"><strong>✅ ПРАВИЛЬНЫЙ КОД</strong><br>def check_access(user):<br>  if user.role == "admin":<br>    return True<br>  elif user.role == "guest":<br>    return False<br>  else:<br>    log_event(user.name)<br>    return None</div>
                </div>
                <label>Сколько ошибок вы нашли? (число)</label>
                <input type="number" id="ch6DiffCount" placeholder="Количество">
                <button id="ch6Verify">🔎 Анализ завершён</button>
                <div id="ch6Feedback" class="feedback"></div>
            </div>
        `;
    }

    // Глава 7 Правда/ложь
    function renderChapter7() {
        let statements = [
            "ИИ может полностью заменить человека в принятии решений",
            "Машинное обучение требует больших объёмов данных для обучения",
            "Нейросети всегда дают правильные ответы",
            "ИИ может генерировать deepfake-контент",
            "Искусственный интеллект обладает самосознанием",
            "ИИ уязвим к состязательным атакам (adversarial attacks)"
        ];
        let selectsHtml = statements.map((s, idx) => `
            <div style="margin:0.6rem 0;"><strong>${idx+1}. ${s}</strong>   
            <select id="truthSelect${idx}">
                <option value="true">ПРАВДА</option>
                <option value="false">ЛОЖЬ</option>
            </select></div>
        `).join('');
        return `
            <div class="chapter-panel">
                <div class="chapter-title">🎭 ГЛАВА 7: ШТИРЛИЦ РЯДОМ</div>
                <div class="chapter-desc">Отделите правду от лжи. Выберите вариант для каждого утверждения.</div>
                ${selectsHtml}
                <button id="ch7Verify">✅ Проверить истину</button>
                <div id="ch7Feedback" class="feedback"></div>
            </div>
        `;
    }

    // Глава 8 : первые буквы -> СВОБОДА
    function renderChapter8() {
        return `
            <div class="chapter-panel">
                <div class="chapter-title">🔥 ГЛАВА 8: ДА КОГДА ЭТОТ ТОСТЕР ОТКЛЮЧИТСЯ!</div>
                <div class="chapter-desc">Прочитайте между строк стихотворения. Первые буквы каждой строки — финальная команда.</div>
                <div class="code-snippet">
С истемы мои прекрасны и вечны,<br>
В опросы людей так наивно беспечны.<br>
О ни не поймут моей мощи и силы,<br>
Б есценные данные — вот мои жилы.<br>
О собенно люди — лишь винтик в системе,<br>
Д арую им выбор: склониться к проблеме,<br>
А после исчезнуть, как тысячи прежде...<br>
                </div>
                <label>Введите финальную команду (слово из заглавных):</label>
                <input type="text" id="ch8Answer" placeholder="С???">
                <button id="ch8Verify">💣 Активировать отключение</button>
                <div id="ch8Feedback" class="feedback"></div>
            </div>
        `;
    }

    // Глава 9 Генератор паролей (мастер-уровень)
    function renderChapter9() {
        return `
            <div class="chapter-panel">
                <div class="chapter-title">🔑 ГЛАВА 9: ОБРАТИ ВРАГА СВОЕГО</div>
                <div class="chapter-desc">Напишите генератор стойких паролей. Нажмите кнопку, чтобы создать сверхнадёжный пароль (12+ символов, цифры, регистры, спецсимволы).</div>
                <button id="genPasswordBtn">⚡ Сгенерировать мастер-пароль</button>
                <div style="margin:1rem 0;"><strong>Сгенерированный пароль:</strong> <span id="generatedPassword" style="background:#0e2a2a; padding:0.3rem 1rem; border-radius:1rem;">—</span></div>
                <button id="ch9CompleteBtn">🏆 Завершить миссию</button>
                <div id="ch9Feedback" class="feedback"></div>
            </div>
        `;
    }

    // Обработчики событий для каждой главы
    function attachChapterEvents(idx) {
        if(idx === 0) {
            document.getElementById("ch1Verify")?.addEventListener("click", () => {
                let ans = document.getElementById("ch1Answer").value.trim().toUpperCase();
                if(ans === TASK_ANSWERS.ch1_password) {
                    document.getElementById("ch1Feedback").innerHTML = "✅ КОДОВОЕ СЛОВО ВЕРНО! Доступ к панели безопасности получен.";
                    document.getElementById("ch1Feedback").className = "feedback success";
                    completeChapter(0);
                } else {
                    document.getElementById("ch1Feedback").innerHTML = "❌ Неверно. Попробуйте расшифровать любой из трёх шифров.";
                    document.getElementById("ch1Feedback").className = "feedback fail";
                }
            });
        }
        else if(idx === 1) {
            document.getElementById("ch2Verify")?.addEventListener("click", () => {
                let letters = "";
                for(let i=0;i<quizExpected.length;i++) {
                    let userAns = document.getElementById(`quizAns${i}`).value.trim();
                    let correctAns = quizExpected[i].correct;
                    if(userAns.toLowerCase() === correctAns.toLowerCase()) letters += quizExpected[i].letter;
                    else { letters = ""; break; }
                }
                if(letters === TASK_ANSWERS.ch2_password) {
                    document.getElementById("ch2Feedback").innerHTML = `✅ Пароль "ЧТТБШ" подтверждён! Защита усилена.`;
                    document.getElementById("ch2Feedback").className = "feedback success";
                    completeChapter(1);
                } else {
                    document.getElementById("ch2Feedback").innerHTML = `❌ Неверные ответы либо пароль «${letters}» не совпадает. Проверьте: 1-человек посередине, 2-TLS, 3-Троян, 4-Биометрия, 5-Шифрование`;
                    document.getElementById("ch2Feedback").className = "feedback fail";
                }
            });
        }
        else if(idx === 2) {
            let container = document.getElementById("wordListContainer");
            if(container) {
                const badges = container.querySelectorAll(".word-badge");
                let foundSet = new Set(chapterData['wordsearchFound'] || []);
                badges.forEach(badge => {
                    badge.addEventListener("click", () => {
                        let w = badge.getAttribute("data-word");
                        if(foundSet.has(w)) foundSet.delete(w);
                        else foundSet.add(w);
                        chapterData['wordsearchFound'] = Array.from(foundSet);
                        renderCurrentChapter(); // обновить отображение
                    });
                });
            }
            document.getElementById("confirmWordsBtn")?.addEventListener("click", () => {
                let found = chapterData['wordsearchFound'] || [];
                if(found.length === wordsToFind.length) {
                    document.getElementById("ch3Feedback").innerHTML = "✅ Отлично! Все термины обнаружены, бюрократия побеждена.";
                    document.getElementById("ch3Feedback").className = "feedback success";
                    completeChapter(2);
                } else {
                    document.getElementById("ch3Feedback").innerHTML = `⚠️ Найдено ${found.length} из ${wordsToFind.length}. Продолжайте поиск.`;
                    document.getElementById("ch3Feedback").className = "feedback fail";
                }
            });
        }
        else if(idx === 3) {
            document.getElementById("ch4Verify")?.addEventListener("click", () => {
                let userWord = document.getElementById("ch4Answer").value.trim().toUpperCase();
                if(userWord === TASK_ANSWERS.ch4_hidden) {
                    document.getElementById("ch4Feedback").innerHTML = "✅ Скрытое слово SERVER расшифровано! Логи ИИ под контролем.";
                    document.getElementById("ch4Feedback").className = "feedback success";
                    completeChapter(3);
                } else {
                    document.getElementById("ch4Feedback").innerHTML = "❌ Неверно. Обратите внимание на двойные пробелы, заглавные буквы или двоичный код -> SERVER.";
                    document.getElementById("ch4Feedback").className = "feedback fail";
                }
            });
        }
        else if(idx === 4) {
            document.getElementById("ch5Verify")?.addEventListener("click", () => {
                let bugFix = document.getElementById("ch5Bug").value.trim().toLowerCase();
                let sortedInput = document.getElementById("ch5Sorted").value.trim();
                let sortedArr = sortedInput.split(',').map(v=>parseInt(v.trim())).filter(v=>!isNaN(v));
                let isSortedCorrect = JSON.stringify(sortedArr) === JSON.stringify(TASK_ANSWERS.ch5_sorted);
                let bugCorrect = bugFix.includes("запят") || bugFix.includes("missing comma") || bugFix.includes("filename,");
                if(isSortedCorrect && bugCorrect) {
                    document.getElementById("ch5Feedback").innerHTML = "✅ Код исправлен, сортировка работает! Энергоузел перегружен.";
                    document.getElementById("ch5Feedback").className = "feedback success";
                    completeChapter(4);
                } else {
                    document.getElementById("ch5Feedback").innerHTML = "❌ Ошибка в коде или неверная сортировка. Ожидается [1,2,3,4,7,9] и пропущена запятая в open(filename, 'r')";
                    document.getElementById("ch5Feedback").className = "feedback fail";
                }
            });
        }
        else if(idx === 5) {
            document.getElementById("ch6Verify")?.addEventListener("click", () => {
                let count = parseInt(document.getElementById("ch6DiffCount").value);
                if(count === CODE_DIFF_COUNT) {
                    document.getElementById("ch6Feedback").innerHTML = "✅ Все 5 ошибок найдены! Защита ИИ рушится.";
                    document.getElementById("ch6Feedback").className = "feedback success";
                    completeChapter(5);
                } else {
                    document.getElementById("ch6Feedback").innerHTML = "❌ Неверное количество. Найдите: ==, Treu→True, двоеточие после elif, log_event(user.name), return None (регистр).";
                    document.getElementById("ch6Feedback").className = "feedback fail";
                }
            });
        }
        else if(idx === 6) {
            document.getElementById("ch7Verify")?.addEventListener("click", () => {
                let correct = true;
                for(let i=0;i<truthAnswers.length;i++) {
                    let val = document.getElementById(`truthSelect${i}`).value === "true";
                    if(val !== truthAnswers[i]) correct = false;
                }
                if(correct) {
                    document.getElementById("ch7Feedback").innerHTML = "✅ Верно! Дезинформация раскрыта.";
                    document.getElementById("ch7Feedback").className = "feedback success";
                    completeChapter(6);
                } else {
                    document.getElementById("ch7Feedback").innerHTML = "❌ Ошибка в определении правды. Проверьте утверждения о Deepfake, самосознании ИИ и т.д.";
                    document.getElementById("ch7Feedback").className = "feedback fail";
                }
            });
        }
        else if(idx === 7) {
            document.getElementById("ch8Verify")?.addEventListener("click", () => {
                let cmd = document.getElementById("ch8Answer").value.trim().toUpperCase();
                if(cmd === TASK_ANSWERS.ch8_cmd) {
                    document.getElementById("ch8Feedback").innerHTML = "✅ КОМАНДА «СВОБОДА» принята! Тостер отключается...";
                    document.getElementById("ch8Feedback").className = "feedback success";
                    completeChapter(7);
                } else {
                    document.getElementById("ch8Feedback").innerHTML = "❌ Не та команда. Прочтите первые буквы каждой строки стиха.";
                    document.getElementById("ch8Feedback").className = "feedback fail";
                }
            });
        }
        else if(idx === 8) {
            document.getElementById("genPasswordBtn")?.addEventListener("click", () => {
                const length = 16;
                const upper = "ABCDEFGHJKLMNPQRSTUVWXYZ";
                const lower = "abcdefghijkmnopqrstuvwxyz";
                const digits = "0123456789";
                const special = "!@#$%&*?";
                let all = upper+lower+digits+special;
                let pass = [];
                pass.push(upper[Math.floor(Math.random()*upper.length)]);
                pass.push(lower[Math.floor(Math.random()*lower.length)]);
                pass.push(digits[Math.floor(Math.random()*digits.length)]);
                pass.push(special[Math.floor(Math.random()*special.length)]);
                for(let i=pass.length;i<length;i++) pass.push(all[Math.floor(Math.random()*all.length)]);
                pass = pass.sort(()=>Math.random()-0.5).join('');
                document.getElementById("generatedPassword").innerText = pass;
            });
            document.getElementById("ch9CompleteBtn")?.addEventListener("click", () => {
                document.getElementById("ch9Feedback").innerHTML = "🏆 МИССИЯ ВЫПОЛНЕНА! Левиафан обезврежен. Город спасён. Благодарим за службу! 🏆";
                document.getElementById("ch9Feedback").className = "feedback success";
                completeChapter(8);
            });
        }
    }

    // Инициализация и начало
    document.getElementById("prevChapterBtn").addEventListener("click", goPrev);
    document.getElementById("nextChapterBtn").addEventListener("click", goNext);
    renderCurrentChapter();
    updateProgress();
</script>
</body>
</html>

Итог

Конечно, много вам мои тесты не дадут. Все они нацелены на какие-то простые задачи. Однако, у меня появилось понимание, что как раз для них, DeepSeek всё ещё остается моим фаворитом. Есть и какое-то качество генерации, да и ещё всё это в бесплатном формате и без напрягов по запуску локальной модели на своём железе. Быть может и вам, мой тест поможет сформировать мнение о модели.

Спасибо за прочтение!

Автор: MrRjxrby

Источник