Implicit Chain-of-Thought: рассуждения без слов

Implicit CoT в 2026: training/runtime concept, где reasoning интернализируется в модель и не выводится как явная цепочка токенов.

Implicit Chain-of-Thought (неявная цепочка рассуждений) — подход, при котором модель обучается «думать» внутри своих скрытых представлений, не генерируя промежуточные токены рассуждений. В 2026 его полезно понимать не как prompt trick, а как model/runtime property: reasoning остаётся внутри модели и не становится видимой цепочкой, которую можно прочитать, отладить или отранжировать как обычный CoT trace.

Представьте опытного водителя. Новичок проговаривает каждый шаг: «посмотрю в зеркало, включу поворотник, поверну руль, проверю слепую зону...» Опытный водитель делает всё то же самое, но автоматически — не проговаривая вслух. Implicit CoT работает так же: модель обучается на развёрнутых рассуждениях, а затем «сворачивает» их внутрь, отвечая коротко, но с тем же качеством мышления.

Суть в двух словах

Стандартный Chain of Thought просит модель рассуждать вслух — и это работает, но стоит токенов, времени и денег. Каждый промежуточный шаг — это сгенерированные токены, за которые вы платите.

Implicit CoT предлагает другой путь: обучить модель так, чтобы она рассуждала внутри своих скрытых представлений (hidden states), не генерируя текст промежуточных шагов. Модель «думает» — но молча.

Explicit CoT (стандартный)
Задача: 23 × 17 = ? Давайте подумаем шаг за шагом. 1. 23 × 10 = 230 2. 23 × 7 = 161 3. 230 + 161 = 391 Ответ: 391 → 45 токенов, ~0.3 сек
Implicit CoT (внутренние рассуждения)
Задача: 23 × 17 = ? Ответ: 391 → 5 токенов, ~0.05 сек (рассуждение произошло внутри модели)

Ключевое различие:

  • Explicit CoT — рассуждения записываются в виде текста. Прозрачно, но дорого.
  • Implicit CoT — рассуждения «закодированы» в скрытых слоях модели. Быстро и дёшево, но непрозрачно.
На типичных задачах Implicit CoT даёт ускорение в 5-10 раз и сокращение стоимости в 5-10 раз при сопоставимом качестве на простых и средних задачах. На сложных multi-step задачах точность может снижаться на 10-20%.
ПромптClaude
Ты — модель, обученная методом Implicit CoT. Отвечай сразу, без промежуточных шагов.

Задача: В магазине яблоки стоят 85 руб./кг, груши — 120 руб./кг. Мария купила 2 кг яблок и 1.5 кг груш. Сколько она заплатила?
Ответ модели

350 руб.

Как работает Implicit CoT

Проблема стандартного CoT

Chain of Thought — одна из самых эффективных техник промптинга. Но у неё есть цена:

Среднее количество выходных токенов на задачу
Explicit CoT100%
Chain of Draft15%
Implicit CoT8%
Direct answer5%

Для одного запроса разница несущественна. Но при 100 000 запросов в день explicit CoT генерирует 10 млн лишних токенов — это сотни долларов в день только на рассуждения.

Механизм интернализации

Implicit CoT «встраивает» рассуждения в саму модель через обучение:

Два основных подхода

1. Knowledge Distillation (дистилляция знаний)

Большая модель-учитель (например, GPT-4) генерирует развёрнутые CoT-рассуждения. Компактная модель-ученик обучается воспроизводить только ответы, но её скрытые представления настраиваются так, чтобы имитировать внутренние состояния учителя.

2. Progressive Internalization (постепенная интернализация)

Одна и та же модель проходит несколько этапов fine-tuning:

  • Этап 1: полный CoT (задача + 10 шагов → ответ)
  • Этап 2: сокращённый CoT (задача + 5 шагов → ответ)
  • Этап 3: минимальный CoT (задача + 1 шаг → ответ)
  • Этап 4: без CoT (задача → ответ)

На каждом этапе модель вынуждена «сжимать» рассуждения в скрытые слои.

Результаты

