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

推荐订阅源

aimingoo的专栏
aimingoo的专栏
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Schneier on Security
Cisco Talos Blog
Cisco Talos Blog
T
ThreatConnect
J
Java Code Geeks
博客园 - 司徒正美
A
Arctic Wolf
T
True Tiger Recordings
C
Cybersecurity and Infrastructure Security Agency CISA
Cyberwarzone
Cyberwarzone
Know Your Adversary
Know Your Adversary
T
Threat Research - Cisco Blogs
V
Vulnerabilities – Threatpost
Recorded Future
Recorded Future
P
Palo Alto Networks Blog
The Hacker News
The Hacker News
The Register - Security
The Register - Security
S
Securelist
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
Application and Cybersecurity Blog
Application and Cybersecurity Blog
I
Intezer
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
K
Kaspersky official blog
博客园 - 聂微东
Last Week in AI
Last Week in AI
V
V2EX
小众软件
小众软件
F
Fox-IT International blog
Martin Fowler
Martin Fowler
Apple Machine Learning Research
Apple Machine Learning Research
T
Tenable Blog
F
Future of Privacy Forum
Microsoft Security Blog
Microsoft Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog
阮一峰的网络日志
阮一峰的网络日志
GbyAI
GbyAI
T
Threatpost
I
InfoQ
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
Tor Project blog
G
GRAHAM CLULEY
D
DataBreaches.Net

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

