Проблема генерации кода через чат-интерфейсы
Традиционный подход к использованию больших языковых моделей (LLM) для написания кода часто сводится к диалогу в чате. Разработчик формулирует запрос, модель генерирует фрагмент кода, который затем копируется в проект. Этот метод, несмотря на кажущуюся простоту, обладает фундаментальными недостатками. Главный из них — непредсказуемость. Результат сильно зависит от точности формулировки промпта, а сгенерированный код может содержать логические ошибки, не соответствовать внутренним стандартам компании или быть неоптимальным. Кроме того, такой подход сложно масштабировать и интегрировать в автоматизированные пайплайны CI/CD. Расход ресурсов, в частности токенов API, также может быть неэффективным из-за многократных уточнений и перегенераций в ходе диалога.
Архитектура на основе спецификаций и гейтов
Компания «Диасофт» предложила альтернативную инженерную парадигму для своего продукта AI-driven Digital Q. Вместо неформализованного чата в основу конвейера легла строгая спецификация. Процесс генерации кода начинается не с запроса на естественном языке, а с формализованного описания задачи. Это может быть модель данных, контракт API (например, в формате OpenAPI), диаграмма состояний или набор бизнес-правил. Такой подход превращает генерацию из творческого акта в детерминированный процесс.
Ключевым элементом архитектуры стали «гейты» (gates) — программные фильтры, через которые проходит каждый артефакт, сгенерированный ИИ. Эти гейты выполняют роль автоматических валидаторов на разных этапах:
- Гейт синтаксической корректности. Проверяет, является ли сгенерированный код валидным для целевого языка программирования.
- Гейт соответствия стандартам. Использует линтеры и статические анализаторы (например, SonarQube) для проверки на соответствие правилам кодирования, принятым в компании.
- Гейт функциональной верификации. Запускает модульные и интеграционные тесты, чтобы убедиться, что код не просто синтаксически верен, но и выполняет заложенную в спецификацию функцию.
- Гейт безопасности. Анализирует код на предмет известных уязвимостей и небезопасных паттернов.
Если код не проходит через один из гейтов, он отбрасывается, а система может инициировать повторную генерацию с уточненными параметрами, основанными на отчете об ошибке от гейта. Это исключает попадание некачественного кода на следующий этап.
Независимое ревью и оптимизация ресурсов
После успешного прохождения всех автоматических гейтов артефакт поступает на независимое ревью. Важно, что ревьювер оценивает не только сам код, но и его соответствие исходной спецификации. Это смещает фокус с поиска тривиальных ошибок на проверку архитектурной корректности и бизнес-логики. Спецификация становится «единым источником правды», что значительно упрощает и ускоряет процесс проверки.
Такая строго формализованная и автоматизированная система конвейера привела к значительному повышению эффективности. За счет исключения итеративных диалогов и необходимости многократных уточнений в чате, расход токенов LLM удалось сократить до 70%. Каждый запрос к модели становится целенаправленным и максимально информативным, так как опирается на структурированные данные из спецификации, а не на расплывчатые описания. В результате компания получила предсказуемый, масштабируемый и экономически выгодный инструмент для автоматизации разработки, который производит код гарантированного качества, соответствующий всем корпоративным стандартам.