Колонки

Функция корпоративного ПО нового поколения не будет выпускаться. Она будет генерироваться.

Функция корпоративного ПО нового поколения не будет выпускаться. Она будет генерироваться.

Коротко

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

Бэклог корпоративных функций — это место, куда хорошие запросы пользователей отправляются томиться в ожидании. Это ожидание скоро станет намного короче, и вовсе не потому, что продуктовые команды стали работать быстрее, а потому, что недостающую функцию теперь можно сгенерировать в момент запроса и удалить через тридцать секунд.

Руководитель службы поддержки открывает приложение хелпдеска и задает вопрос:

«Покажи мне все тикеты за этот месяц, которые были закрыты, а затем переоткрыты в течение 48 часов, с группировкой по агенту, который закрыл их первым.»

Ни один отчет не делает этого. Никакая комбинация фильтров не может это выразить. Не существует ни одного элемента на дашборде.

Несколько лет назад это превратилось бы в задачу для продуктовой команды: ее бы зарегистрировали, расставили приоритеты и часто доставили бы с опозданием или вообще не доставили. Совсем недавно ИИ-ассистент мог бы выдать статью базы знаний, объясняющую, как экспортировать данные тикетов и проанализировать их в таблице.

Теперь появилась третья возможность. Ассистент генерирует небольшую программу специально под этот запрос. Программа сканирует записи о тикетах, сопоставляет каждое событие закрытия с последующими переоткрытиями, проверяет, был ли промежуток времени менее 48 часов, и возвращает сгруппированную сводку. Модель получает эту таблицу и объясняет закономерность.

Продуктовая команда никогда не создавала этот отчет. Пользователь не написал ни строчки кода. Для одной задачи недостающая функция возникла именно там, где она была нужна.

Это не просто улучшенный поиск. Это зарождение программируемого контекста.

Поиск выбирает доказательства. Код вычисляет новые доказательства.

RAG решил реальную проблему: пользователи могли задавать вопросы на естественном языке и получать ответы, основанные на источниках, которые интерфейс никогда не выводил на экран. Но поиск выбирает из уже существующих данных — документа, абзаца, строки.

На многие вопросы в корпоративной среде нельзя ответить с помощью какого-то готового артефакта. На них отвечает процедура: фильтрация, соединение, вычисление и суммирование данных из разных источников.

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

Продуктовая команда может заранее создать типовые процедуры. Но она не способна предвидеть их все.

Именно этот разрыв и закрывает программируемый контекст. Модель преобразует намерение пользователя в временную программу. Приложение выполняет ее, используя утвержденные возможности, и помещает в контекстное окно только вычисленный результат. Это не универсальный интерпретатор кода с доступом ко всему языку программирования: приложение четко определяет, какие именно операции может вызывать сгенерированный код. Код может существовать в течение одного запроса — сгенерирован, выполнен, залогирован, удален.

Пользователи сами будут решать, что именно видит ИИ

У любой модели ИИ есть ограниченная оперативная память — контекстное окно, которое определяет, чем она может оперировать при каждом запросе. Управление этим окном всегда было незаметной «сантехникой», которой занимались платформенные команды. Это по-прежнему критически важно. Но становится возможным более масштабный сдвиг: пользователи сами определяют, что попадает в контекст, описывая необходимые им вычисления.

«Покажи мне решенные тикеты, в которых клиент ответил в течение дня, каковы основные темы обсуждения?» «Сравни время первого ответа агентов в этом месяце с прошлым и отметь всех, кто стал работать медленнее.» «Найди отчеты о расходах, поданные в последний день квартала, сгруппированные по утверждающим лицам.»

Каждый запрос — это временная функция. Сгенерированная программа вычисляет артефакт в виде ответа, и только этот артефакт попадает в контекст. Это настройка контекста через намерение, а не через тюнинг промптов.

Где на самом деле выполняется сгенерированный код?

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