Лицензии важны. Разбор ошибок авторов и пользователей программ Serial Terminal: кастомный веб-терминал для последовательного порта на Web Serial API Китайский стартап GigaAI обещает робота-домработника за 1 млн рублей уже в 2027 году — правда или PR? Open-source VPN клиент Tunguska Роман за 6 недель без идеи на старте: миф или реальность? ИИ построит ваш план действий за 10 секунд Security Week 2622: эффективность Claude Mythos по версии Cloudflare Reactive Forms vs Signal Forms: Эволюция сложных форм в Angular TorFlash — приложение для Linux: поиск торрентов, скачивание и копирование на флешку в одно нажатие Как я решил проблему русской диктовки для ИИ Оверинжиниринг, потопивший немецкую подлодку или некоторые «баги» не чинятся десятилетиями Как ставить цели и не забывать о них: пошаговая система с примерами в таск-менеджере Как настроить observability в Spring Boot 3 HackTheBox. Прохождение Mini Pro Lab Puppet Обзор серверного ускорителя NVIDIA Tesla V100 16 Gb в корпусе от RTX 4090: Часть 3 — Запуск локальных моделей ИИ Редактирование текста нейросетью: как сделать диплом и курсовую более человечными Самодельный ARM ноутбук, реально ли? Как 100+ авторов пишут 100+ процессов в 3 версиях и не путаются. Или как мы переехали с Wiki на Git Прошла AnalystDays – хорошие выступления и нетворкинг VSCode как IDE для embedded разработки Моделирование широкополосной антенны с двойной круговой поляризацией и высокой изоляцией Ваше прошлое физически существует прямо сейчас. И вы заморожены там навсегда От списка инструментов к technical output: как security engineer’у описывать hands-on опыт в CV и на интервью I just want an agent. Часть 1. Как я научил ИИ собирать ИИ-агентов за пользователей и выиграл конкурс I just want an agent. Часть 1. Как я научил ИИ собирать ИИ-агентов за пользователей и выиграл конкурс Вайбкодинг спас меня от подрядчиков. А потом я поняла, что сама стала подрядчиком для своих агентов Святой Августин и GAN: почему борьба добра и зла — это генеративная состязательная сеть В каждом QR-коде зашита половина лишней информации. Намеренно Я открываю автомат ключом, меняю рулон бумаги и зарабатываю 180 тысяч в месяц с точки Мастер восстановления. Культура достиженства и выгорание Недельный геймдев: #279 — 24 мая, 2026 Защита от дублирования кода агентами: семантические концепции Frontend Status: свежий дайджест фронтенда и AI — 25.05.2026 Где искать IT-работу кроме HH: подборка платформ 2026 Почему простые числа собираются в спирали? OCR для Data Lakehouse: от Apache Tika к собственному решению на базе Docling Jira — Тьюринг-полная Kubernetes-аудит после Wiz и Prisma: как живут без CNAPP в 2026 «Тестируем MVP в 4 раза быстрее»: как нейросети изменили жизнь предпринимателей На каком стеке и железе работает умное наблюдение в вашем городе: обзор технологий от разработчиков видеоаналитики Как мы ускорили согласования на двух заводах в 24 раза Heartbeat-мониторинг cron-job'ов: dead-man-switch на FastAPI [Перевод] Сегодня нет джуниоров, а в 2031 году не станет и синьоров Профайлер для PostgreSQL: от идеи до работающего MVP за сутки [Перевод] Ограничения размера cookie в ASP.NET Core в продакшене: причины и способы решения Проблема «божественного» Obsidian: почему я отказался от централизованного подхода в работе Лицензии GNU GPL: как пройти проверку Минцифры и заказчика для госзакупок и КИИ Хакатон Samsung IT Academy Hack 2026: как студенты оптимизировали поиск в корпоративном мессенджере Хакатон Samsung IT Academy Hack 2026: как студенты оптимизировали поиск в корпоративном мессенджере MTProxy jumper — делаем автоматическое переключение прокси-серверов Telegram Ты уже используешь агента. Просто не заметил Книжный салон. Послевкусие и благодарности Как отлаживать мини‑приложения в MAX и почему без DevTools это боль Cбор биометрических данных. Как защищается наша биометрия на практике Как запустить учет активов без цифровой свалки: первые 90 дней CGE: визуализация кравлера и скрытых связей между поддоменами Зачем банки тратят миллиарды на науку (спойлер: не благотворительности ради) Книга: «Современный Java Concurrency. Глубокое погружение в Virtual Threads, Structured Concurrency и Scoped Values» Как использовать подписку ChatGPT и Claude в Cursor без оплаты за API токены Специализированная ИСУП или модуль в универсальной платформе: вот в чем вопрос Обход белых списков через WebRTC на стероидах (с поддержкой iOS и десктопа) Регата INFOSTART CIO CAMP: когда команда проверяется не в переговорной, а на воде Пет-проект, который не умер: система бронирования устройств как полигон для AI-разработки Не надо встраивать ИИ в каждую корпоративную систему, это архитектурная ошибка Нейросети для дизайна интерьера: Выбираем лучший ИИ для генерации концептов и планировок квартиры Что там с Ил-114-300 Что такое DAS: как и зачем продукт-менеджеры саботируют запуск новых продуктов 8% компаний измеряют критическое мышление руководителей. Что делают остальные 92% CVE, Shell и побег из контейнера: испытываем возможности PT Cloud Application Firewall Как я научил Алису петь: генерация музыки по голосовой команде Восстановление данных с помощью бесплатной утилиты Easy Disk Checker Как мы построили сквозную аналитику в Power BI Год разработки iOS-игры, 266 тысяч показов и $33: как я делал Vault и почти ничего не заработал Ты прокрастинируешь потому, что избегаешь напрасных усилий, а не чрезмерных нагрузок Я построила диагностику «стоит ли это автоматизировать» — и она трижды говорила глупости. Разбор ошибок Как устроены world models, что показал Google на прошлой неделе и где это меняет gamedev и робототехнику Двухдневная рабочая неделя — будущий стандарт CPU не умер, он просто ждал. Китай строит двухэксафлопсный суперкомпьютер без единого GPU — прорыв, необходимость, фейк? 3Sound: поиск бесплатных звуков для игр больше не боль? 3 Тбит/с по-русски: почему DDoS в 2026 году стал угрозой для любого бизнеса 10 Гбит/с — зачем вам такая скорость передачи данных в облаке Ремонтируем аналоговый XY-самописец Endim 622 [Перевод] IPO компании SpaceX: хорошая попытка, но нет «Ща будет шрифт»: история одного русского embedded‑шрифта Как аквариум на подоконнике превратился в full-stack платформу с AI GiftsHub — из чат-бота в полноценный backend-продукт Пиратство, копирайт и DMCA: как Napster, The Pirate Bay и YouTube изменили закон. Часть II Как найти внутренние резервы для развития предприятия Как один французский чиновник от безысходности начал платил зарплаты картами и практически изобрёл банкноты RAG в энтерпрайзе: почему демо работает, а прод нет AI-агент для финансовых процессов: как мы научили ИИ считать числа из базе данных без галлюцинаций Автопостинг на 8 платформах: архитектура waterfall, custom publisher'ы и API-ловушки Кинетика против бронзы: Почему Голиаф был обречен в дуэли с Давидом [Перевод] Масштабирование LLM: от одного чипа до ЦОДа. Глава 2. Шардинг LLM не работает за вас. Она работает с вами Чем лучше защищает минеральный SPF, тем страшнее он выглядит Стимпанк как часть жизни. История паровых двигателей и место, которое они занимали в мире в XIX-XX веках. Часть 1 Гастарбайтеры ворвались в IT и зарабатывают на рекламе: тут вам не снег лопатой кидать Новые методы и инструменты: как мы обновили курсы по тестированию в Яндекс Практикуме Java 21 в стиле «клятый энтерпрайз» на одноплатном компьютере возрастом 13 лет
От RAG-прототипа к агенту в продакшн: путь по метрикам, а не по моде
smirnoff_ai · 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 или ВК.