Algorithm of Thoughts (алгоритм мыслей) — техника, при которой модель имитирует алгоритмический обход пространства решений внутри одного ответа. В 2026 её полезнее понимать не как "замену Tree of Thoughts", а как prompt-level approximation to search: вы просите модель вести себя так, будто она делает DFS-подобный проход с возвратами, но без внешнего рантайма, который реально хранит дерево и управляет ветками.
Tree of Thoughts (ToT) мощная техника, но имеет практический недостаток — каждый шаг (генерация вариантов, их оценка) требует отдельного API-вызова. Для дерева глубиной 3 с ветвлением 3 это десятки вызовов, что дорого и медленно.
Algorithm of Thoughts решает эту проблему: модель выполняет весь алгоритмический поиск внутри одного промпта. Sel et al. (2023) показали, что LLM способны следовать алгоритмическим паттернам (DFS, BFS) если их правильно направить.
AoT сочетает лучшее от двух миров:
При этом AoT может быть даже эффективнее ToT, потому что:
AoT хорошо ложится в современную рамку так:
CoT — одна цепочка;ToT — внешний orchestration над несколькими ветками;AoT — попытка встроить search behavior внутрь одного промпта.Поэтому AoT особенно интересен не как "самая умная техника", а как компромисс между качеством поиска и ценой. Он полезен там, где хочется больше систематичности, чем даёт обычный CoT, но полноценный tree runtime для задачи уже слишком тяжёлый.
Задача: распредели 5 задач между 3 разработчиками так, чтобы максимальная нагрузка была минимальной. Задачи (часы): A=3, B=5, C=2, D=4, E=6 Разработчики: Dev1, Dev2, Dev3 Используй алгоритмический поиск: пробуй распределения, оценивай нагрузку, при неоптимальном результате — возвращайся и пробуй другое.
Поиск оптимального распределения:
Путь 1: Жадное распределение (от большей к меньшей) E(6)→Dev1, B(5)→Dev2, D(4)→Dev3, A(3)→Dev3, C(2)→Dev2 Нагрузка: Dev1=6, Dev2=7, Dev3=7. Макс=7. Запоминаю: текущий лучший = 7.
Путь 2: Попробую E(6)→Dev1, B(5)→Dev2, D(4)→Dev2, A(3)→Dev3, C(2)→Dev3 Нагрузка: Dev1=6, Dev2=9, Dev3=5. Макс=9. Хуже. Возврат.
Путь 3: E(6)→Dev1, B(5)→Dev3, D(4)→Dev2, A(3)→Dev2, C(2)→Dev3 Нагрузка: Dev1=6, Dev2=7, Dev3=7. Макс=7. Не лучше.
Путь 4: E(6)→Dev1, D(4)→Dev2, A(3)→Dev2, B(5)→Dev3, C(2)→Dev1 Нагрузка: Dev1=8, Dev2=7, Dev3=5. Макс=8. Хуже. Возврат.
Путь 5: E(6)→Dev1, D(4)→Dev2, B(5)→Dev3, A(3)→Dev2, C(2)→Dev1 Нагрузка: Dev1=8, Dev2=7, Dev3=5. Хуже.
Путь 6: A(3)+C(2)+E(6)→Dev1=11. Слишком много. Отсечение.
Путь 7: E(6)+C(2)→Dev1=8, B(5)+A(3)→Dev2=8, D(4)→Dev3=4. Макс=8. Хуже.
Анализ: Оптимум, видимо, = 7. Все варианты с макс < 7 дают нарушение (всего 20 часов, 3 разработчика, ceil(20/3) = 7).
Оптимальное распределение: Dev1: E(6) = 6 часов Dev2: B(5) + C(2) = 7 часов Dev3: D(4) + A(3) = 7 часов Максимальная нагрузка: 7 часов.
Задача: составь расписание для 4 курсов, имея 3 аудитории и 2 временных слота. Ограничение: курсы A и B ведёт один преподаватель, поэтому они не могут быть одновременно. Используй алгоритмический поиск с возвратом (backtracking).
Обозначения: Слот 1 (утро), Слот 2 (день). Аудитории: Р1, Р2, Р3.
Путь 1: Назначаю последовательно. A → Слот 1, Р1 B → Слот 1, Р2 ⚠ Конфликт! A и B в одном слоте — один преподаватель. Возврат.
Путь 2: A → Слот 1, Р1 B → Слот 2, Р1 (нет конфликта: разные слоты) C → Слот 1, Р2 (свободно) D → Слот 2, Р2 (свободно) Проверка: A(Сл1,Р1), B(Сл2,Р1), C(Сл1,Р2), D(Сл2,Р2)
Решение найдено:
| Аудитория 1 | Аудитория 2 | |
|---|---|---|
| Утро | Курс A | Курс C |
| День | Курс B | Курс D |
AoT уместен, если:
Но если задача требует:
то AoT быстро упирается в предел prompt-only подхода. Тогда лучше строить уже не "алгоритм в тексте", а внешний workflow.
1. Чем Algorithm of Thoughts отличается от Tree of Thoughts?
2. Какой алгоритм лежит в основе AoT?
3. Когда лучше использовать AoT вместо ToT?