Каждое корпоративное веб-приложение отправляет движок JavaScript каждому входящему пользователю. Этот движок может выполнять сгенерированный код без отдельной бэкенд-службы, этапа деплоя или запроса к инфраструктуре. Пользователю не нужно ничего устанавливать или переключаться между инструментами — вычисления происходят внутри продукта, которым он уже пользуется.

Выполнение на стороне клиента также имеет важное архитектурное преимущество: сессия браузера уже представляет вошедшего в систему пользователя.

Предположим, приложение хелпдеска предоставляет сгенерированному JavaScript узкий интерфейс: listTickets, getTicketTimeline, getAgentStats. Каждый вызов отправляется на бэкенд с использованием делегированной идентичности текущего пользователя. Те же правила на основе ролей и на уровне записей, которые регулируют экраны приложения, регулируют и сгенерированные вычисления. Никакой отдельной учетной службы с расширенными правами не требуется.

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

Клиентское выполнение становится стратегией проектирования контекста: вычисления выполняются рядом с пользователем, под его учетной записью, а модели предоставляются доказательства в виде готового ответа, а не «сырые» записи.

Идентичность необходима, но недостаточна

Существует опасная реализация этой идеи: генерировать JavaScript и запускать его через eval() внутри главной страницы приложения, предоставляя ему полный доступ к DOM, хранилищу браузера, эндпоинтам записи и исходящим сетевым запросам.

В самом языке программирования есть более безопасный путь. Конструктор new Function() компилирует строку в функцию, которая не может захватывать локальные переменные вызывающей области видимости, но все же выполняется в глобальной области, если ее дополнительно не изолировать. В сочетании с изолированным (sandboxed) фреймом или воркером это становится практичной границей выполнения, где приложение передает сгенерированной функции только те возможности, которые само выберет.

Выполнение на стороне клиента не делает авторизацию автоматической. Браузер предоставляет идентичность; сервер все равно должен авторизовывать каждый запрос к API.

Надежный дизайн наделяет сгенерированный код возможностями, а не учетными данными. Он работает в изолированном воркере, защищенном фрейме или ограниченной среде выполнения, не имея неограниченного доступа к документу, кукам, сети или файловой системе. Приложение предоставляет небольшой набор типизированных, проверяемых операций. Чтение разрешено по умолчанию. Запись требует отдельного разрешения, а для ответственных действий — явного подтверждения.

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

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

Принцип прост: позвольте сгенерированному коду производить вычисления. Никогда не позволяйте ему выходить за рамки.

От каталогов функций к вычислительным средам

Клиентский JavaScript и серверные навыки — это два проявления одного и того же зарождающегося паттерна.

Многоразовый навык может содержать проверенный скрипт Python для повторяющейся задачи. Эфемерная программа может быть создана под один вопрос и больше никогда не запускаться. Браузерная среда выполнения подходит для интерактивного анализа под делегированной идентичностью. Серверная песочница справляется с ресурсоемкими вычислениями и доступом к нескольким системам.

Продуктовые команды по-прежнему выпускают функции, и повторяющиеся вычисления со временем должны перерастать в постоянные элементы системы. Но разработчики также создают управляемую среду выполнения, из которой можно собирать непредвиденные функции: безопасные возможности, распространение идентичности, соблюдение политик, песочницы и прослеживаемость происхождения.

Пользователи не получают неограниченный доступ и не превращаются в инженеров-программистов. Они получают кое-что более практичное: возможность запрашивать вычисления, которые продуктовая команда не додумалась создать заранее, внутри границ, которые эта команда осознанно спроектировала.

Это пока еще не стандартная практика, но каждый компонент уже готов к производственному использованию. RAG позволил пользователям задавать вопросы, которые интерфейс не мог предвидеть. Программируемый контекст позволяет системам вычислять ответы, которые не были предусмотрены дорожной картой функций.

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

Опубликовано 1 сентября 2026 - 03:56 Наверх