Регуляторный ассистент с цитатами вместо догадок

Telegram-бот для продуктолога: медизделия, косметика, таможня. Корпус нормативных актов, SQLite FTS5, LLM без API-ключей.

РегБот: главный экран

Что внутри

Вопрос текстом, ответ по базе знаний с ссылками на первоисточник и предупреждением о дате сборки.

40+

нормативных актов в корпусе

ЕАЭС, РФ, таможня: тексты и манифесты с номерами, датами и редакциями.

Двухступенчатый поиск

LLM превращает вопрос в формальные запросы, FTS5 отдаёт фрагменты, LLM отвечает только из них.

Реестры

/ru и /decl: Росздравнадзор и Росаккредитация, кэш на сутки или прямая ссылка.

Дайджест по понедельникам

RSS отраслевых источников, LLM отбирает важное для продукции.

Доступ по заявке

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

Как устроено

Один процесс long polling, одна база SQLite с полнотекстовым индексом, LLM через подписку ChatGPT.

flowchart TB
  U[Продуктолог в Telegram] --> B[app.bot<br/>long polling, доступ, кнопки]
  B --> S[app.search]
  S --> Q[LLM: вопрос → 2-4 формальных запроса]
  Q --> F[(SQLite FTS5<br/>чанки корпуса)]
  F --> A[LLM: ответ только из фрагментов + ссылки]
  A --> B
  B --> R[app.registries<br/>РЗН · ФСА, кэш 24 ч]
  M[app.monitor, понедельник 08:30] --> RSS[RSS Альта · РЗН] --> D[LLM-дайджест] --> B
  I[app.ingest] --> F
  C[corpus/raw + манифесты] --> I
Python stdlibSQLite FTS5Telegram Bot APICodex CLIRSSlaunchd

Экраны

Настоящие данные; названия компаний и брендов заменены.

Что было сложного

Заказчик не хотел платных ключей

LLM-движок: Codex CLI через подписку ChatGPT, с остыванием при лимитах и честным сообщением, если движок исчерпан.

Галлюцинации по датам и ставкам

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

У реестров нет публичного API

Проверки через LLM-агента были дорогими и ненадёжными; заменены на кэш и прямые ссылки для ручной сверки.