Переезд в другую страну — это почти всегда стресс, и Польша здесь не исключение. Карта побыту, виза, ZUS, банковский счёт, налоги, нострификация диплома, воссоединение семьи — на каждом шагу возникают десятки вопросов, а ответы разбросаны по форумам, чатам, устаревшим статьям и окошкам ужендов, где на соседних стойках нередко говорят разное. Легко потеряться, легко поверить неверному совету и потерять на этом недели, деньги и нервы. Именно из этого хаоса и вырос наш проект.
Legalka KB — это бесплатный Telegram-бот, который помогает разобраться в релокации в Польшу. В отличие от обычного чат-бота, который на такие вопросы уверенно фантазирует — выдумывает номера счетов, сроки и адреса ужендов, которых не существует, — Legalka KB отвечает строго из верифицированной базы знаний и честно говорит «не знаю», когда ответа в базе нет. Дальше — как именно внутри устроен ИИ, который это обеспечивает.
В основе — RAG (Retrieval-Augmented Generation). Каждая секция каждой страницы базы превращается в вектор моделью text-embedding-3-small и сохраняется в индекс. Когда пользователь задаёт вопрос, он тоже эмбеддится, и система ищет ближайшие по смыслу секции по косинусному сходству. Если пользователь выбрал воеводство, его страницы получают приоритет над общими — чтобы конкретика вроде номера счёта или адреса уженда выигрывала у дженерик-страниц.
Диалог редко состоит из полных вопросов. «А какие документы?», «для этого», «а там?» — такие реплики бессмысленны для поиска в отрыве от контекста. Поэтому короткие и ссылочные вопросы компактная модель gpt-4o-mini переформулирует в самостоятельный запрос с учётом истории диалога и выбранного воеводства: «а какие документы?» после вопроса про ВНЖ по бизнесу превращается в «документы для zezwolenie na pobyt czasowy i pracę, mazowieckie». Так ретривер не теряет нить.
Ответ формирует та же gpt-4o-mini — но только из найденных секций, без «знаний из головы». Каждый факт помечается как «норма» (то, что требует закон) или «практика» — наблюдение заявителей из диаспора-чатов, обязательно с датой актуальности. Если в контексте есть конкретные данные — номер счёта, сумма, адрес — бот выдаёт их прямо, а не отсылает «уточните в уженде», и добавляет официальные ссылки для самостоятельной проверки. Отвечает на языке вопроса — русском, украинском, польском или английском, — переводя факты из русскоязычной базы. А если релевантность найденного ниже порога, честно говорит «не знаю» вместо догадок.
Важная оговорка: Legalka KB — это не юридическая консультация, а собранные и структурированные данные. Даже когда бот отвечает уверенно и со ссылками, это не заменяет проверку: лишний раз перейдите по предоставленным официальным ссылкам и убедитесь сами. Правила меняются, детали зависят от конкретного случая, и окончательное слово всегда за ужендом.
Вопрос можно не печатать, а надиктовать. Голосовое сообщение из Telegram распознаёт модель whisper-1 с языковым хинтом для точности, бот эхом показывает распознанный текст и обрабатывает его через тот же RAG. Работает и обратное направление: под каждым ответом есть кнопка «Прочитать вслух» — текст очищается от разметки, ссылок и дисклеймера и озвучивается моделью tts-1.
Практический слой базы наполняется полуавтоматически. Отдельный LangGraph-пайплайн батчами обрабатывает экспорты Telegram-каналов и чатов диаспоры: на сегодня через него прошло около 2,4 млн сообщений, из которых 28 091 признано релевантными, а из них извлечено 17 284 практических факта. Извлечением занимается gpt-4o-mini — только обезличенные факты, без имён, ников и цитат. Дальше — fail-closed фильтр PII: regex по контактам, номерам документов и длинным цитатам, опционально второй проход через LLM; любой «грязный» факт отбрасывается без сохранения. Наконец классификатор раскладывает факты по 16 тематическим вертикалям (pobyt, praca, banki, podatki, ZUS и другим) — батчинг здесь снизил долю «мусорной» категории с 51% до 23%.
Куратор базы редактирует страницы через дашборд с ИИ-агентом — тоже на LangGraph. Агент сначала понимает намерение (вопрос о странице или просьба отредактировать), строит минимальный план правки с учётом истории диалога и переписывает только тело страницы, не трогая метаданные. Выдумывать факты ему запрещено: вместо этого он вставляет пометку, что нужен источник. После правки — валидация: не пропали ли секции, не срезалось ли тело; если потеряно больше 15%, до двух повторов, затем откат без записи файла.
Качество ответов измеряется, а не предполагается. LLM-судья прогоняет набор golden-QA и проверяет две вещи: передал ли ответ суть ожидаемых фактов (по смыслу, не дословно) и не утверждает ли он запрещённого как факт. Текущие метрики — цитируемость ~99%, покрытие фактов ~97%, воздержание (abstention) 100%.
Ничего из этого не привязано к одному вендору. Все модели — эмбеддинги, генерация, распознавание и синтез речи — заменяемы на локальные (Ollama, LM Studio) через одну переменную OPENAI_BASE_URL, а код остаётся единым. Для чувствительных данных о релокации это значит, что весь стек можно поднять на собственном сервере. Нужен похожий RAG-ассистент, который отвечает из ваших данных и не фантазирует? Напишите нам: [email protected].
Попробовать бот можно прямо в Telegram и бесплатно — @legalka_pl_bot. А ниже — сводка: какая модель отвечает за какую задачу.
| Задача | Model |
|---|---|
| Индексация базы знаний | text-embedding-3-small |
| Поиск по базе (ретривер) | text-embedding-3-small |
| Переформулирование вопросов | gpt-4o-mini |
| Ответ пользователю | gpt-4o-mini |
| Голосовой ввод (STT) | whisper-1 |
| Озвучивание ответов (TTS) | tts-1 |
| Извлечение практических фактов | gpt-4o-mini |
| PII-проверка (опционально) | gpt-4o-mini |
| Классификация тем | gpt-4o-mini |
| Определение намерения | gpt-4o-mini |
| Ревизия страниц базы | gpt-4o-mini |
| Eval-судья | gpt-4o-mini |