На датасете GSM8K (арифметические задачи из школьной программы):

МетодТочностьВыходных токенов
Explicit CoT85%~90
Chain of Draft82%~12
Implicit CoT77%~5
Direct (без CoT)58%~5

Implicit CoT сохраняет ~90% точности explicit CoT при x18 меньшем количестве выходных токенов. При этом значительно превосходит прямой ответ без рассуждений (+19 п.п.).

Стоимость: 100K запросов/день (Explicit CoT)
Входные токены: 5M → ~$7.50 Выходные токены: 9M → ~$45.00 Итого: ~$52.50/день → $1,575/месяц
Стоимость: 100K запросов/день (Implicit CoT)
Входные токены: 5M → ~$7.50 Выходные токены: 0.5M → ~$2.50 Итого: ~$10.00/день → $300/месяц Экономия: 80%

Когда использовать Implicit CoT

Плюсы

  • Скорость: ответ в 5-10 раз быстрее, нет генерации промежуточных шагов
  • Стоимость: сокращение расходов на выходные токены в 5-18 раз
  • Масштаб: идеально для high-load систем (100K+ запросов/день)
  • Latency: минимальная задержка, критично для real-time приложений

Минусы

  • Непрозрачность: нет видимых рассуждений — сложнее отлаживать
  • Потеря точности: на сложных задачах (5+ шагов) точность падает на 10-20%
  • Требует fine-tuning: нельзя просто попросить модель — нужно обучение
  • Нет объяснимости: невозможно показать пользователю ход мысли

Идеальные сценарии:

  • Высоконагруженные API (чат-боты, автоматическая классификация)
  • Real-time приложения (автодополнение, подсказки)
  • Мобильные и edge-устройства (ограниченные ресурсы)
  • Простые и средние задачи (1-3 шага рассуждения)

Когда НЕ использовать:

  • Сложные multi-step задачи (математические олимпиады, программирование)
  • Когда важна объяснимость (explainability) — медицина, юриспруденция, финансы
  • Когда нужна отладка рассуждений (новые домены, эксперименты)

Как понимать Implicit CoT в 2026

Эта техника важна прежде всего как объяснение того, почему современные reasoning-модели могут отвечать коротко, но всё равно выглядеть "думающими". Она хорошо дополняет картину:

  • explicit CoT даёт видимый trace;
  • implicit CoT прячет reasoning в hidden states;
  • practical systems часто балансируют между ними через visible vs hidden thinking modes.

Для разработчика это означает простую вещь: если вам нужны auditability, judgeability и human review, implicit reasoning сам по себе не решает задачу. Он хорош там, где важнее latency и economics, чем прозрачность.

Что реально можно взять в product-workflow

Непосредственно внедрить Implicit CoT как пользователь готовой API-модели обычно нельзя. Но practical lessons от техники понятны:

  • не всегда нужен длинный visible CoT;
  • reasoning quality можно частично получать без длинного текстового trace;
  • на high-volume flows стоит сравнивать explicit reasoning route и compact route по цене и качеству.

Иначе говоря, статья полезна не как инструкция "сделай вот такой prompt", а как mental model для routing между cheap/fast answers и explainable answers.

Связь с другими техниками

ТехникаПодходТокеныПрозрачность
Explicit CoTПолные рассуждения вслухМногоПолная
Chain of DraftКраткие заметки на каждом шагеМалоЧастичная
Implicit CoTРассуждения внутри моделиМинимумОтсутствует
Quiet-STaRМодель генерирует «мысли» параллельно, но не показываетВнутриОтсутствует
Quiet-STaR (Zelikman et al., 2024) — техника, при которой модель учится генерировать внутренние «мысли» (rationale tokens) перед каждым реальным токеном. Мысли не выводятся пользователю, но влияют на генерацию. В отличие от Implicit CoT, Quiet-STaR не требует CoT-датасетов — модель учится думать самостоятельно через reinforcement learning.

Техническая реализация

Подготовка данных для Implicit CoT

Первый шаг — собрать датасет с явными CoT-рассуждениями:

