Должность: PhD: Мировые модели для синтеза архитектуры программного обеспечения (Constructor Fabric)
Компания: Constructor Labs
Местоположение: Constructor Labs / Бремен, Германия
Научный руководитель: Проф. д-р Александр Тормасов
О позиции
Constructor Knowledge Labs (CKL) совместно с Constructor Technology приглашают на должность PhD в области машинного обучения для разработки программного обеспечения и формальных методов в рамках проекта Constructor Fabric.
Constructor Fabric преобразует неформальные знания компании в производственное программное обеспечение посредством конвейера композитных функциональных блоков, называемых «шестернями»: требования → архитектура → соответствие продукту → фреймворк (G1) → приложение → среда выполнения. Мы создаем «мировую модель» этого конвейера — модель, которая не просто генерирует код, а предсказывает последствия архитектурного решения: общую стоимость владения, непреднамеренные побочные эффекты, задержки и поведение при сбоях, а также возможность допустимости предложенной композиции.
Центральным объектом является не цифровой двойник приложения, а его формальный архитектурный скелет: контракты шестерен (GearSpec), типизированный атрибутированный гиперграф приложения (AppGraph), алгебра композиции, определяющая допустимые сборки, и несколько семантических проекций (типы, протоколы, ресурсы, безопасность), по которым доказываются свойства, опровергаются контрпримерами или сообщаются как объяснимый пробел. Все это написано на предметно-ориентированном языке (DSL), синтаксические деревья и графы которого мы храним в проекционном редакторе (JetBrains MPS) — таким образом, DSL является не удобным слоем, а тем, что определяет пространство состояний модели и границы того, что модель может предложить.
Чем вы будете заниматься
В зависимости от вашего опыта, одно или два из следующего:
- Формальный скелет и композиция — GearSpec как контракт $(Requires, Provides, State, Effects, Assumptions, Guarantees, Parameters)$; AppGraph как типизированный атрибутированный гиперграф; алгебра сборки (последовательная, параллельная, обратная связь, уточнение); семантические проекции и инварианты на уровне системы для траекторий.
- Синтез архитектуры как обратная задача — по заданной спецификации, загрузке и ограничениям найти композицию шестерен, которая ее реализует. Решение ограничений и MCTS в качестве базового уровня; обученная модель переходов/значений для ранжирования и отсеивания; предложения LLM, рассматриваемые строго как гипотезы-кандидаты, которые парсер DSL, проверка типов и проверка свойств должны затем принять или отклонить.
- Проектирование DSL и инженерия языков — DSL шестерен и его связующий слой определяют, какие AppGraph вообще могут быть выражены, и, следовательно, где заканчивается пространство поиска. Эта нить охватывает абстрактный синтаксис и статические семантики этого DSL; требование, чтобы архитектурное решение было неизбежным по конструкции (нельзя обойти аутентификацию вокруг Auth Resolver); что происходит с языком, когда контракты шестерен меняются или добавляется 201-я шестерня; проекционное представление графов с циклами; и открытая гипотеза о том, что специализированный G1-DSL генерируется вместе с каждым G1.
- Локальные модели переходов и суррогаты конвейера — быстрые приближенные предсказатели для отдельных этапов конвейера (изменение спецификации → качество кода, архитектура → соответствие продукту, приложение → результат выполнения), с откалиброванной неопределенностью, проверенные по реальной телеметрии.
- Данные — реконструкция пар (спецификация → архитектура) из открытых репозиториев в масштабе, плюс генерация синтетических проектов из фиксированного набора шестерен и грамматики DSL для покрытия редких переходов, пробелов и контрпримеров.
Профиль
- Магистр (или эквивалент) в области компьютерных наук, математики или математических естественных наук.
- Курсы по компиляторам, теории языков программирования, дизайну языков или инженерии, управляемой моделями, являются сильным положительным сигналом, половина этого проекта заключается в определении того, что может сказать описание формальной архитектуры.
- Доказательства того, что вы доводите дела до конца: поддерживаемый репозиторий с открытым исходным кодом, рецензируемая публикация или сильный результат на конкурсе.
- Свободный технический английский язык.
- Самое главное: привычка явно формулировать предположение и разрабатывать эксперимент, который мог бы его опровергнуть.
Требуемый математический бэкграунд
Основные навыки
- Вероятность и статистика. Оценка, байесовский вывод, количественная оценка неопределенности и калибровка (правильные правила оценки, диаграммы надежности, ECE), планирование экспериментов и проверка значимости. Предсказание, которое мы не можем откалибровать, здесь неприменимо.
- Линейная алгебра и многомерный анализ на уровне, необходимом для вывода, а не только для вызова, целевой функции обучения: матричные исчисления, градиенты, стохастическая оптимизация, усложнение.
- Дискретная математика и теория графов. Типизированные и атрибутированные графы и гиперграфы, сопоставление подграфов и изоморфизм, переписывание графов, достижимость, основные классы сложности.
- Математическая логика и формальные методы. Логика первого порядка, системы типов, SAT/SMT, темпоральная логика (LTL/CTL) и проверка моделей, предусловия/постусловия, инварианты, уточнение.
- Последовательное принятие решений. MDP/POMDP, динамическое программирование, RL на основе моделей, модели скрытого пространства состояний (мировые), поиск по дереву Монте-Карло.
Уверенное владение хотя бы одним, рабочее знание второго
- Формальные языки, семантика и инженерия языков — грамматики (контекстно-свободные, атрибутные и грамматики графов), вывод и достижимость, разбор; абстрактный и конкретный синтаксис; операционная и денотационная семантика; метамоделирование, инженерия, управляемая моделями, преобразование моделей в модели и проекционное (структурное) редактирование в том виде, как это реализует JetBrains MPS. Мы требуем образования, а не инструмента: вы должны знать, зачем существует проекционный редактор, что дает метамодель по сравнению с текстовой грамматикой и как язык эволюционирует, не нарушая существующие модели. Практический опыт работы с MPS явно не требуется — мы научим.
- Теория категорий для композиционных систем — моноидальные и отслеживаемые моноидальные категории, функторы как семантические проекции, строковые диаграммы, операды. Это язык нашей алгебры сборки.
- Причинно-следственный вывод — структурные каузальные модели, do-calculus, контрфактические утверждения, идентифицируемость. Требуется для класса вопросов «что произойдет, если мы заменим эту технологию / перейдем на локальное развертывание», на которые простой поиск сходства не может дать ответа.
- Теория очередей и прикладные стохастические процессы — M/M/1 и сети очередей, тяжелые хвосты, повторные попытки, тайм-ауты, модели частичного отказа и надежности. Это проекция ресурсов и стохастики.
- Комбинаторная оптимизация, языки описания ограничений и теория синтеза программ — CEGIS, алгебры пространства версий, разбиение симметрии, эвристики поиска.
- Теория обучения представлений — VAE и латентная динамика, выразительность GNN (иерархия Вейсфейлера-Лемана), перестановочная эквивариантность, миграция эмбеддингов при изменяющемся словаре.
Требуемые практические навыки программирования
Это PhD с сильной инженерной составляющей. Мы ожидаем код, который другой человек может клонировать, запустить и воспроизвести — а не блокноты, которые сработали один раз.
Обязательно
- Python (профессиональный уровень). Подсказки типов, упаковка,
pytest, профилирование, asyncio, структуры данных с учетом памяти. По умолчанию вы пишете незабуферизованные, регистрируемые, перезапускаемые долгоживущие задания.
- Циклы обучения, написанные с нуля, пользовательские наборы данных и их сборка, смешанная точность, многопроцессорные GPU; отслеживание экспериментов (W&B или MLflow), управление конфигурацией (Hydra), строгая воспроизводимость по seed и артефактам.
- Графовое машинное обучение. PyTorch Geometric или DGL — передача сообщений, гетерогенные и типизированные графы, графовые трансформеры, работа с графами, чей словарь узлов изменяется между версиями.
- Решатели и инструменты верификации, управляемые из Python. Z3 или cvc5 на практике; продемонстрированный опыт работы хотя бы с одним модель-чекером (TLA+/TLC, SPIN, NuSMV, Alloy) или ассистентом доказательств (Lean, Coq, Isabelle).
- Код как данные. Манипуляции с AST,
tree-sitter, статический анализ, извлечение графов зависимостей и интерфейсов, майнинг репозиториев в большом масштабе.
- Параллельные конвейеры данных.
multiprocessing, Ray или Dask; контрольные точки, пульс, оценка затрат перед запуском задачи, затрагивающей миллионы файлов.
- Инженерия LLM. Оркестрация API, структурированное декодирование с ограничением грамматики, системы оценки, учет токенов/затрат — с дисциплиной рассматривать вывод модели как гипотезу, подлежащую формальным проверкам.
- Linux, git, ревью кода, shell.
Желательно
- Инструменты для языков, которыми вы действительно пользовались: ANTLR, Xtext, Lark или парсер, проверщик типов или интерпретатор, написанные вами самостоятельно. Наше внутреннее представление синтаксических деревьев и графов шестерен находится в JetBrains MPS — опять же, мы не просим опыта работы с MPS, только чтобы вы были готовы читать и расширять метамодель; знание Java/Kotlin поможет, когда вы дойдете до этого.
- JAX или внутренности компилятора / SAT-SMT.
- Знание инфраструктуры — Docker, Kubernetes, Terraform, OpenTelemetry/Prometheus — поскольку проекция ресурсов калибруется по реальной телеметрии развертывания.
- Один системный язык (Rust, Go или C++) для критически важных по производительности поисковых задач.
- Предварительный опыт работы с архитектурой производственного программного обеспечения или с существующей системой, которую вам пришлось изменять, не нарушая ее работу.
Финансирование
Эта должность предусматривает полное финансовое обеспечение через выделенную стипендию, включающую:
- Ежемесячная стипендия в размере 1650 евро
- Ежемесячное пособие на исследовательские расходы в размере 100 евро (Forschungskostenpauschale)
- Субсидия на медицинское страхование в размере 100 евро в месяц
Местоположение: Бремен, Германия
Продолжительность: 3 года, полный рабочий день
Дата начала: ноябрь 2026 г.
Пакет документов для подачи заявки должен включать
- Резюме, включая публикации, код или исследовательские проекты.
- Сопроводительное письмо (1–2 страницы) с объяснением вашей мотивации, исследовательских интересов и соответствия проекту.
- Ссылка на написанный вами код.
- Исследовательская декларация на одну страницу, выбирающая один открытый исследовательский вопрос проекта и описывающая, как вы бы его решали.
- Дипломы и транскрипты магистерской и бакалаврской степеней.
- Контактная информация для 2–3 академических референтов.
Заявки рассматриваются на основе постоянного потока. Отобранные кандидаты будут приглашены на собеседование.