Проектирование запросов (prompt engineering) являет собой важнейшую часть взаимодействия с большими языковыми моделями (LLM), играя ключевую роль в обеспечении точности и надежности автоматизированных систем. Один из ведущих примеров успешной реализации таких систем представлен компанией CloudCruise, которая специализируется на платформе для браузерных агентов — программ, предназначенных для автоматического выполнения действий в браузере. На протяжении 2025 года эта платформа пережила стремительный рост использования, увеличившись в тысячу раз и достигнув более 100 тысяч автоматизаций браузера в неделю. Однако быстрый рост привел не только к масштабированию возможностей, но и к новым проблемам, связанным с качеством и стабильностью работы агентов. Эта ситуация заставила команду переосмыслить подход к проектированию запросов и выявить ключевые уроки, которые могут быть полезны специалистам в области автоматизации и искусственного интеллекта.
Основной сложностью при масштабировании системы стало то, что агенты начали часто сталкиваться с неожиданными элементами на сайтах: всплывающими опросами, изменениями интерфейсов, а также случайными ошибками ввода. Ручное исправление каждой проблемы становилось невозможным, поэтому была поставлена задача создать «агента обслуживания» — автономного помощника, который самостоятельно выявляет и исправляет ошибки в рабочих процессах, привлекая человека только в критических случаях. Изначально планировавшийся двухнедельный проект превратился в месяцы непрерывных экспериментов, итераций над запросами и перестройки архитектуры системы. Одним из первых уроков стало понимание недостатка контекста в исходных запросах. Очень часто ошибки модели объяснялись не некомпетентностью LLM, а именно недостаточным или некорректным набором входных данных и инструкций.
Специалисты CloudCruise поставили себе вопрос: «Если бы человек получил такие же данные и инструкции, смог бы он решить задачу?» Ответ обычно был отрицательным, что указывало на необходимость улучшения качества входных параметров. Сложность усугублялась тем, что интернет-среда является крайне изменчивой, с множеством непредсказуемых событий и исключений. Поэтому ключевой задачей стало разработать стратегии по сбору более качественного и релевантного контекста, который удовлетворял бы требования агентов. Также стало очевидно, что одна сложная задача, объединенная в один запрос, приводит к снижению эффективности. Первоначальный подход требовал от агента проследить десятки или сотни шагов действий, проанализировать многочисленные данные — включая DOM-структуру, селекторы XPath, системные ошибки — а затем категоризировать и определить точку восстановления после сбоя.
Переутомление одного LLM подобным объемом задач негативно сказывалось на качестве результата. Решение пришло через концепцию разбиения сложных процессов на меньшие подзадачи, аналогично принципам модульного программирования. CloudCruise начали создавать отдельные запросы под каждый подэтап: анализ ошибки в начале, просмотр скриншотов, анализ видеоданных, корневой анализ причины, категоризация и определение точки восстановления. Такой подход позволил значительно повысить точность и стабильность работы модели, несмотря на рост задержки из-за многократных обращений к LLM. Пример подзадачи — определение корневой причины ошибки — выполнен с использованием специально оформленных инструкций и ролей.
Агенты получили четко определённый контекст, включая последовательное обход действий от самого раннего до последнего, анализ описаний действий и пользовательского интерфейса, а также использование логики, реализованной в XML-подобной форме, чтобы задавать условия и инструкции для модели. Эти техники сделали запросы структурированными, предсказуемыми и позволили добиться совершенствования анализа ошибок. Отказ от сложной логики в самих запросах и перенос части вычислений в традиционный программный код стал еще одним значительным шагом к оптимизации работы системы. Например, проверка корректности XPath-селекторов была перенесена с LLM на специализированные XPath-движки, что снизило стоимость и ускорило процесс. Аналогично, определение точки сбоя в цепочке действий вместо многократного вызова инструментов на базе LLM решалось с помощью эвристик, основанных на анализе времени и категорий действий.
В технологическом плане команда CloudCruise выбрала для работы Azure OpenAI, что обеспечило существенное снижение латентности и позволило использовать остаточные кредиты в облаке. Практические эксперименты с разными моделями, такими как Anthropic Claude, Google Gemini и OpenAI GPT-4.1 подтвердили важность выбора моделей под конкретные задачи, где одни лучше справляются с длинными контекстами, а другие — с управлением инструментами или узкоспециализированными запросами. Для контроля результатов и поддержки дальнейшей оптимизации был интегрирован инструментарий для наблюдения и оценки LLM. Вместо того чтобы смотреть только итоговый результат работы агента, CloudCruise разрабатывали промежуточные наборы данных оценки для каждого этапа работы агента — от истории действий браузера до категоризации ошибок.
Вся документация и версии запросов поддерживались с помощью платформы Langfuse, что позволило легко отслеживать и анализировать качество модели. Сегодня агент обслуживания активно работает в продакшене, исправляя сломанные XPath-селекторы, закрывая всплывающие окна и возвращая приложение к моменту сбоя для повторного запуска. Это позволяет существенно снизить необходимость вмешательства человека и повысить надежность сервисов. Опыт CloudCruise является отличным примером того, как системный подход к проектированию запросов, разделение задач и грамотное использование современных моделей ИИ способствуют созданию качественных и масштабируемых решений. Обобщая полученный опыт, можно выделить несколько ключевых рекомендаций для тех, кто работает с LLM и автоматизацией.
Во-первых, важна тщательная подготовка и очистка входных данных, а также задача донести ясные и точные инструкции. Во-вторых, сложные задачи стоит разбивать на небольшие подзадачи с четко ограниченными функциями. В-третьих, следует использовать возможности программного обеспечения и внешние инструменты для решения детерминированных проблем, не нагружая LLM лишними вычислительными задачами. В-четвертых, систематический мониторинг и оценка промежуточных результатов помогают быстрее выявлять узкие места и улучшать качество работы. Таким образом, проектирование запросов не сводится просто к написанию красивого текста, а представляет собой комплексный процесс, включающий архитектурные решения, работу с данными и интеграцию различных технологий.
Опыт CloudCruise демонстрирует, что грамотно спроектированные запросы могут стать фундаментом для построения надежных, масштабируемых и интеллектуальных браузерных агентов, способных адаптироваться к непредсказуемым условиям современного интернета.