# ГЛАВА 8. НЕСКОЛЬКО ГИПОТЕЗ ЛУЧШЕ ОДНОЙ Вы когда-нибудь писали текст, потом стирали и переписывали с нуля — и второй вариант оказывался лучше? Или начинали решать задачу одним способом, заходили в тупик, пробовали иначе — и находили элегантное решение? Именно поэтому многогипотезная генерация работает: вместо того чтобы ставить всё на одну лошадь, мы просим модель сгенерировать несколько вариантов и выбираем лучший. Это одна из самых мощных идей в современной инженерии промптов. --- ## 8.1. Суперпозиция внутри модели ### Скрытые состояния содержат множество вариантов Представьте струну гитары. Когда вы её дёргаете, она вибрирует не одной частотой — в ней одновременно звучат основной тон и множество обертонов. Все эти частоты **сосуществуют** в одной струне, пока вы не приложите фильтр и не выделите одну из них. То же самое происходит внутри языковой модели. До момента декодирования (выбора конкретного токена) скрытые состояния модели содержат **суперпозицию** нескольких возможных продолжений. Это не метафора — это математический факт. **Toy Models of Superposition** (Elhage et al., Anthropic, 2022) — фундаментальная работа, показывающая, что нейронные сети хранят больше «концептов», чем у них есть измерений. Иначе говоря, число различимых идей внутри скрытого пространства может быть больше, чем число самих нейронов. Это как хранить тысячу книг в комнате с сотней полок — просто кладёте несколько книг на каждую полку под разными углами. ### Как суперпозиция влияет на генерацию На последнем слое модель превращает скрытое состояние в список оценок для всего словаря — это и есть logits. Затем эти оценки проходят через температуру и softmax, превращаясь в распределение вероятностей по токенам. При генерации выбирается **один** токен из этого распределения. Все остальные варианты **схлопываются** — безвозвратно. ### Проблема жёсткого greedy decoding **Greedy decoding** (температура стремится к нулю): всегда выбирает токен с максимальным logit. Проблема: жадный выбор на каждом шаге не гарантирует глобально оптимальную последовательность. Пример: ``` Шаг 1: "Оптимальная структура для этой задачи — " Вариант A: "класс" (logit: 8.2) → ведёт к OOP-решению Вариант B: "функция" (logit: 7.9) → ведёт к функциональному решению Greedy выбирает "класс" Шаг 2-100: модель генерирует OOP-решение ``` Если функциональный подход был бы лучше для данной задачи, greedy decoding навсегда заблокировал этот путь на шаге 1. --- ## 8.2. Принцип «Superposition and Collapse»: не схлопывай рано ### Аналогия с квантовой механикой До измерения (декодирования) — суперпозиция вариантов. После — один конкретный результат. Измерить нельзя откатить. ### Практический принцип **Генерируйте несколько вариантов, затем выбирайте.** Это превращает декодирование из «одного броска кости» в «серию бросков с выбором лучшего результата». ``` [Промпт] → Генерация N вариантов → Оценка (человек / модель / метрика) → Финальный выбор ``` ### Когда это оправдано | Цена ошибки | Сложность задачи | N вариантов | Почему | |-------------|------------------|-------------|--------| | Низкая | Низкая | 1 | Один проход достаточен | | Низкая | Высокая | 3–5 | Исследование пространства | | Высокая | Низкая | 1–2 | Верификация > множество вариантов | | Высокая | Высокая | 5–10 | Максимальное покрытие + выбор | --- ## 8.3. Self-Consistency: варианты → выбор согласованного ### Метод Self-Consistency (Wang et al., ICLR 2023) — одна из самых эффективных и простых техник улучшения качества. Аналогия: вы заболели и идёте к **десяти разным врачам**. Каждый обследует вас независимо, каждый рассуждает по-своему — но семь из десяти ставят один и тот же диагноз. Вы доверяете мнению большинства. Это и есть Self-Consistency. Алгоритм: 1. **Сгенерировать** $n$ независимых CoT-цепочек (с температурой $T > 0$). 2. **Извлечь** финальный ответ из каждой цепочки. 3. **Голосовать**: выбрать ответ, который появился чаще всего (majority voting). ``` Промпт → [CoT₁ → Ответ: 42] → [CoT₂ → Ответ: 42] → [CoT₃ → Ответ: 37] → [CoT₄ → Ответ: 42] → [CoT₅ → Ответ: 42] Majority vote → 42 (4 из 5) ``` ### Результаты Self-Consistency vs стандартный CoT (одна цепочка): | Бенчмарк | CoT (1 цепочка) | Self-Consistency (40 цепочек) | Улучшение | |----------|------------------|-------------------------------|-----------| | GSM8K | 56.5% | 74.4% | **+17.9 п.п.** | | SVAMP | 79.0% | 90.0% | **+11.0 п.п.** | | AQuA | 35.8% | 48.0% | **+12.2 п.п.** | | StrategyQA | 73.4% | 79.8% | **+6.4 п.п.** | | ARC-challenge | 85.2% | 89.1% | **+3.9 п.п.** | **Модели**: PaLM 540B, Codex, UL2 — все показывают стабильное улучшение. *Лучшие результаты из Wang et al. (2023); строки могут соответствовать разным моделям (PaLM 540B, Codex, UL2). Конкретная модель для каждого бенчмарка — в таблице 1 оригинальной статьи.* ### Почему это работает 1. **Разные цепочки исследуют разные пути**: температура $>0$ обеспечивает разнообразие промежуточных шагов. 2. **Правильный ответ робастнее**: к верному ответу ведёт больше рассуждений, чем к неверному. Множество разных путей сходятся к одной точке. 3. **Ошибки случайны, правильность системна**: каждая отдельная ошибка — случайное отклонение, а правильный ответ — аттрактор. ### Оптимальное N - $n = 5$: уже значительное улучшение, хороший компромисс стоимость/качество. - $n = 10–20$: оптимум для большинства задач. - $n = 40+$: diminishing returns, оправдано только для критических задач. > **Промпт для ИИ:** «Напиши Python-скрипт для реализации Self-Consistency с majority vote. Скрипт: принимает промпт и число сэмплов N (по умолчанию 5), делает N параллельных вызовов LLM (temp=0.7), извлекает финальный ответ из каждого сэмпла, применяет majority voting для выбора консенсусного ответа. Для числовых ответов — голосование по точному совпадению. Для текстовых — семантическая кластеризация (cosine similarity эмбеддингов, порог 0.85). Возвращает: консенсусный ответ, confidence score (доля согласных), список всех сэмплов. Используй OpenAI API или Anthropic API с asyncio для параллельных вызовов. Покажи пример на задаче с математическим рассуждением.» ### Анализ стоимости: сколько реально стоит Self-Consistency Посчитаем на конкретном примере. Задача: математическая проблема, промпт ~500 токенов, ответ ~300 токенов. Цены на апрель 2026: | Стратегия | Модель | N | Стоимость за запрос | |-----------|--------|---|---------------------| | Один вызов | Claude Opus 4.6 | 1 | ~$0.010 | | Self-Consistency | Claude Opus 4.6 | 10 | ~$0.10 | | Self-Consistency | Claude Haiku 4.5 | 5 | ~$0.010 | | Self-Consistency | Claude Haiku 4.5 | 40 | ~$0.080 | | Один вызов | GPT-5.4 | 1 | ~$0.006 | | Self-Consistency | GPT-5.4-nano | 8 | ~$0.004 | > *Цены рассчитаны для задачи ~500 входных + ~300 выходных токенов по тарифам апреля 2026: Opus 4.6 — $5/$25, Haiku 4.5 — $1/$5, GPT-5.4 — $2.50/$15, GPT-5.4-nano — $0.20/$1.25 за MTok (input/output). Проверяйте актуальные тарифы: anthropic.com/pricing, platform.openai.com/docs/pricing. Опубликованных бенчмарков Self-Consistency для этих конкретных моделей нет — качество зависит от задачи, числа цепочек и температуры.* Обратите внимание: **5 вызовов Haiku стоят столько же, сколько один вызов Opus** (~$0.010), а Self-Consistency из 5 цепочек уже даёт существенный рост качества. Аналогично, ~8 вызовов GPT-5.4-nano обходятся дешевле одного вызова GPT-5.4. Это ключевая интуиция: можно обменять размер модели на количество попыток — об этом подробнее в разделе 8.8. --- ## 8.4. Best-of-N: генерация + оценка ### Развитие идеи Self-Consistency работает через голосование по финальному ответу. **Best-of-N** идёт дальше — использует внешнюю функцию оценки. Аналогия: вы пишете **пять черновиков** письма клиенту, потом даёте их коллеге и говорите: «Выбери лучший». Коллега (функция оценки) может быть кем угодно: другой моделью, набором тестов или обученной моделью предпочтений (reward model). Алгоритм: 1. Сгенерировать $n$ вариантов. 2. Оценить каждый вариант функцией `score(output) → float`. 3. Выбрать вариант с максимальным score. > **Промпт для генерации кода:** «Напиши функцию `best_of_n(prompt, n, scorer)` на Python. Функция должна: (1) сгенерировать n вариантов ответа через API модели с temperature=0.7, (2) оценить каждый вариант функцией scorer, (3) вернуть вариант с максимальным score. Используй OpenAI API или Anthropic SDK. Добавь параллельный запуск через asyncio для снижения latency.» ### Функции оценки | Тип | Пример | Применение | |-----|--------|------------| | **Reward model** | Обученная модель предпочтений | Общее качество ответа | | **Code execution** | `pytest` на сгенерированном коде | Кодогенерация | | **Schema validation** | JSON Schema / Pydantic | Structured outputs | | **Factual check** | RAG + сравнение с источником | Фактуальные задачи | | **Self-evaluation** | LLM-as-Judge (вторая модель) | Универсально | | **Heuristic** | Длина, наличие ключевых слов | Быстрая фильтрация | ### Best-of-N в продакшене (2025–2026) Best-of-N с reward model scoring перешёл из исследований в промышленную практику. Вот где это стандарт сегодня: - **Кодогенерация**: сгенерировать N вариантов кода → прогнать тесты → взять тот, который прошёл все тесты (sample-then-verify). Именно так работают AlphaCode 2, Cursor и другие продакшен-системы. - **Математика**: сгенерировать N доказательств → проверить формальным верификатором (Lean, Isabelle). Используется в AlphaProof и аналогичных системах. - **Общий паттерн sample-then-verify**: сгенерировать много, верифицировать каждый вариант, взять лучший. Работает всюду, где есть автоматический верификатор (тесты, схемы, формальные проверки). Новый практический вывод 2025 года: масштабировать число попыток имеет смысл только вместе с хорошим верификатором. Для кодовых задач это означает простое правило: не просите модель «подумать ещё» бесконечно; лучше сгенерируйте 3–5 патчей, прогоните `pytest`, `mypy`/`pyright`, `ruff` и проверку схемы, а затем возьмите минимальный дифф, который действительно прошёл проверки. Если внешнего верификатора нет, рост `N` быстро превращается в дорогой перебор с нестабильной отдачей. ### LLM-as-Judge Используйте вторую модель (или тот же модель с другим промптом) для оценки: ```xml Expert evaluator Rate the following code response on a scale 1-10. Criteria: correctness, efficiency, readability, error handling. {candidate} {"score": N, "reasoning": "...", "issues": [...]} ``` --- ## 8.5. Брейншторм vs одношаговая генерация ### Два режима, два набора параметров | Параметр | Режим «Брейншторм» | Режим «Исполнение» | |----------|--------------------|--------------------| | **Цель** | Покрытие пространства решений | Стабильность и точность | | **Temperature** | 0.7–0.9 | 0.0–0.3 | | **Top-p** | 0.95 | 0.9 | | **N вариантов** | 3–10 | 1 | | **Формат** | Свободный | Строгий (JSON Schema) | | **Верификация** | Не нужна на этом этапе | Обязательна | | **Промпт** | «Предложи 5 разных подходов...» | «Реализуй вариант B...» | ### Трёхфазный workflow ``` Фаза 1: ИССЛЕДОВАНИЕ (Брейншторм) ├── temp=0.8, n=5 ├── "Предложи 5 разных архитектурных подходов для..." ├── Результат: 5 вариантов с плюсами/минусами │ Фаза 2: ВЫБОР (Критический анализ) ├── temp=0.2, n=1 ├── "Из этих 5 вариантов выбери оптимальный по критериям: │ производительность, поддерживаемость, стоимость." ├── Результат: обоснованный выбор │ Фаза 3: РЕАЛИЗАЦИЯ (Исполнение) ├── temp=0.1, n=1 ├── "Реализуй вариант B: [детальная спецификация]" ├── Результат: код / документ / конфигурация ``` ### Почему не объединять фазы Объединение режимов в одном промпте создаёт conflict: - Высокая температура для исследования → нестабильность реализации. - Низкая температура для исполнения → узость исследования. - Длинный контекст (все варианты + выбор + реализация) → Lost in the Middle. **Изолируйте фазы**: отдельные вызовы, отдельные промпты, отдельные контексты. --- ## 8.6. Advanced: Tree of Thoughts и Graph of Thoughts ### Tree of Thoughts (Yao et al., NeurIPS 2023) Представьте шахматиста, который думает на несколько ходов вперёд. Он не делает первый попавшийся ход — он мысленно проигрывает несколько вариантов, отсекает плохие ветки («тут я теряю ладью»), углубляется в перспективные — и только потом двигает фигуру. Tree of Thoughts работает точно так же. Развитие CoT: вместо одной цепочки строится **дерево** рассуждений с возможностью backtracking: ``` Задача: "Game of 24: используя числа [1, 2, 3, 4] и операции +−×÷ получи 24" [1, 2, 3, 4] / | \ 1+2=3 1×2=2 1+3=4 [3,3,4] [2,3,4] [4,2,4] / \ | \ 3+3=6 ... 2+3=5 4×4=16 [6,4] [5,4] [16,2] | | \ 6×4=24 ✓ 5×4=20 ... ``` **Результаты**: на Game of 24 CoT решает **4%** задач, Tree of Thoughts — **74%** (GPT-4). Модель самостоятельно оценивает промежуточные состояния (self-evaluation) и выбирает, какие ветки исследовать (BFS/DFS). ### Graph of Thoughts (Besta et al., AAAI 2024) Расширение ToT: рассуждения модели формируют **граф** с произвольными связями: - Ветвление: одна мысль → несколько продолжений - Объединение: несколько мыслей → одна агрегация - Рефинирование: итеративное улучшение одной мысли **Результаты**: ~62% улучшение качества по сравнению с ToT на задачах сортировки, >31% снижение стоимости. ### LATS (Language Agent Tree Search, Zhou et al., 2024) Объединяет Tree of Thoughts с Monte Carlo Tree Search (MCTS) — тем самым алгоритмом, который стоит за AlphaGo. Если ToT — это шахматист-любитель, то LATS — шахматный движок, который систематически исследует дерево игры. **Четыре фазы MCTS в LATS:** 1. **Selection (выбор)**: используя UCT-score (Upper Confidence Bound for Trees), алгоритм выбирает, какую ветку исследовать дальше. На практике этот score складывает две вещи: среднюю оценку ветки и бонус за малоисследованные узлы. Поэтому поиск не залипает только в уже успешных направлениях и периодически проверяет новые. 2. **Expansion (расширение)**: LLM генерирует несколько продолжений выбранного узла — это как рассмотреть возможные ходы из текущей позиции. 3. **Simulation (моделирование)**: оценка каждого продолжения через LLM-self-evaluation или внешние инструменты (rollout). Например, для кода — запустить тесты; для веб-навигации — выполнить действие и посмотреть результат. 4. **Backpropagation (обратное распространение)**: оценка распространяется назад по дереву. Если rollout показал, что ветка успешна, все её родители получают повышенную оценку. ``` LATS на примере кодогенерации: Итерация 1: Select: корень Expand: LLM генерирует 3 подхода (A, B, C) Simulate: запуск тестов → A: 2/5, B: 4/5, C: 1/5 Backprop: обновить оценки Итерация 2: Select: ветка B (лучший UCT) Expand: LLM дорабатывает B с учётом ошибки в тесте 5 → B1, B2 Simulate: B1: 5/5 ✓, B2: 3/5 Backprop: B1 — решение найдено! ``` Ключевое отличие от простого ToT: LATS **учится на ошибках в процессе поиска**. Обратная связь от симуляций направляет поиск в перспективные области. Это не просто «попробовать много вариантов» — это **направленный поиск** с накоплением знаний. **Результаты**: HumanEval **92.7%** pass@1 (GPT-4), WebShop **75.9** average score (GPT-3.5). --- ## 8.7. Reasoning-модели и встроенное мышление (2025–2026) ### Встроенное мышление меняет правила игры В 2025–2026 годах появился новый класс моделей: **reasoning models** (o3, Claude Opus 4.6 с adaptive thinking, Gemini reasoning-режимы, Qwen3 thinking mode). Эти модели имеют встроенное расширенное мышление — они тратят больше inference compute на сложные задачи, прежде чем выдать ответ. Claude 4.6 поддерживает два режима: adaptive thinking (`thinking: {type: "adaptive"}`), где модель сама определяет объём рассуждений, и extended thinking (`thinking: {type: "enabled", budget_tokens: N}`), где бюджет задаётся явно. Параметр `effort` (low/medium/high) передаётся в `output_config` и управляет адаптивным режимом. Важно: внешне это **похоже** на Tree of Thoughts, но внутренний механизм у закрытых моделей раскрыт лишь частично. Что это меняет для нас? **Явный ToT нужен реже.** Если вы используете o3 или Claude с adaptive thinking, модель уже делает часть работы по внутреннему поиску. Строить внешний ToT-оркестратор поверх такой модели стоит только там, где вам нужны явные ветки, тесты, инструменты или audit trail. **Но Self-Consistency и Best-of-N по-прежнему актуальны.** Даже reasoning-модель может выдать разные ответы при разных запусках. Множественная генерация + голосование / оценка продолжает улучшать результат, потому что каждая «мысль» модели начинается с другого случайного seed. ### Когда что использовать с reasoning-моделями | Ситуация | Подход | |----------|--------| | Reasoning-модель + простая задача | Один вызов, temp=0 (достаточно) | | Reasoning-модель + сложная задача | Self-Consistency (n=3–5), модель «думает» при каждой попытке | | Reasoning-модель + код | Best-of-N + тесты (sample-then-verify) | | Обычная модель + сложная задача | Явный ToT или Self-Consistency (n=10+) | | Обычная модель + комбинаторная задача | LATS с инструментами | --- ## 8.8. Test-Time Compute Scaling (T² scaling) ### Ключевая идея 2026 года Классический подход к улучшению LLM: увеличить модель (больше параметров, больше данных). Это **train-time scaling** — масштабирование на этапе обучения. **T² scaling** (test-time compute scaling) — другой подход: **увеличить количество вычислений на этапе инференса**. Вместо того чтобы тренировать бо́льшую модель, мы даём меньшей модели больше «времени на раздумье». Аналогия: представьте двух студентов на экзамене. Один гениальный, но ему дали 5 минут. Другой хороший, но ему дали 2 часа. Кто сдаст лучше? Часто — второй. ### Формы T² scaling Все техники этой главы — это формы test-time compute scaling: | Техника | Как масштабирует compute | |---------|------------------------| | **Self-Consistency (n=10)** | 10× compute → majority vote | | **Best-of-N + verifier** | N× generate + verify each | | **Tree of Thoughts** | Exponential branching, но с pruning | | **Adaptive / extended thinking** (o3, Claude, Gemini) | Модель сама решает, сколько «думать» | | **LATS** | Итеративный поиск с rollouts | ### Почему это переворачивает экономику Ключевое открытие: **маленькая модель + больше compute на инференсе может превзойти большую модель с меньшим compute**. Конкретный пример (те же ~500 входных + ~300 выходных токенов): ``` Haiku 4.5 × Self-Consistency(n=5) ≈ $0.010 за задачу Claude Opus 4.6 × один вызов ≈ $0.010 за задачу GPT-5.4-nano × Self-Consistency(n=8) ≈ $0.004 за задачу GPT-5.4 × один вызов ≈ $0.006 за задачу ``` При одинаковом бюджете маленькая модель с Self-Consistency получает несколько независимых попыток; исследования (Snell et al., 2024; Brown et al., 2024) показывают, что это может давать качество, сопоставимое с более крупной моделью за один вызов. А параллельный запуск всех цепочек сохраняет latency на уровне одного вызова. ### Практические следствия 1. **Не переплачивайте за большую модель по умолчанию.** Сначала попробуйте дешёвую модель + Self-Consistency. 2. **Compute — это новый dial для настройки качества.** Не хватает качества? Увеличьте N, добавьте верификатор, дайте модели больше thinking budget. 3. **Latency vs quality trade-off.** Параллельные запуски не увеличивают latency, но увеличивают throughput cost. Последовательные (LATS, ToT) увеличивают latency, но дают более направленный поиск. --- ## Практический вывод ### Чек-лист многогипотезной генерации | # | Правило | Когда применять | |---|---------|-----------------| | 1 | **Не генерируйте один ответ для сложных задач** | Задачи с >3 шагами, высокой ценой ошибки | | 2 | **Self-Consistency (n=5–10)** | Математика, логика, планирование | | 3 | **Best-of-N + scorer** | Кодогенерация (scorer = test execution) | | 4 | **Трёхфазный workflow** | Архитектурные решения, дизайн систем | | 5 | **Tree/Graph of Thoughts** | Сложные задачи с комбинаторным пространством | | 6 | **Логируйте все ветки** | Для отладки и post-mortem анализа | | 7 | **Используйте дешёвые модели + n** | n×cheap может быть лучше 1×expensive | | 8 | **Учитывайте встроенное мышление** | Reasoning-модели уже тратят часть compute на внутреннюю декомпозицию | ### Дерево решений: какую технику выбрать ``` Задача имеет один правильный ответ? (математика, логика, факты) │ ├─ ДА → Есть автоматический верификатор? (тесты, схема, формальный чекер) │ ├─ ДА → Best-of-N + верификатор (sample-then-verify) │ └─ НЕТ → Self-Consistency (n=5–10) │ └─ НЕТ (открытые задачи: текст, дизайн, архитектура) ├─ Нужно исследовать пространство? → Трёхфазный workflow (брейншторм → выбор → реализация) └─ Комбинаторная задача с обратной связью? → LATS Используете reasoning-модель (o3, Claude Opus 4.6, Gemini reasoning-режимы, Qwen3 thinking mode)? ├─ ДА → Снизьте N вдвое, не стройте внешний ToT └─ НЕТ → Используйте полные N и явные техники из этой главы Бюджет ограничен? ├─ ДА → Дешёвая модель + большое N (T² scaling) └─ НЕТ → Сильная модель + умеренное N ``` ### Формула выбора стратегии ``` Если задача_простая AND цена_ошибки_низкая: → 1 вариант, temp=0.1 Если задача_сложная AND цена_ошибки_низкая: → 3–5 вариантов, temp=0.7, majority vote Если задача_простая AND цена_ошибки_высокая: → 1 вариант, temp=0, + верификация Если задача_сложная AND цена_ошибки_высокая: → 5–10 вариантов, temp=0.5, Best-of-N + верификация каждого Если используете reasoning-модель: → Уменьшите N вдвое, увеличьте thinking budget → Не стройте внешний ToT — модель делает это внутри ``` ### Задания 1. **Сравнение Self-Consistency vs одиночного вызова.** Возьмите набор из 20 задач (математика, логика или классификация), релевантных для вашего проекта. Сгенерируйте ответы двумя способами: (a) один вызов сильной модели с temp=0, (b) 5 вызовов дешёвой модели с temp=0.7 + majority vote. Сравните accuracy и суммарную стоимость. **Ожидаемый результат:** таблица с метриками качества и стоимости для каждой стратегии; решение, какой подход оптимален для вашей задачи. 2. **Best-of-N с автоматическим верификатором.** Выберите задачу кодогенерации из вашей практики. Настройте пайплайн: генерация N=5 вариантов кода → запуск тестов на каждом → выбор варианта, прошедшего все тесты. Используйте AI-промпт из §8.4 как отправную точку. **Ожидаемый результат:** работающий sample-then-verify пайплайн; оценка, при каком N достигается стабильный pass rate. 3. **Трёхфазный workflow на реальной задаче.** Примените трёхфазный подход (брейншторм → выбор → реализация) к архитектурному решению в вашем проекте. Зафиксируйте промпты для каждой фазы, параметры temperature и количество вариантов. **Ожидаемый результат:** документированный процесс с артефактами каждой фазы; сравнение с тем, что вы получили бы за один вызов. Методы этой главы — горизонтальное исследование пространства решений: мы генерируем много вариантов на одном уровне и выбираем лучший. В следующей главе мы перейдём к **вертикальной** декомпозиции: разрезанию сложной задачи на подзадачи с последовательным углублением. --- ## Источники - Elhage, N., et al. (2022). "Toy Models of Superposition." Anthropic. - Wang, X., et al. (2023). "Self-Consistency Improves Chain of Thought Reasoning in Language Models." ICLR. - Yao, S., et al. (2023). "Tree of Thoughts: Deliberate Problem Solving with Large Language Models." NeurIPS. - Besta, M., et al. (2024). "Graph of Thoughts: Solving Elaborate Problems with Large Language Models." AAAI. - Zhou, A., et al. (2024). "Language Agent Tree Search Unifies Reasoning, Acting and Planning in Language Models." arXiv:2310.04406. - Snell, C., et al. (2025). "Scaling LLM Test-Time Compute Optimally Can Be More Effective Than Scaling Model Parameters." arXiv:2408.03314. - Setlur, A., et al. (2025). "Scaling Test-Time Compute Without Verification or RL is Suboptimal." arXiv:2506.14495. - Swamy, G., et al. (2025). "All Roads Lead to Likelihood: The Value of Reinforcement Learning in Fine-Tuning." arXiv:2505.14864. - Brown, B., et al. (2024). “Large Language Monkeys: Scaling Inference Compute with Repeated Sampling.” - OpenAI (2025). “o3 System Card.” - Anthropic Docs (2026). *Claude models overview* and adaptive thinking documentation. https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking --- **Навигация:** - Назад: [Глава 7. Разметка, теги и архитектура сложного промпта](07_markup_tags_and_prompt_architecture.md) - Далее: [Глава 9. Многошаговое мышление и разрезание задач](09_multistep_reasoning.md)