惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Securelist
C
Cybersecurity and Infrastructure Security Agency CISA
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security Affairs
Hacker News: Ask HN
Hacker News: Ask HN
L
Lohrmann on Cybersecurity
PCI Perspectives
PCI Perspectives
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MyScale Blog
MyScale Blog
月光博客
月光博客
W
WeLiveSecurity
T
Threat Research - Cisco Blogs
Martin Fowler
Martin Fowler
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
The GitHub Blog
The GitHub Blog
Webroot Blog
Webroot Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
TaoSecurity Blog
TaoSecurity Blog
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
F
Full Disclosure
U
Unit 42
Jina AI
Jina AI
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
L
LINUX DO - 最新话题
宝玉的分享
宝玉的分享
大猫的无限游戏
大猫的无限游戏
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
T
Troy Hunt's Blog
腾讯CDC
T
Threatpost
H
Hacker News: Front Page
P
Palo Alto Networks Blog
博客园 - 聂微东
Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
Help Net Security
Help Net Security
L
LINUX DO - 热门话题
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Spread Privacy
Spread Privacy

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
От RAG-прототипа к агенту в продакшн: путь по метрикам, а не по моде
Сергей Смирнов · 2026-05-26 · via Все публикации подряд на Хабре
Агент 1С-консультант: путь от RAG-прототипа до агента в продакшне — от консультанта в потоке вопросов через портал до автономного агента

Агент 1С-консультант: от RAG-прототипа до агента в продакшне

На связи Сергей Смирнов, AI-инженер LLMStart.ru. Сегодня расскажу о полноценном кейсе, который мы делали для компании Айтон: агенте-консультанте по 1С:УНФ, который помогает отвечать на вопросы клиентов по базе знаний, реальным диалогам поддержки и контексту конкретного обращения. Разберу всю хронологию, нюансы и путь от первой гипотезы до продакшена, которым уже пользуются клиенты.

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

Сразу оговорюcь, чего в этой статье не будет. Это не туториал по LangChain и не обзор того, как вообще устроены AI-агенты — таких материалов хватает. Это разбор одного производственного кейса под одним углом: как на каждом шаге именно измерения определяли, какой должна быть архитектура. Где данные говорили «достаточно простого RAG» — мы оставались на простом RAG; где показывали, что прямой цепочки уже мало, — двигались к агенту. Архитектура здесь не предшествует измерениям, а следует за ними.

Заложник очереди

Айтон более двадцати лет внедряет, сопровождает и дорабатывает 1С:УНФ — «Управление нашей фирмой».

За эти годы у компании накопилась огромная база знаний и большой штат консультантов; и вместе с ними — операционная нагрузка, которую дальше я разберу в цифрах. Продукт, о котором речь, — бот-консультант на базе большой языковой модели по 1С:УНФ. Пользователи на первом этапе — сами консультанты Айтона, которым нужно быстро найти ответ для клиента и попутно разобраться в теме. На втором — клиенты компании напрямую. Класс вопросов — из реальной практики: «как провести возврат, если не попадает доставка», «на что влияет вот этот флаг» (со скриншотом формы), «есть ли в УНФ такая функция и как её включить». Часть таких вопросов — терминологически неоднозначна, и без уточнения отвечать нельзя.

В среднем в службу поддержки Айтона вопрос приходит примерно раз в 5 секунд — это около 6 тыс. вопросов в день и порядка 100 тыс. в месяц. Часть из них — организационные, на них консультант почти не тратит времени. Но примерно половина требует реальной обработки. И из этой половины — около 40–50% вопросов повторяется снова и снова: разные клиенты задают одно и то же.

Масштаб входящего потока: сотни тысяч вопросов в месяц через единый поток ожидания, где простой запрос ждёт за сложным

Один поток на все вопросы: 100 тысяч обращений в месяц, простой запрос ждёт за сложным

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

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

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

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

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

Принцип PoC: меньше функций, больше инфраструктуры

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

Поэтому решение мы сразу разделили на два этапа. Первый — прототип, по сути, проверка гипотезы: большая языковая модель плюс поиск по базе знаний дают ответы по 1С:УНФ на уровне, достаточном для использования консультантами в работе. Второй — развитие прототипа в полноценного агента: с историей диалога, обработкой скриншотов, уточняющими вопросами и дальнейшим выходом от внутреннего инструмента для консультантов к прямому каналу для клиентов.

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

  • историю диалога — она нужна для агента-консультанта, но к вопросу «работает ли вообще модель + поиск по нашей базе» отношения не имеет;

  • обработку скриншотов — в реальных диалогах их много, но в первом цикле проще обходиться текстом;

  • крайние случаи — отложили, чтобы не путать сигнал.

