Содержание
  1. Узлы, зависимости и Graph of Operations
  2. Объединение результатов и ветвление вариантов
  3. Генерация, оценка, отбор, объединение, доработка
  4. Полный ручной граф памятки «Маяк»
  5. Проверка конфликта и сохранение ограничений
  6. Граница ручного примера и исполнения библиотеки
  7. Когда граф избыточен и как ограничить размер
  8. Частые вопросы
Справочник

Graph of Thoughts: как объединять решения ИИ

7 ноября 2026 · 8 минут чтения

Graph of Thoughts: как объединять решения ИИ — это метод, где рассуждение модели описывают графом операций: узлы хранят мысли, рёбра задают зависимости, а отдельные результаты соединяют в один. Официальная реализация проекта на GitHub моделирует задачу как Graph of Operations, который исполняет большая языковая модель.

Узлы, зависимости и Graph of Operations

В документации проекта на GitHub Graph of Thoughts описан как способ решать сложные задачи через моделирование их в виде Graph of Operations (GoO), который автоматически исполняется большой языковой моделью. Граф операций задаёт структуру работы, а движок выполняет её шаг за шагом.

Узел — это отдельное состояние мысли: черновик ответа, фрагмент списка, промежуточная формулировка. Зависимость — ребро, которое говорит, из каких результатов собран следующий. На постере ETH Zurich в легенде к схеме перечислены состояния мысли, операции и оценки, а также блоки Generate, Aggregate, Sort, KeepBest. Эти имена показывают, что граф собирается из типовых действий.

Graph of Operations описывает не только GoT, но и прежние схемы: на постере ETH Zurich сказано, что GoO позволяет задавать CoT, CoT-SC и ToT. Это значит, что граф — общий язык описания рассуждения, а сам GoT — один из вариантов его заполнения.

Практический вывод: прежде чем писать промпт, нарисуйте узлы и стрелки. Если стрелка ведёт от двух узлов к одному, это объединение. Если от одного к нескольким — ветвление. Если стрелка возвращает результат назад на доработку, это цикл обратной связи.

Объединение результатов и ветвление вариантов

Ветвление создаёт несколько независимых продолжений из одной точки. Объединение берёт несколько готовых результатов и сводит их в один узел. На постере ETH Zurich ключевая новизна GoT относительно ToT описана как произвольные графовые преобразования мыслей; там же показаны агрегация мыслей и агрегация цепочек.

Разница видна на сортировке. В README проекта приведён пример: список из 32 чисел сортируют CoT-подобным способом, а затем более сложным GoT-подходом, и результаты сравнивают по числу ошибок в итоговом состоянии. Оба запуска дают выходной граф, который можно открыть и изучить.

Ветвление отвечает на вопрос «какой из вариантов лучше». Объединение отвечает на вопрос «как собрать один ответ из нескольких пригодных частей». Для длинного документа ветвление даст несколько черновиков, а объединение сведёт их в связный текст.

Приём Что делает Когда уместен
Ветвление Создаёт несколько продолжений из одного узла Нужен выбор лучшего варианта
Объединение Сводит несколько узлов в один Есть пригодные части от разных веток
Доработка Возвращает результат на повторный проход Нужно исправить найденный конфликт

Генерация, оценка, отбор, объединение, доработка

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

В README проекта показан код сортировки: создаётся GraphOfOperations, к нему добавляются операции Generate, Score и GroundTruth, затем настраивается языковая модель и контроллер, после чего запускается исполнение и сохраняется выходной граф. Оценка там задаётся функцией подсчёта ошибок, а финальное состояние несёт число этих ошибок.

На постере ETH Zurich у операции Generate указан параметр k, а у агрегации — k, означающий число попыток объединить две мысли. Это подсказывает порядок настройки: сначала задайте, сколько вариантов генерировать, затем как их оценивать, затем сколько лучших оставлять.

Промпт, чтобы получить план объединения результатов для вашей задачи:

КОД10 строк
Ты помогаешь собрать один итоговый документ из нескольких черновиков.
Тема: [ваша тема].
Ниже перечислены черновики с краткими пометками о качестве.

Шаг 1. Для каждого черновика назови одну сильную часть и одну слабую.
Шаг 2. Отметь, какие части противоречат друг другу.
Шаг 3. Собери один связный текст, взяв сильные части и убрав противоречия.
Шаг 4. Перечисли, что осталось неясным и требует уточнения у человека.

Формат ответа: сначала список сильных частей, затем итоговый текст, затем список неясностей.

Вариации той же задачи: объединить две версии инструкции в одну; свести три описания процесса в единую памятку; собрать один список требований из нескольких предложений; соединить два плана мероприятия в один; объединить черновики письма в финальную версию. В каждом случае меняйте [ваша тема] и число черновиков.

Полный ручной граф памятки «Маяк»

Возьмём учебное задание: составить план инструкции для волонтёров мероприятия «Маяк». Исходные условия: регистрация гостей ведётся офлайн на бумаге; у стойки дежурят координатор и волонтёр; собирать телефоны гостей запрещено организатором. Это условный учебный пример.

Узел A «Встреча»: приветствие, поиск фамилии в списке, отметка присутствия. Узел B «Сложные ситуации»: нет фамилии — направить к координатору; нет документа — уточнить порядок у координатора, не вводить новое требование. Узел C «Проверка ограничений» отклоняет предложение B добавить телефон в таблицу, потому что оно противоречит исходным условиям. Узел D «Объединение» принимает A и исправленный B: встреча → проверка фамилии → отметка или обращение к координатору.

