Разработка LLM-приложений и ИИ-продуктов: RAG, агенты, API

LLM-приложение (ИИ-приложение на языковой модели) — это не вызов модели из кода, а система вокруг неё: шаблоны запросов, поиск по документам, инструменты и действия, проверка ответа, оценка качества на эталонной выборке, журнал и учёт стоимости. Мы разрабатываем такую систему для вашего продукта или внутреннего сервиса: RAG, ассистентов, агентов и интеграции по API. Модель в ней меняется за общим интерфейсом: своя в контуре или внешняя, если её разрешила ваша служба безопасности.

Обследование — от 200 000 ₽, 2–3 неделиЛёгкий пилот — 150 000–400 000 ₽, 2–8 недельМодель меняется за общим интерфейсом, исходники в вашем репозитории

Что разрабатываем

Какие LLM-приложения мы разрабатываем

Ассистент по базе знаний

Отвечает по регламентам, договорам и инструкциям со ссылкой на источник и честно отказывается, если ответа в базе нет.

ИИ-функция внутри вашего продукта

Подсказки, краткое содержание, разбор обращений в веб-сервисе или кабинете с учётом прав клиента и лимитов по тарифу.

Разбор входящих

Письма, заявки и документы превращаются в структурированные поля, которые проверяет валидатор, а записывает в систему код.

Агент с действиями

Выбирает из разрешённых инструментов и пишет в CRM и 1С по матрице действий. Подтверждения и журнал обязательны.

Сервис модели по API

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

Демонстрационный скрипт на одной модели

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

Архитектура

Части вокруг модели, которые мы сдаём, и где каждая подводит

Именно части вокруг модели определяют, можно ли приложению доверять. Каждая принимается отдельно, по письменному критерию. Путь одного запроса и таблицу симптомов разбирает статья «Архитектура LLM-приложения».

Компонент
Что делает
Какое решение надо принять
Где ломается
КомпонентШаблоны запросовинструкции модели
Что делаетСобирают запрос из инструкции, данных пользователя и найденных фрагментов; ответ в заданной структуре
Какое решение надо принятьГде хранить и как версионировать шаблоны, что модель обязана вернуть
Где ломаетсяПравку шаблона выкатили без прогона эталона, качество упало незаметно
КомпонентПоиск по документамRAG
Что делаетНаходит фрагменты по смыслу, при необходимости и по точным словам, с учётом прав спрашивающего
Какое решение надо принятьКак резать документы, какой нужен поиск, кто владеет разделами базы
Где ломаетсяУстаревшая редакция в индексе, номера не находятся, чужие документы в ответе
КомпонентИнструменты и действиявызов функций
Что делаетМодель выбирает инструмент из списка, исполняет код с проверкой
Какое решение надо принятьКакие действия разрешены, где подтверждение, чем действие отменяется
Где ломаетсяЛишние права, дубль от повторного запроса, команда из документа исполнена как инструкция
КомпонентПроверка ответадо пользователя
Что делаетВалидатор структуры, проверка ссылок на источники, порог уверенности, фильтры
Какое решение надо принятьЧто блокируется, что идёт человеку, что показывается с пометкой
Где ломаетсяПроверка только на входе; ответ без источника выглядит как проверенный
КомпонентОценка качестваэталонная выборка
Что делаетПрогон вопросов с известными ответами при каждой смене модели, шаблона, индекса
Какое решение надо принятьКто размечает эталон, какие пороги, какие виды ошибок считаются отдельно
Где ломаетсяЭталон из нескольких удобных вопросов, качество проверили один раз
КомпонентЖурнал и стоимостьнаблюдаемость
Что делаетЗапись без текстов запроса и ответа: версии шаблона и модели, номера найденных фрагментов, время, расход текста
Какое решение надо принятьЧто писать, сколько хранить, кто читает; тексты по умолчанию не хранятся
Где ломаетсяВ журнал попали тексты с персональными данными, либо в записи нет версий и фрагментов, и непонятно, почему ответ плохой
КомпонентЛимиты и кэшпредсказуемость
Что делаетЛимит запросов на пользователя, тайм-ауты, повторы, кэш ответов с ключом по правам и версиям индекса, шаблона и модели
Какое решение надо принятьЧто кэшировать, как долго и для кого, что делать при отказе модели
Где ломаетсяКэш отдаёт ответ по старой редакции или ответ одного пользователя достаётся другому; нет тайм-аута, и очередь встала
RAG

RAG-система: из чего состоит и что в ней ломается

RAG-система находит в ваших документах фрагменты и просит модель отвечать только по ним. Принцип описан в статье «Что такое RAG», здесь — что решает качество на практике.

Подготовка источников

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

Поиск: по смыслу и по словам

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