И намеренно вложились в то, без чего нельзя принять никакого решения:

  • валидационный датасет на основе реальных диалогов;

  • автоматические метрики качества по этому датасету;

  • мониторинг каждого запроса с первого дня.

Начинаем с данных, не с кода

Инженерный проект на больших языковых моделях начинается не с кода, а с данных. У нас на входе было два источника.

Десятки тысяч сообщений и сотни документов сворачиваются в компактный измеримый набор

Воронка анализа данных: 25 тысяч сообщений и база знаний сводятся к 110 проверочным парам

Первый — реальные диалоги службы поддержки из Telegram, несколько десятков тысяч сообщений от разных клиентов.

Второй — собственно база знаний: около 500 документов, инструкций, обучающих материалов и методических пособий, которыми пользуются сами консультанты.

Эти данные нам нужны были для двух разных задач.

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

Масштаб этого анализа стоит назвать в цифрах, потому что он показывает, сколько работы лежит до первой строчки кода. Из диалогов поддержки мы прогнали через анализ около 25 000 сообщений. Скользящим окном они свернулись в 618 окон контекста, из которых извлеклось 1 985 черновых пар «вопрос — ответ». Дальше — строгий отбор: оставляли только то, что относится к стандартному функционалу 1С:УНФ, без клиентских кастомизаций. После фильтра осталось 972 пары — 49% от извлечённого. Эти 972 пары — не датасет для оценки бота, а материал, по которому мы изучали, как пользователи реально формулируют запросы и в каком стиле отвечают консультанты.

Вторая задача — собрать валидационный датасет. На этапе прототипа у заказчика не было ни возможности, ни оснований выделять экспертов для ручной подготовки эталонных пар вопрос-ответ: это экспертное время, и без подтверждённой гипотезы тратить его рискованно. Поэтому датасет мы синтезировали сами. Из методички — отобрали стратифицированно по 20 темам, по 3–5 вопросов на тему, в стилистике и структуре, соответствующих реальным ответам консультантов. Получилось 110 пар «вопрос — эталонный ответ».

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

И здесь обычно начинают спорить, как именно нарезать чанки и какой реранкер выбрать. Мы пошли в другую сторону.

Простая архитектура и инфраструктура измерений

Вопросно-ответных систем на LLM сегодня делают много — это самый частый случай для тех, кто пробует продукты с языковыми моделями. И в индустрии регулярно встречаются две типичные ошибки.

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

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

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

Простая RAG-архитектура первого этапа: вопрос, поиск по базе знаний, релевантные фрагменты, LLM и ответ с источниками

Архитектура RAG: от вопроса в Telegram до ответа с источниками

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

Простота архитектуры — половина истории.

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

Инфраструктура качества: датасет, эксперимент, метрики, корректировка и следующий цикл под мониторингом LangFuse

Инфраструктура качества: LangFuse, датасеты, эксперименты, мониторинг и итерации

Для мониторинга и трассировки мы взяли open-source-инструмент LangFuse. В нём — всё, что нужно: управление датасетами, проведение именованных экспериментов и сквозной мониторинг каждого запроса. Видно, что пришло на вход, какие фрагменты нашлись и с какими скорами, что ушло в промпт, какой получился ответ, сколько токенов и времени потратили на каждое звено. Это и есть «не чёрный ящик»: систему можно отлаживать по конкретным примерам, а не по ощущениям.

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

Главное в этом контуре — не сами цифры, а то, что мы начали измерять с первого дня, а не ждали финала, чтобы понять, работает ли вообще. Итерация «изменил — измерил» при таком устройстве стоит буквально копейки: один полный прогон оценки по всем метрикам на 110 вопросах обходился примерно в $1.54. За такую цену проверять каждое изменение промпта или параметров поиска — не подвиг, а дефолтный режим разработки.

Так выглядел RAG-бот в Telegram на первом этапе: ответ с источником и кнопками обратной связи

RAG-бот первого этапа в Telegram: ответ со ссылкой на источник и кнопками обратной связи

Что говорят цифры и что подтвердил тест заказчика