Рёбра A→D и B→D показывают объединение результатов, C→B — необходимость доработки. Граф читается так: две рабочие ветки дают пригодные части, проверка отсекает нарушение, объединение собирает итог.

Узел Содержание Роль в графе
A Приветствие, поиск фамилии, отметка Источник результата
B Нет фамилии, нет документа Источник результата
C Отклонение сбора телефонов Проверка ограничений
D Встреча → проверка → отметка Объединение A и B

В финальную карточку входят исходные условия, содержание каждого узла, принятые и отклонённые элементы и итоговая памятка. Такой граф удобно рисовать на бумаге до обращения к модели: он показывает, где именно нужно объединение.

Проверка конфликта и сохранение ограничений

Проверка конфликта ищет утверждения, которые противоречат исходным условиям. В примере с «Маяком» узел C отклоняет добавление телефона в таблицу, потому что организатор запретил сбор телефонов. Это и есть конфликт между удобством учёта и заданным ограничением.

Порядок проверки: выпишите исходные условия отдельным списком; пройдите по каждому узлу и отметьте утверждения, которые их затрагивают; для спорного утверждения укажите, какое условие оно нарушает; верните узел на доработку с явной пометкой.

Качество проверяется сохранением запрета сбора телефонов и отсутствием выдуманных правил. Оценка «мне нравится» здесь не работает: она не показывает, уцелело ли ограничение. Критерий — воспроизводимость: другой человек по вашей карточке получит ту же памятку.

Промпт, чтобы проверить план на конфликт с ограничениями:

КОД7 строк
Ниже исходные условия и черновик инструкции.
Исходные условия: [ваши условия].
Черновик: [ваш текст].

Найди утверждения, которые противоречат исходным условиям.
Для каждого укажи: цитату из черновика, нарушенное условие, предлагаемую замену.
Если противоречий нет, перечисли условия, которые черновик сохраняет.

Граница ручного примера и исполнения библиотеки

Ручной граф и запуск библиотеки — разные вещи. В README проекта показано, как исполняется код: создаётся контроллер, ему передаются языковая модель, граф операций, промптер и парсер, затем вызывается запуск и сохранение выходного графа. Это программное исполнение с реальными вызовами модели.

Ручная карточка «Маяка» демонстрирует операции: узлы, зависимости, проверку и объединение. Текстовый запрос не равен запуску библиотеки GoT. Ручной пример показывает логику, а библиотека выполняет её на модели.

На постере ETH Zurich у контроллера указана цель — инициировать, координировать и продвигать исполнение GoT; у промптера — строить запрос к модели; у парсера — извлекать информацию из рассуждения. Эти роли полезно держать в голове: граф задаёт структуру, а контроллер ведёт её по шагам.

Практический вывод: ручной граф годится для проектирования и проверки ограничений. Для повторяемой обработки больших объёмов нужна библиотека с настроенной моделью и сохранением выходного графа.

Когда граф избыточен и как ограничить размер

Граф избыточен, когда задача решается одним проходом: короткий ответ, простая формулировка, одна ветка без объединения. Тогда узлы и рёбра добавляют работу без пользы.

Ограничители размера: число вариантов на генерации; число лучших результатов, которые остаются после отбора; число попыток объединения; глубина цепочки доработок. На постере ETH Zurich у агрегации указано k — число попыток объединить две мысли, а у KeepBest — сколько лучших оценённых мыслей сохранить.

Порядок действий для ограничения: начните с двух-трёх узлов; добавьте объединение только там, где есть пригодные части от разных веток; оставьте одну проверку ограничений; фиксируйте число вариантов заранее.

Признак Решение
Один проход даёт ответ Обойтись без графа
Несколько пригодных частей Добавить узел объединения
Есть жёсткое ограничение Добавить узел проверки
Много вариантов Ограничить число генераций и отбора

Частые вопросы

Что такое Graph of Thoughts простыми словами?
Это способ описать рассуждение модели графом: узлы хранят промежуточные мысли, рёбра показывают, из чего собрана следующая. Официальная реализация на GitHub моделирует задачу как Graph of Operations и исполняет её языковой моделью. Граф позволяет соединять несколько результатов в один.

Чем GoT отличается от Tree of Thoughts?
На постере ETH Zurich ключевая новизна GoT относительно ToT описана как произвольные графовые преобразования мыслей. Дерево даёт ветвление и выбор пути, а граф добавляет соединение нескольких узлов и циклы обратной связи. Поэтому объединение частей становится отдельной операцией.

Как объединять промежуточные результаты?
Соберите пригодные части от разных веток в один узел и проверьте, нет ли между ними противоречий. В примере с «Маяком» узел D принимает результаты A и B после исправления. Перед объединением убедитесь, что каждая часть прошла проверку ограничений.

Как проверить, что ограничения сохранились?
Выпишите исходные условия отдельно и пройдите по каждому узлу. Отметьте утверждения, которые затрагивают эти условия, и укажите нарушенное. В примере узел C отклоняет сбор телефонов, потому что это запрещено организатором.

Когда граф не нужен?
Когда задача решается одним проходом и не требует соединения нескольких результатов. Короткий ответ, простая формулировка и одна ветка обходятся без узлов и рёбер. Граф добавляют там, где есть пригодные части от разных веток или жёсткое ограничение.

Читайте также

3 материала