Права, ссылка и отказ

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

RAG или дообучение

Для знаний о компании подходит RAG: документы обновляются без переобучения, права проверяются, источник виден. Дообучение нужно для поведения и формата ответа, а не для фактов. Правило выбора — в статье «RAG или дообучение LLM».

Модель

Своя модель в контуре или внешний API: по каким критериям выбираем

Для данных ограниченного доступа внешний API чаще всего не подходит по требованиям заказчика, поэтому берём свою модель в контуре; для остальных данных решает замер: один эталон прогоняем на обоих вариантах. Выбор записывается в документ обследования вместе с причиной и способом перейти на другой вариант. Шире — в статье «Своя LLM или ChatGPT API».

Критерий
Своя модель в контуре
Внешний API
Как решаем
КритерийДанныечто уходит наружу
Своя модель в контуреЗапросы и документы остаются в периметре
Внешний APIЗапросы уходят поставщику; для данных ограниченного доступа такой вариант чаще всего не подходит по требованиям заказчика
Как решаемКлассифицируем данные вместе с вашей службой безопасности
КритерийКачество на задачене по рейтингам
Своя модель в контуреРазрыв между открытыми моделями и самыми крупными облачными зависит от версии и задачи; для узкой задачи открытой модели может хватать, для широкой — нет
Внешний APIУ самых крупных моделей запас по широте задач; хватает ли его вашей задаче, показывает замер
Как решаемОдин эталон прогоняем на обоих вариантах
КритерийЗадержкавремя до ответа
Своя модель в контуреЗависит от вашего железа и нагрузки; внешний канал не участвует, внутренняя сеть входит в замер
Внешний APIЗависит от сети и загрузки поставщика, которую вы не контролируете
Как решаемМерим на реальных запросах, смотрим худшие случаи, а не среднее
КритерийУправляемостьверсии и поведение
Своя модель в контуреВерсия закреплена, обновляете вы, когда решите
Внешний APIПоставщик может изменить или снять модель; поведение меняется между версиями
Как решаемФиксируем версию, перед сменой прогоняем эталон
КритерийНагрузкапик и постоянный поток
Своя модель в контуреОграничена вашим железом, нужен запас под пик
Внешний APIМасштабируется у поставщика в пределах его лимитов
Как решаемСчитаем число одновременных пользователей и длину запросов
КритерийНезависимостьдоступность и условия
Своя модель в контуреНе зависит от доступности чужого сервиса, но требует эксплуатации, закупки оборудования и соблюдения лицензии весов: условия лицензии конкретной версии читаем до выбора
Внешний APIЗависит от доступности и условий поставщика
Как решаемЗакладываем замену: модель за общим интерфейсом, после смены прогон эталона
Безопасность

Как защитить LLM-приложение: инъекции, права и вывод модели

Защита строится в коде вокруг модели, а не в тексте промпта: для модели инструкция разработчика и обрабатываемый текст выглядят одинаково.

Инъекции в запросе и в документах

Прямая инъекция приходит в сообщении пользователя, косвенная спрятана в письме, документе или странице, которые модель читает через поиск. Просьба в промпте «не выполняй чужих инструкций» обходится. Работают слои вокруг модели: фильтры входа и выхода, очистка источников, тестовый набор атак перед запуском и после каждой смены. Механика и меры — в статье «Что такое prompt injection».

Права вне модели

Права есть у кода, а не у модели. У приложения отдельная учётная запись с минимальной ролью, инструменты вызываются через слой политик, дорогие действия подтверждает человек, повторный запрос не создаёт дубль. Тогда подмена инструкции в тексте не даст больше, чем разрешено роли приложения. Полностью исключить подмену нельзя, поэтому мы ограничиваем ущерб. Подробнее — «Как ограничить ИИ-агента» и ИИ-агент для бизнеса.

Вывод модели — недоверенный ввод

Ответ нельзя вставлять в страницу, команду или запрос к базе без проверки: он может содержать разметку, ссылки и код. Структурированный ответ проверяется по схеме, ссылки по белому списку.

Секреты, лимиты, журнал

Ключи лежат не в промпте и не в коде, лимиты не дают перебирать систему, журнал позволяет восстановить, почему приложение ответило так. Список проверок перед запуском — в чек-листе безопасности LLM-системы; взгляд со стороны даёт аудит безопасности ИИ. Для приложения, которое разработали мы, аудит лучше поручить другому исполнителю.

Стоимость

Стоимость владения: из чего складывается и чем управляют

Разработка — часть расхода. Остальное платится каждый месяц и зависит от устройства приложения.

