ИИ и бизнес-процессы

Бот «Закупкин» — ИИ-ассистент по заявкам на закупку

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

01

Бизнес-задача

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

02

Идея решения

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

03

Технологический стек

Python OpenAI API FastAPI Telegram Bot API Supabase PostgreSQL RAG pgvector pytest VPS
Фитто изучает проект с лупой

Что было сделано

  • Реализован Telegram-бот для оформления товарных и сервисных заявок.
  • Настроено извлечение данных из свободного текста и последовательный сбор недостающей информации.
  • Реализовано сохранение и восстановление черновика заявки.
  • Добавлены изменение данных до регистрации и обязательное подтверждение пользователем.
  • Настроено определение категории через программные правила и LLM по закрытому классификатору.
  • Подключена база знаний из 14 документов и 118 фрагментов.
  • Реализован гибридный RAG-поиск: embeddings + русский полнотекстовый поиск + RRF.
  • Добавлены ответы по внутренним правилам с указанием использованных источников.
  • Реализованы уточнения при недостатке контекста и безопасный отказ для запросов вне области знаний.
  • Добавлены программные проверки критических значений и переходов между состояниями диалога.
  • Проект развёрнут на VPS как постоянно работающий systemd-сервис.
  • Для серверных таблиц Supabase включён Row Level Security.
  • Создан набор автоматических regression-тестов; в процессе разработки их количество выросло до более чем 1300.
Диалог с ботом «Закупкин» и сформированная карточка заявки на закупку

Потенциальная польза

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

Чему я научилась

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