Что в итоге дали измерения. Прогон по валидационному датасету из 110 пар:

  • Faithfulness около 0.8 для прототипа — хороший показатель: в большинстве случаев бот держится за источники, а не фантазирует.

  • Answer Correctness 0.53 на первый взгляд выглядит слабо, но строгое совпадение с эталоном — самая жёсткая из метрик: часть ответов, которые она засчитала как «неточные», были корректными по смыслу, просто сформулированными иначе, чем эталон.

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

Этого было бы достаточно, если бы задача была просто отчитаться. Но измерения, какими бы аккуратными они ни были, остаются нашими собственными — а гипотеза проверяется ещё и независимым взглядом.

Тут помогла внутренняя практика самого заказчика.

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

Собственные метрики и приёмочный тест заказчика дают сходящееся подтверждение гипотезы

Итог PoC: метрики качества и тест заказчика подтверждают гипотезу с двух сторон

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

Где гипотеза заканчивается, а реальность начинается

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

Корабль с пробоинами в корпусе после первого этапа: реальная эксплуатация вскрыла пробелы PoC, которые становятся пунктами дорожной карты

Пять сценариев, которые вскрыла реальная эксплуатация: не провал PoC, а пункты дорожной карты

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

Остальные три предсказал анализ данных ещё на этапе работы с диалогами. Терминологическая неоднозначность. В предметной области 1С много многозначных слов: «счёт» — это бухгалтерский счёт или счёт на оплату; «возврат» — товара, оплаты, поставщику; «учёт» и «себестоимость» — десятки контекстов. Без уточнения, что именно имеет в виду пользователь, корректно ответить нельзя, а пытаться «угадать» — означает регулярно мимо.

Несуществующий функционал. Часть запросов — про возможности, которых в 1С:УНФ просто нет. Здесь бот ни в коем случае не должен «придумывать»: нужен аргументированный ответ, что такой функции нет, и при возможности — указание на альтернативу. Это отдельный сюжет, потому что аргументация требует не только базы знаний, но и внешнего контекста.

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

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

И вот здесь становится очевидно, что классический RAG-пайплайн эти сценарии уже не закрывает. Нужен следующий шаг.

Когда прямого RAG уже мало: переход к агенту

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

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

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

Состав агента: рассуждающая модель в центре, вокруг — память, системный промпт и инструменты

Из чего состоит агент. Три компонента.

Первый — память. Это история диалога плюс работа с этой историей, то есть context engineering. Как только история начинает занимать длинные хвосты, упирается в размер контекстного окна модели, и приходится управлять им осмысленно. Здесь хватает двух приёмов: обрезать хвост, чтобы не переполнять окно, и суммаризировать выкинутое, чтобы не терять смысл предыдущих ходов. Без памяти бот вообще не консультант — он каждый раз отвечает «как будто видит вопрос впервые».

Второй — системный промпт, то есть инструкции для модели. Это та часть, которую делающие агенты часто недооценивают. В RAG-пайплайне промпт тоже был, но там он работал в узкой роли — «ты ассистент, делай вот это». В агенте системный промпт несёт куда больше: через него — следуя той же логике «делай просто, не делай сложно» — закрываются и понимание терминологии предметной области, и правила, когда уточнять, а когда сразу отвечать, и базовая безопасность (не отвечать на нерелевантные запросы, не вестись на попытки взлома). Часть задач, которые на первый взгляд кажутся архитектурными, на деле решается аккуратной настройкой инструкций, без раздувания набора инструментов.

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

Разница двух архитектур

Разницу двух архитектур проще всего увидеть на одном вопросе. Возьмём запрос из реальной практики: «как сделать возврат?». Слово «возврат» в 1С:УНФ многозначно — это может быть возврат товара от покупателя, возврат денег, возврат поставщику.

У прямого RAG один путь без развилок, у агента — контур выбора между действиями

RAG против агента: прямая цепочка против ветвящегося контура принятия решений

Прямой RAG отрабатывает его буквально: берёт текст «как сделать возврат», ищет по базе знаний наиболее похожие фрагменты и генерирует ответ по тому, что нашлось. Если в выдачу попали документы про возврат товара — ответ будет про возврат товара, даже если пользователь имел в виду возврат денег. Цепочка одна, развилки в ней нет.