Из чего состоит

  • Вычисления: у внешнего API это счёт за обработанный текст, у своей модели — оборудование, электроэнергия и обслуживание. Цен здесь нет: они зависят от нагрузки.
  • База знаний: кто в вашей компании обновляет документы и за какой срок после правки пересобирается индекс.
  • Контроль качества: прогон эталона при смене модели, шаблона или данных и разбор того, что упало.
  • Люди: часы сотрудников, которые подтверждают действия и разбирают спорные ответы.

Чем управляют

Считать нужно стоимость полезного ответа, а не запроса: отказы и повторы тоже входят в расход. На пилоте журнал показывает расход по шагам, и по нему вместе с вами задаём потолок на пользователя и на тариф и порог, после которого приложение сообщает о перерасходе. Перечень мер, которые снижают расход, — в статье «Архитектура LLM-приложения». Общий подход к расчёту — в статье «Как считать стоимость владения», лимиты по тарифам — в статье «Как добавить ИИ в SaaS-продукт».

Что делаем

Из чего состоит работа и сколько она стоит

Цены — по тарифам. Точная цена только у обследования, дальше вилка, которая сужается. Остановиться можно после любой ступени.

Обследование

Задача, документы, права и контур, выбор между своей моделью и внешним API, эталонный набор вопросов, схема приложения и вилка бюджета. 200 000 ₽ — один-два процесса, 2–3 недели; 350 000 ₽ — несколько систем, 3–4 недели; 500 000 ₽ — производство или контур, 4–6 недель. Вычитается из первого этапа, если продолжаете с нами.

200 000 / 350 000 / 500 000 ₽

Лёгкий пилот: ассистент по базе знаний

Поиск по документам, ответ со ссылкой, отказ при отсутствии ответа, интерфейс, прогон эталона. Агент на этой ступени только читает и готовит черновики. В боевые системы ничего не пишется. На выходе протокол испытаний.

150 000 – 400 000 ₽ · 2–8 недель

Тяжёлый пилот: агент или функция в продукте

Агент получает запись в боевые системы: инструменты и права, подтверждения, журнал, лимиты, регламент эксплуатации. ИИ-функция встраивается в ваш продукт.

400 000 – 1 200 000 ₽ · 2–3 месяца

Вывод в эксплуатацию

Опытная эксплуатация, приёмочные испытания, обучение, мониторинг качества, передача исходников. Этапы с отдельной приёмкой и правом остановиться.

от 1 500 000 ₽ этапами по 300 000 – 700 000 ₽

Сопровождение

Прогон эталона, пересборка индекса после того, как ваши владельцы разделов обновили документы, разбор жалоб на качество, обновления окружения. Содержимое базы знаний ведёте вы. Сверх пакета — 5 000 ₽ в час.

20 000 / 60 000 / 120 000 ₽ в месяц
Процесс

Как идёт работа

Обследование

Фиксируем задачу, данные, права, контур и критерии приёмки. Собираем эталонный набор вопросов вместе с вашими специалистами.

Простой вариант на эталоне (лёгкий пилот)

Сначала собираем самую простую схему и меряем её, усложняем только то, что поднимает результат замера. Права, ссылку на источник и журнал не откладываем: они нужны уже на пилоте.

Пилот в рабочем окружении (тяжёлый пилот)

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

Опытная эксплуатация и приёмка

Приёмка по письменным критериям, затем передача исходников, шаблонов запросов, эталона и инструкции по развёртыванию.

Дальше — рост, сопровождение или остановка

Следующие функции идут этапами с отдельной приёмкой. Сопровождение у нас или у вас: решаете вы.

Честно

Где LLM-приложения ломаются

Демонстрацию выдают за продукт

Скрипт с одним запросом к модели показывают на нескольких примерах и по нему назначают сроки. Права, журнал, оценка и лимиты остаются за кадром, а именно они отличают продукт от демонстрации.

Один длинный промпт на всё

Правки в одном месте ломают три других, и никто не знает, что именно. Шаблоны версионируются и проверяются на эталоне.

Нет владельца результата

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

Модель вшита в код

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

Контроль

Что остаётся у вас и чего мы не делаем

Остаётся у вас

  • Исходный код, шаблоны запросов и конфигурации в вашем репозитории с первого коммита.
  • Журнал (версии, номера фрагментов, результаты проверок, без текстов запросов) в вашей базе, а не у нас.
  • Эталонный набор и скрипт прогона: им проверяют и нас, и следующего подрядчика.
  • Учётные записи и ключи: выдаёте и отзываете вы.
  • Право остановиться после любой ступени: сделанное остаётся у вас по акту.