# Формат данных для поэтапного обучения
# Этап 1: полный CoT
stage_1_data = [
    {
        "input": "Задача: 23 × 17",
        "output": "Шаг 1: 23 × 10 = 230\nШаг 2: 23 × 7 = 161\nШаг 3: 230 + 161 = 391\nОтвет: 391"
    },
    # ...
]

# Этап 2: сокращённый CoT (оставляем ключевые шаги)
stage_2_data = [
    {
        "input": "Задача: 23 × 17",
        "output": "230 + 161 = 391\nОтвет: 391"
    },
]

# Этап 3: только ответ
stage_3_data = [
    {
        "input": "Задача: 23 × 17",
        "output": "Ответ: 391"
    },
]

Progressive Removal: пошаговый fine-tuning

from transformers import (
    AutoModelForCausalLM, AutoTokenizer,
    TrainingArguments, Trainer
)
from datasets import Dataset

model_name = "meta-llama/Llama-3.1-8B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

def progressive_finetune(
    model,
    stages: list[list[dict]],
    epochs_per_stage: int = 3
):
    """
    Поэтапное обучение с постепенным удалением CoT.
    Каждый этап начинается с чекпоинта предыдущего.
    """
    for i, stage_data in enumerate(stages):
        print(f"=== Stage {i+1}/{len(stages)} ===")
        print(f"  Samples: {len(stage_data)}")
        print(f"  Avg output tokens: {avg_tokens(stage_data)}")

        dataset = Dataset.from_list(stage_data)
        dataset = dataset.map(
            lambda x: tokenize(x, tokenizer),
            batched=True
        )

        args = TrainingArguments(
            output_dir=f"./implicit-cot-stage-{i+1}",
            num_train_epochs=epochs_per_stage,
            per_device_train_batch_size=4,
            learning_rate=2e-5 * (0.5 ** i),  # снижаем LR
            warmup_ratio=0.1,
            save_strategy="epoch",
            logging_steps=50,
            bf16=True,
        )

        trainer = Trainer(
            model=model,
            args=args,
            train_dataset=dataset,
        )
        trainer.train()

        print(f"  Stage {i+1} complete. Evaluating...")
        evaluate(model, tokenizer, stage=i+1)

    return model


# Запуск
stages = [stage_1_data, stage_2_data, stage_3_data]
model = progressive_finetune(model, stages, epochs_per_stage=3)

Distillation: обучение на выходах большой модели

from openai import OpenAI

client = OpenAI()

def generate_cot_dataset(
    tasks: list[str],
    teacher_model: str = "gpt-4o"
) -> list[dict]:
    """
    Генерация CoT-рассуждений от модели-учителя
    для последующей дистилляции.
    """
    dataset = []

    for task in tasks:
        # Шаг 1: получить полное CoT от учителя
        cot_response = client.chat.completions.create(
            model=teacher_model,
            messages=[{
                "role": "user",
                "content": f"Реши задачу пошагово:\n{task}"
            }],
            temperature=0
        )
        cot_text = cot_response.choices[0].message.content

        # Шаг 2: извлечь только ответ
        answer_response = client.chat.completions.create(
            model=teacher_model,
            messages=[{
                "role": "user",
                "content": (
                    f"Вот решение задачи:\n{cot_text}\n\n"
                    "Извлеки только финальный ответ, "
                    "одно число или одно предложение."
                )
            }],
            temperature=0
        )
        answer = answer_response.choices[0].message.content

        dataset.append({
            "input": task,
            "cot": cot_text,       # для stage 1
            "answer": answer,       # для stage 3
        })

    return dataset

Оценка: действительно ли модель рассуждает внутренне?

Как понять, что модель не просто угадывает, а действительно «думает» внутри?

import torch
import numpy as np