Агент на том же вопросе ведёт себя иначе. Он сначала рассуждает: вопрос неоднозначный, по нему нельзя дать один корректный ответ. Дальше он решает не идти сразу в поиск, а задать уточняющий вопрос — «возврат чего именно: товара, оплаты или поставщику?». Получив уточнение, он формирует уже точное поисковое выражение, при необходимости вызывает поиск по базе несколько раз с переформулировкой, проверяет результаты — и только потом отвечает. Тот же вопрос, та же база знаний, но между запросом и ответом появился контур принятия решений.

Тот же цикл, новые задачи

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

Процесс развития агента: реальные диалоги, анализ паттернов, подбор метрик, разметка датасета, решение и новый цикл измерения

Процесс: от данных до решения через метрики и повторное измерение

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

Что вышло по каждому сценарию.

  • Многошаговый диалог — закрыли памятью и работой с контекстом поверх неё — это и есть context engineering: история сохраняется в рамках сессии, при приближении к границе окна — обрезается с суммаризацией предыдущих ходов.

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

    Агент учитывает скриншот формы 1С и отвечает по конкретному элементу интерфейса

    Агент видит скриншот: вопрос привязан к конкретному элементу формы

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

    Агент задаёт уточняющий вопрос на неоднозначный термин — не угадывает, а переспрашивает

    Агент уточняет: неоднозначный термин лучше прояснить, чем угадывать

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

  • Пробелы в базе знаний — расширение через транскрипции видеоуроков. Здесь мы провели контролируемый эксперимент: взяли часть датасета, которая покрывается старой базой знаний, и проверили, что качество ответов на этих вопросах не ухудшилось; и отдельно собрали датасет вопросов, по которым информации в существующих инструкциях нет, — «дельту», чтобы понять, действительно ли расширенная база теперь на них отвечает. Эксперимент подтвердил, что такие неструктурированные источники можно использовать.

Как измеряли агентные действия

Под все эти сценарии нужно было расширить и сам измерительный контур.

Базовые метрики RAG-системы никуда не делись — она же по-прежнему отвечает на вопросы. Но прямой RAG отвечал одним движением, а агент рассуждает, выбирает инструмент, уточняет — и каждое из этих действий нужно измерять отдельно. Поэтому поверх стандартного набора Ragas добавились метрики двух новых групп.

Первая — метрики извлечения: насколько часто нужный документ вообще попадает в выдачу поиска (Hit Rate@k) и на какой позиции он оказывается (MRR).

Вторая — собственные агентные метрики, которых в готовых фреймворках нет:

  • точность выбора инструмента — пошёл ли агент в базу знаний, в веб-поиск или верно решил ответить по уже имеющемуся контексту;

  • корректность использования инструмента — насколько удачно агент сформулировал поисковое выражение; для сопоставления фактических вызовов инструментов с эталонными у нас своя метрика мягкого совпадения, FuzzyToolCallF1;

  • уместность уточняющих вопросовclarification_accuracy по тернарной шкале: задал уточнение там, где надо (1.0); задал, но не той категории (0.5); не задал, хотя был обязан (0);

  • корректность вердикта про отсутствующий функционалverdict_l1_accuracy: правильно ли суб-агент классифицировал случай как «функция есть», «функции нет» или «не знаю».

Каждая группа метрик прогоняется на своём датасете: основной вопросно-ответный rag_itone_qa (те самые 110 пар), отдельный набор clarifying_itone (27 диалогов под уточняющие вопросы) и no_feature_itone (75 примеров про несуществующий функционал). Критерий успеха здесь был сформулирован как двойное условие: новые агентные метрики должны выйти на рабочий уровень, и при этом базовые RAG-показатели не должны просесть — агент не имеет права стать хуже в том, что прямой RAG уже умел. Оба условия выполнились: агентное поведение измеримо работает, а метрики качества ответа на основном датасете остались на уровне PoC.

К прежним метрикам качества ответа добавляется надстройка для измерения действий агента

Расширенный измерительный контур: базовые RAG-метрики и надстройка агентных метрик

Одна история из этого этапа стоит того, чтобы её рассказать отдельно.

Эксперт со стороны заказчика готовил датасет под уточняющие вопросы — набор реальных кейсов, на которых мы прогоняли поведение агента. Прогоняем — метрика плохая. Смотрим, в чём дело: агент не задал уточнение, а сразу ответил. Идём к эксперту: «вот ответ, нам он выглядит корректным». Эксперт смотрит — да, действительно корректный. Просто из самого вопроса можно было извлечь все нужные тонкости и однозначно сложить ответ, не задавая дополнительных вопросов. То есть модель — а в финальной версии агента у нас под капотом Gemini 3.1 Pro, на прототипе была одна из моделей OpenAI, — посмотрела на вопрос и увидела ответ там, где эксперт видел развилку. В итоге кейс ушёл из датасета для уточнений: уточнения здесь не требуется. Плохая метрика была плохой не потому, что агент ошибся, а потому что модель превзошла ожидания.