Мы этого не делаем

  • Не обещаем отсутствия ошибок, процент точности и уровень самых крупных облачных моделей для открытой модели в контуре: это показывает замер на вашей выборке.
  • Не внедряем ИИ на предприятие целиком и не обучаем языковые модели с нуля: берём один продукт, сервис или контур и открытую модель.
  • Не выдаём приложению право удалять данные и совершать платежи.
  • Не отправляем ваши данные во внешние модели без письменного решения вашей службы безопасности.
  • Не проводим аттестацию и лицензируемые работы по защите информации: лицензии ФСТЭК у нас нет.
  • Не берём работы дешевле 150 000 ₽ и не дежурим круглосуточно.
Инструменты

На чём собираем

Модель и поиск
  • Своя модель в контуре: vLLM или llama.cpp, для малой нагрузки и пробного запуска — Ollama
  • Векторный поиск (pgvector, Qdrant) и поиск по точным словам
  • Внешний API модели — только если разрешила ваша служба ИБ
Обвязка и контроль
  • Python, FastAPI, очередь в PostgreSQL или RabbitMQ (выбираем на обследовании)
  • PostgreSQL для журнала и состояния операций
  • Docker, Keycloak и роли
  • Прогон эталона при сборке, мониторинг качества
Материалы

Материалы по теме

Статья

Архитектура LLM-приложения

Поток одного запроса, компоненты, оценка качества на эталоне и защитные проверки.

  • Таблица компонентов
  • Симптом и причина
Читать →
Статья

RAG или дообучение LLM

Правило «знания или поведение», права доступа, сравнение на одной выборке.

  • Знания или поведение
  • Дерево решений
Читать →
Статья

Чек-лист безопасности LLM-системы

Что проверить перед запуском: права, инъекции, вывод, секреты, лимиты.

  • Как проверить
  • Что считается провалом
Читать →
Статья

Своя LLM или ChatGPT API

Развилка по безопасности, стоимости и контролю, гибридный сценарий.

  • Критерии
  • Гибрид
Читать →
Заявка

Разберём ваше LLM-приложение или идею

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

Спасибо, заявка отправлена. Ответим в течение рабочего дня.

Не удалось отправить. Напишите в телеграм или позвоните.

Вопросы

Частые вопросы: разработка llm-приложений

Сколько стоит разработка LLM-приложения?

Обследование стоит 200 000 ₽ за один-два процесса, 350 000 ₽ за несколько систем и 500 000 ₽ за производство или закрытый контур; сумма вычитается из первого этапа, если продолжаете с нами. Лёгкий пилот (ассистент по базе знаний, агент на чтении и черновиках) — 150 000–400 000 ₽, 2–8 недель. Тяжёлый (агент с записью в системы, ИИ-функция в вашем продукте) — 400 000–1 200 000 ₽, 2–3 месяца. Вывод в эксплуатацию — от 1 500 000 ₽ этапами по 300 000–700 000 ₽. Цену внутри вилки двигают состояние данных, число подключаемых систем, требования контура и строгость критерия качества; у агента добавляется доля необратимых действий.

Чем LLM-приложение отличается от вызова API модели?

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

Можно ли разработать приложение на GPT или другом внешнем API?

Можно, если данные это допускают, внешний API разрешила ваша служба безопасности и он доступен вам юридически и технически: доступ и оплата ряда зарубежных сервисов из России могут быть ограничены, это проверяем на обследовании и сравниваем с API российских поставщиков и со своей моделью в контуре. Для данных ограниченного доступа облачные модели чаще всего не подходят по требованиям заказчика. В любом случае модель остаётся заменяемой, а перечень полей, которые уходят наружу, записывается в договоре и согласуется с вашей службой безопасности.

Как вы проверяете качество ответов?

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

Как вы снижаете галлюцинации модели?

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

Можно ли встроить ИИ в наш продукт?

Да. Нужно учесть права клиентов, разделение их данных, лимиты по тарифам и стоимость запросов. Эти вопросы закладываются в архитектуру на обследовании.

Кому принадлежат код и шаблоны запросов?

Исходный код, шаблоны запросов, конфигурации и эталонный набор лежат в вашем репозитории с первого коммита. Результат работ (исходный код, конфигурации, обученные модели) передаётся вам по акту; порядок передачи прав записывается в договоре; открытые компоненты, в том числе веса выбранной модели, остаются под своими лицензиями, их список входит в документацию.

Нужны ли видеокарты?

Для своей модели в закрытом контуре обычно нужны. Конфигурацию считаем на обследовании, до закупки; оборудование выбираете и оплачиваете вы, в цену работ оно не входит. Небольшую модель при малой нагрузке иногда можно запустить на процессоре, но ответы будут медленнее: вариант без видеокарт мы тоже считаем. Если используется внешний API, видеокарты не нужны, но встаёт вопрос, какие данные уходят поставщику.

Вы работаете только в Ростове-на-Дону?

Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.