Описание Symphony
OpenAI выпустила Symphony, фреймворк с открытым исходным кодом, предназначенный для управления автономными агентами по написанию кода через структурированные «запуски реализации». Проект предоставляет систему для автоматизации задач разработки программного обеспечения, соединяя системы отслеживания проблем с агентами на основе LLM.
Архитектура системы
Symphony построена на Elixir и среде выполнения Erlang/BEAM. Выбор этого стека ориентирован на отказоустойчивость и параллелизм. Поскольку автономные агенты часто выполняют длительные задачи, которые могут завершиться сбоем или требовать повторных попыток, деревья супервизии BEAM позволяют Symphony управлять сотнями изолированных запусков одновременно.
Система использует PostgreSQL (через Ecto) для сохранения состояния и разработана для работы в качестве постоянного демона. Она работает, опрашивая систему отслеживания проблем (в настоящее время по умолчанию используется Linear), чтобы определить задачи, готовые к обработке агентом.
Жизненный цикл запуска реализации
Основной единицей работы в Symphony является запуск реализации. Жизненный цикл запуска следует определённой последовательности:
1. Опрос и запуск: Symphony отслеживает определённое состояние в системе отслеживания проблем (например, «Готово для агента»).
2. Изоляция песочницы: для каждой задачи фреймворк создаёт детерминированное рабочее пространство. Это гарантирует, что действия агента ограничены определённым каталогом и не влияют на другие параллельные запуски.
3. Выполнение агента: агент (обычно использующий модели OpenAI) инициализируется для выполнения задачи, описанной в задаче.
4. Подтверждение выполнения работы: прежде чем задача будет считаться завершённой, агент должен предоставить «подтверждение выполнения работы». Это включает в себя генерацию отчётов о состоянии CI, прохождение модульных тестов, предоставление отзывов о проверке PR и создание пошагового руководства по изменениям.
5. Завершение: если подтверждение выполнения работы проверено, агент «заканчивает» код, отправляя или объединяя запрос на извлечение (PR) в репозиторий.
Конфигурация через WORKFLOW.md
Symphony использует файл конфигурации в репозитории с именем WORKFLOW.md. Этот файл служит техническим контрактом между командой разработчиков и агентом. Он содержит:
* основные системные инструкции и подсказки агента;
* настройки среды выполнения;
* конкретные правила взаимодействия агента с кодовой базой.
Храня эти инструкции в репозитории, команды могут управлять версиями политик агентов вместе с исходным кодом, обеспечивая согласованность поведения агента с конкретной версией кодовой базы, которую он изменяет.
Требования к разработке harness
Документация указывает, что Symphony наиболее эффективна в средах, практикующих разработку harness engineering. Это относится к структуре репозитория, оптимизированной для взаимодействия с машинами. Ключевые требования включают:
* Герметичное тестирование: тесты, которые могут выполняться локально и надёжно без внешних зависимостей.
* Документация в машиночитаемом формате: документация и скрипты, позволяющие агенту самостоятельно обнаруживать, как создавать, тестировать и развёртывать проект.
* Модульная архитектура: кодовые базы, где побочные эффекты сведены к минимуму, что позволяет агентам вносить изменения с высокой степенью уверенности.
Ключевые выводы
* Отказоустойчивая оркестрация через Elixir: Symphony использует Elixir и среду выполнения Erlang/BEAM для управления жизненными циклами агентов. Этот архитектурный выбор обеспечивает высокий уровень параллелизма и отказоустойчивости, необходимый для управления долгосрочными, независимыми «запусками реализации» без сбоев в работе системы.
* Управление запусками реализации с отслеживанием состояния: фреймворк переводит кодирование ИИ из ручного создания запросов к автоматическому циклу: он опрашивает системы отслеживания проблем (например, Linear), создаёт изолированные рабочие пространства с песочницей, выполняет агента и требует «подтверждения выполнения работы» (прохождение CI и пошаговые руководства) перед слиянием кода.
* Версионированные контракты агентов: через спецификацию WORKFLOW.md подсказки агентов и конфигурации среды выполнения хранятся непосредственно в репозитории. Это позволяет рассматривать инструкции по работе ИИ как код, обеспечивая синхронизацию поведения агента с конкретной ветвью кодовой базы, которую он изменяет.
* Зависимость от harness engineering: для эффективной работы системы репозитории должны использовать harness engineering. Это включает в себя структурирование кодовых баз для машинной читаемости, включая герметичные (автономные) тестовые наборы и модульные архитектуры, которые позволяют агентам самостоятельно проверять свою работу.
Создание продвинутого агента для многоветвевого рассуждения с использованием Tree-of-Thoughts
В этом руководстве мы создаём продвинутого агента для многоветвевого рассуждения с использованием Tree-of-Thoughts (ToT) с нуля. Вместо того чтобы полагаться на линейное рассуждение по цепочке мыслей, мы разрабатываем систему, которая генерирует несколько ветвей рассуждений, оценивает каждую ветвь с помощью эвристической функции оценки, отсеивает слабые варианты и продолжает расширять только самые сильные пути.
Мы комбинируем модель трансформатора, настроенную для инструкций, с пользовательской структурой дерева и реализуем выбор в стиле beam-search с ограниченным поиском по глубине. Основывая систему на домене 24-игры, мы создаём чёткий, объективный эталон для рассуждений, где мы можем наблюдать расширение ветвей, обрезку, оценку и обнаружение целей в действии.
Установка необходимых библиотек и загрузка модели FLAN-T5
Мы устанавливаем необходимые библиотеки и загружаем модель FLAN-T5, используя правильную архитектуру Seq2Seq. Мы определяем нашу основную структуру данных Node, которая представляет каждое состояние рассуждения в поиске Tree-of-Thoughts. Мы также инициализируем конфигурацию устройства и вспомогательные утилиты, которые позволяют нам чётко печатать и проверять состояние рассуждения.
Математическая логика домена 24-игры
Мы реализуем математическую логику домена 24-игры. Мы определяем безопасное выполнение операторов, построение выражений, проверку целей и эвристическую функцию оценки, которая оценивает, насколько близко состояние к цели в 24. Мы разрабатываем эвристику, чтобы разумно направлять поиск, штрафуя более глубокие ветви.
Создание LLM-пропозитора
Мы создаём LLM-пропозитора, который генерирует несколько ветвей рассуждений. Мы тщательно форматируем подсказку, чтобы модель возвращала структурированные операции объединения, и анализируем эти выходные данные в исполняемые ходы. Мы также реализуем детерминированную стратегию отката, чтобы обеспечить надёжность поиска даже при зашумленном выводе модели.
Механизм расширения ветвей
Мы реализуем механизм расширения ветвей алгоритма Tree-of-Thoughts. Мы применяем предложенные ходы для создания новых дочерних узлов и вычисляем их эвристические оценки. Затем мы локально обрезаем более слабые ветви, сохраняя только самые сильные кандидаты для дальнейшего изучения.
Реконструкция решения
Мы реализуем механизм реконструкции решения. Мы отслеживаем путь от начального состояния до конечного решения, сохраняя все промежуточные шаги.
Полный поиск с использованием Tree-of-Thoughts
Мы реализуем полный поиск с использованием Tree-of-Thoughts с использованием beam search и ограничений по глубине. Мы расширяем, оцениваем, обрезаем и выбираем верхние ветви на каждой глубине, пока не достигнем решения или не исчерпаем бюджет поиска. Наконец, мы реконструируем путь рассуждений и демонстрируем, как агент решает несколько задач 24-игры шаг за шагом.
В заключение мы создали полноценного многоветвевого агента для рассуждений, который демонстрирует, как Tree-of-Thoughts преобразует рассуждения LLM из единого пути в структурированный процесс поиска. Мы реализовали генерацию ветвей, эвристическую оценку, обрезку, выбор луча и контроль глубины в модульной архитектуре, которую можно легко адаптировать к другим задачам рассуждения.
1. Какие основные компоненты включает в себя архитектура системы Symphony, и как они способствуют отказоустойчивости и параллелизму?
В архитектуре системы Symphony используется стек Elixir и среда выполнения Erlang/BEAM. Это обеспечивает отказоустойчивость и параллелизм. Деревья супервизии BEAM позволяют Symphony управлять сотнями изолированных запусков одновременно, что особенно важно для длительных задач, которые могут завершиться сбоем или требовать повторных попыток.
2. Какие ключевые требования предъявляются к разработке harness в контексте использования Symphony, и почему они важны для эффективной работы системы?
Ключевые требования к разработке harness включают герметичное тестирование, документацию в машиночитаемом формате и модульную архитектуру. Эти требования важны, поскольку они позволяют агентам взаимодействовать с кодовой базой, выполнять тестирование и развёртывание проектов автономно. Это обеспечивает согласованность поведения агента с конкретной версией кодовой базы, которую он изменяет.
3. Какие преимущества предоставляет использование фреймворка Symphony для управления автономными агентами по написанию кода?
Использование фреймворка Symphony предоставляет несколько преимуществ:
* Автоматизация задач разработки программного обеспечения: Symphony соединяет системы отслеживания проблем с агентами на основе LLM, что позволяет автоматизировать задачи разработки.
* Управление жизненным циклом запусков реализации: фреймворк переводит кодирование ИИ из ручного создания запросов к автоматическому циклу, что упрощает процесс разработки.
* Версионированные контракты агентов: через спецификацию WORKFLOW.md подсказки агентов и конфигурации среды выполнения хранятся непосредственно в репозитории. Это позволяет рассматривать инструкции по работе ИИ как код, обеспечивая синхронизацию поведения агента с конкретной ветвью кодовой базы, которую он изменяет.
4. Какие шаги включает в себя жизненный цикл запуска реализации в Symphony, и как они обеспечивают эффективное выполнение задач?
Жизненный цикл запуска реализации в Symphony включает следующие шаги:
1. Опрос и запуск: Symphony отслеживает определённое состояние в системе отслеживания проблем (например, «Готово для агента»).
2. Изоляция песочницы: для каждой задачи фреймворк создаёт детерминированное рабочее пространство. Это гарантирует, что действия агента ограничены определённым каталогом и не влияют на другие параллельные запуски.
3. Выполнение агента: агент (обычно использующий модели OpenAI) инициализируется для выполнения задачи, описанной в задаче.
4. Подтверждение выполнения работы: прежде чем задача будет считаться завершённой, агент должен предоставить «подтверждение выполнения работы». Это включает в себя генерацию отчётов о состоянии CI, прохождение модульных тестов, предоставление отзывов о проверке PR и создание пошагового руководства по изменениям.
5. Завершение: если подтверждение выполнения работы проверено, агент «заканчивает» код, отправляя или объединяя запрос на извлечение (PR) в репозиторий.
5. Какие основные компоненты и этапы включает в себя создание продвинутого агента для многоветвевого рассуждения с использованием Tree-of-Thoughts?
Создание продвинутого агента для многоветвевого рассуждения с использованием Tree-of-Thoughts включает в себя следующие основные компоненты и этапы:
* Установка необходимых библиотек и загрузка модели FLAN-T5: это обеспечивает основу для работы агента.
* Определение структуры данных Node: каждое состояние рассуждения в поиске Tree-of-Thoughts представляется через структуру данных Node.
* Реализация математической логики домена 24-игры: это включает определение безопасного выполнения операторов, построение выражений, проверку целей и эвристическую функцию оценки.
* Создание LLM-пропозитора: это генерирует несколько ветвей рассуждений.
* Механизм расширения ветвей: это включает применение предложенных ходов для создания новых дочерних узлов и вычисление их эвристических оценок.
* Реконструкция решения: это включает отслеживание пути от начального состояния до конечного решения, сохраняя все промежуточные шаги.
* Полный поиск с использованием Tree-of-Thoughts: это включает реализацию полного поиска с использованием Tree-of-Thoughts с использованием beam search и ограничений по глубине.