И ещё пара технических деталей, которые имеет смысл назвать, чтобы было понятно, на чём всё собрано.

Сам агент реализован на фреймворке LangChain 1.0 , где сильно удобнее устроены инструменты и middleware hooks, через которые можно врезаться в агентский цикл в любом месте: ставить фильтры, проверки безопасности, дополнительные обработчики.

По LLM: вместе с Gemini тестировались и открытые модели среднего масштаба — gpt-oss-120b, Qwen — на случай требований по запуску в закрытом контуре заказчика; на агентных сценариях они показали сопоставимое качество.

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

Ремарка про AI-driven development

Если интересен не только сам агент, но и то, как он разрабатывался, то этот кейс целиком шёл по AI-driven методологии.

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

Из полезной обвязки вокруг разработки: MCP-серверы Context7 и Docs by LangChain для быстрого доступа к актуальной документации, плюс отдельные LangFuse-навыки для анализа датасетов, трейсов и результатов eval-прогонов.

Что работает сегодня и что получилось в итоге

Переход от очереди и обучения консультантов к AI-агенту в продакшне: ответ за 5 секунд, работа 24/7 и клиентский сервис

Айтон 1С: было и стало — от очереди поддержки до AI-агента в продакшне

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

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

И самое заметное изменение — не в скорости ответа клиенту, хотя она тоже выросла. Заметнее изменилась практика самих консультантов. Раньше менее опытный сотрудник, получив непривычный вопрос, шёл к более опытному, забирал его время на «к каким материалам обратиться, что важно учесть» и потом отдельно ещё разбирался сам. Сейчас работает примерно по модели Perplexity: ответ приходит сразу, и дополнительными вопросами можно проваливаться вглубь — переспрашивать, уточнять, разворачивать тему. Бот выступает в роли ментора, и обучение идёт гораздо быстрее, чем по методичкам.

Итоговый чек-лист

И возвращаясь к тому, с чего я начал. Этот путь — от RAG-прототипа до агента в продакшне — мы прошли не выбором модной архитектуры, а последовательностью инженерных решений, в каждом из которых данные и метрики стояли раньше схемы. Сначала ограниченный PoC с дисциплиной измерений. Потом — пять сценариев, которые показала реальная эксплуатация. И только под эти сценарии — следующий архитектурный шаг, агент. Уберите инженерный слой, оставьте только хайповую обвязку, и получится дорогая игрушка, какой я тоже видел немало. Сохраните инженерный слой — и получится система, которой действительно пользуются.

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

  • начните не с кода, а с данных — реальные диалоги пользователей и база знаний показывают, как на самом деле задают вопросы и что вообще есть для ответа;

  • соберите валидационный датасет и поднимите измерительный контур (мониторинг каждого запроса плюс автоматические метрики) до того, как писать функциональность;

  • сделайте первым шагом максимально простой RAG — задача прототипа ответить «да или нет», а не выглядеть как продукт;

  • проверьте гипотезу не только своими метриками, но и независимым критерием — тестом или приёмкой со стороны заказчика;

  • выпустите прототип на реальных пользователей и соберите сценарии, которые он не закрывает, — это и есть дорожная карта;

  • и только под эти сценарии добавляйте память, мультимодальность и инструменты — расширяя вместе с архитектурой и сам измерительный контур.

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

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


Мы рассмотрели реальный кейс от идеи до продакшна: не через «прикрутили LLM», а через данные, метрики, качество и постепенное усложнение архитектуры.

В LLMStart.ru мы помогаем бизнесу решать такие задачи и получать реальный эффект от ИИ — от прототипа до промышленной эксплуатации. Если вам близок такой подход, обращайтесь, будем рады обсудить вашу задачу.

Если хотите перенять опыт и научиться делать подобные системы самостоятельно, у нас есть онлайн-курсы, а ближайший живой поток курса Deep Agents стартует уже в четверг, 28 мая.

По любым вопросам пишите мне в личку: Telegram или ВК. Приглашаем также в наши соцсети про ИИ-кодинг ИИ-агентов: в ТГ-канал и ВК-сообщество