def probe_hidden_reasoning(
    model,
    tokenizer,
    task: str,
    layer_idx: int = -1
) -> dict:
    """
    Анализ скрытых представлений: ищем следы
    рассуждений в hidden states модели.
    """
    inputs = tokenizer(task, return_tensors="pt")

    with torch.no_grad():
        outputs = model(
            **inputs,
            output_hidden_states=True
        )

    hidden = outputs.hidden_states[layer_idx][0]

    # Метрика 1: активация скрытых слоёв
    # У модели с Implicit CoT активация выше,
    # чем у модели без обучения на CoT
    activation_norm = torch.norm(hidden, dim=-1).mean().item()

    # Метрика 2: энтропия предсказаний
    # Низкая энтропия = модель уверена в ответе
    logits = outputs.logits[0, -1, :]
    probs = torch.softmax(logits, dim=-1)
    entropy = -(probs * torch.log(probs + 1e-10)).sum().item()

    return {
        "activation_norm": activation_norm,
        "entropy": entropy,
        "confident": entropy < 2.0,
    }


# Сравнение базовой модели и Implicit CoT
base_result = probe_hidden_reasoning(base_model, tokenizer, task)
icot_result = probe_hidden_reasoning(icot_model, tokenizer, task)

print(f"Base activation: {base_result['activation_norm']:.2f}")
print(f"ICoT activation: {icot_result['activation_norm']:.2f}")
# ICoT обычно показывает более высокую активацию —
# модель «работает» внутри, даже не генерируя токены

Альтернатива: Implicit CoT через промптинг

Если fine-tuning недоступен, можно частично имитировать Implicit CoT промптингом. Это не настоящая интернализация, но сокращает вывод:

ПромптClaude
Ты — эксперт, который отвечает сразу и точно, без промежуточных рассуждений.

Правила:
- Не показывай шаги решения
- Отвечай одним числом или одним предложением
- Подумай внутренне, но не записывай мысли

Задача: Поезд едет со скоростью 80 км/ч. Через 2.5 часа он сделал остановку на 30 минут, затем проехал ещё 1.5 часа. Какое общее расстояние он проехал?
Ответ модели

320 км

Промптинг «дай только ответ» — это не настоящий Implicit CoT. Модель может просто пропустить рассуждения и ошибиться. Настоящий Implicit CoT требует fine-tuning, где рассуждения интернализированы в веса модели. Промптинг работает как приближение только для простых задач.

Расчёт экономии

def calculate_savings(
    daily_requests: int = 100_000,
    avg_input_tokens: int = 50,
    explicit_cot_output: int = 90,
    implicit_cot_output: int = 8,
    input_price_per_m: float = 2.50,   # $/1M tokens
    output_price_per_m: float = 10.00,  # $/1M tokens
) -> dict:
    """Расчёт экономии при переходе на Implicit CoT."""

    def monthly_cost(output_tokens: int) -> float:
        input_cost = (
            daily_requests * avg_input_tokens / 1_000_000
            * input_price_per_m * 30
        )
        output_cost = (
            daily_requests * output_tokens / 1_000_000
            * output_price_per_m * 30
        )
        return input_cost + output_cost

    explicit = monthly_cost(explicit_cot_output)
    implicit = monthly_cost(implicit_cot_output)

    return {
        "explicit_cot_monthly": f"${explicit:,.0f}",
        "implicit_cot_monthly": f"${implicit:,.0f}",
        "savings_monthly": f"${explicit - implicit:,.0f}",
        "savings_percent": f"{(1 - implicit/explicit) * 100:.0f}%",
    }


print(calculate_savings())
# explicit_cot_monthly: $3,075
# implicit_cot_monthly: $615
# savings_monthly: $2,460
# savings_percent: 80%
Implicit CoT требует затрат на fine-tuning (GPU-часы, подготовка данных). Это окупается при:
  • 10K+ запросов в день — экономия превышает стоимость fine-tuning за 1-2 недели
  • Жёсткие требования к latency — real-time приложения, автодополнение
  • Задачи средней сложности — арифметика, классификация, простая логика

Проверьте себя

Проверьте себя

1. В чём главное отличие Implicit CoT от стандартного Chain of Thought?

2. Какой из подходов к Implicit CoT предполагает обучение компактной модели на выводах большой?

3. Когда Implicit CoT НЕ стоит использовать?