Урок 3. Бот отвечает по вашим документам

Бот из урока 1 знает только то, что знает модель. Этот — отвечает по вашему прайсу, регламенту или инструкции: перед каждым ответом он ищет подходящие куски текста в загруженных файлах и отвечает по ним.

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

Вход
RAG-запрос
База знаний
ИИ-агент
LLM
Выход
  • Исполнение + данные
  • Данные
  • LLM
  • Исполнение + данные + стрим
Поиск идёт перед ответом: Вход отдаёт вопрос в RAG-поиск, база знаний подключена сбоку и задаёт параметры поиска, агент отвечает по найденному.

Шаг 1. Создайте базу знаний

  1. Откройте раздел База знаний и нажмите Новая.

  2. Заполните название и описание — по ним вы потом будете отличать базы друг от друга.

  3. В поле Модель эмбеддингов оставьте модель, выбранную по умолчанию: список открывается на локальной all-MiniLM-L6-v2. Если у вас есть свой ключ облачного провайдера, его модели тоже будут в этом списке — но для урока он не нужен.

  4. Поля Размер фрагмента (по умолчанию 500) и Перекрытие фрагментов (по умолчанию 50) оставьте как есть. Это длина куска текста в символах и то, сколько символов соседние куски делят между собой, чтобы фраза не разрывалась ровно по границе.

  5. Нажмите Создать.

app.iterna.ai

Новая база знаний

Новая база знаний

Создать
Название*
Регламенты
Описание
Прайс, условия доставки, гарантия
Модель эмбеддингов
all-MiniLM-L6-v2 (fast, 384-dim)

Локальная модель, ключ не нужен.

Размер фрагмента
500
Перекрытие фрагментов
50
Три поля внизу — модель, размер фрагмента и перекрытие — задаются один раз и навсегда.

Шаг 2. Загрузите документ и дождитесь готовности

  1. Откройте созданную базу и нажмите Добавить документ.

  2. Либо Загрузить файл — принимаются PDF, DOCX, TXT, MD, — либо URL веб-страницы, тогда платформа сама заберёт текст страницы.

  3. При желании добавьте Метаданные (доступны для жёстких фильтров) — пары ключ/значение вроде раздел = доставка. Они пригодятся позже, когда документов станет много и поиск нужно будет сужать; для урока их можно пропустить.

  4. Дождитесь статуса Готово. Документ проходит путь ОжиданиеОбработкаГотово; при неудаче остаётся Ошибка с текстом причины. Рядом со статусом видно число фрагментов — это и есть нарезанный документ.

Ограничения загрузки на бесплатном тарифе: один файл — до 10 МБ, все документы вместе — до 100 МБ, и не больше 50 000 векторных точек (одна точка = один фрагмент). Формат за пределами PDF, DOCX, TXT, MD отклоняется сразу, до загрузки.

Шаг 3. Соберите граф

Это тот же граф, что в уроке 1, с одной вставкой перед агентом.

  1. Создайте новый воркфлоу (или скопируйте бота из урока 1) и поставьте на холст Вход и Выход.

  2. Перетащите RAG-запрос (раздел AI, группа RAG) и соедините: выход Входа → порт Query этой ноды.

  3. Перетащите База знаний — ноду-конфигурацию — и протяните провод от неё к порту KB ноды RAG-запрос. В её настройках выберите базу из шага 1.

  4. Поставьте ИИ-агент, соедините выход RAG-запрос → вход агента, выход агента → Выход.

  5. Добавьте ноду LLM и подключите к порту LLM агента; выберите модель.

  6. Нажмите Проверить, затем Сохранить.

Почему база знаний висит сбоку, а не в цепочке

База знаний ничего не ищет — это конфигурация. Она отдаёт RAG-запрос четыре значения (какая база, сколько фрагментов вернуть, порог близости, сколько соседних фрагментов приклеить) и выигрывает у одноимённых полей самой ноды поиска. Смысл в том, что одну и ту же ноду базы можно подключить сразу к нескольким потребителям и менять параметры в одном месте. Фильтры по метаданным — единственное исключение: они не заменяют фильтры потребителя, а складываются с ними по И.

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

Шаг 4. Напишите промпт, который требует опоры на найденное

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

Ты отвечаешь на вопросы клиентов по документам компании.

Вопрос: {{ nodes.entry_1.output }}

Найденные фрагменты:
{{ nodes.rag_query_1.output.context }}

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

entry_1 и rag_query_1 — идентификаторы ваших нод: они видны в окне настройки ноды, под её названием, и там же переименовываются. Подставьте свои.

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

Шаг 5. Проверьте на вкладке «Тест»

Вкладка Тест — настоящий запуск, с настоящими списаниями. Задайте три вопроса подряд:

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

Кликните ноду RAG-запрос на холсте вкладки: видно, что именно она нашла. Если фрагменты релевантные, а ответ плохой — виноват промпт. Если фрагменты не те — виноваты параметры поиска или нарезка, и лечить надо их, а не промпт.

Шаг 6. Опубликуйте

Вкладка Публикация → канал Публичный чат → включите переключатель и нажмите Опубликовать версию 1. Дальше всё как в уроке 1: ссылка, отдельный браузер, разговор от лица посетителя. Если бот из урока 1 всё ещё опубликован, снимите его с публикации — на бесплатном тарифе опубликован может быть один воркфлоу.

Сколько это стоит

Эмбеддинги считаются дважды: когда документ загружается в базу и когда задаётся вопрос — запрос тоже нужно превратить в вектор. Тариф по умолчанию — 1 кредит за 10 000 токенов, одинаковый на запись и на чтение.

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

Если не получилось

Что видноПочемуЧто делать
Документ надолго завис в «Обработка»Обработка идёт фоновой задачей внутри процесса API. Если сервер перезапустили в этот момент, файловые документы помечаются ошибкой «загрузите заново», а документы из URL ставятся в очередь сноваОбновите страницу; при статусе «Ошибка» прочитайте её текст и загрузите файл заново
Статус «Готово», но фрагментов 0В файле нет текстового слоя — обычно это PDF-скан или фото страницРаспознайте текст заранее и загрузите TXT/MD или текстовый PDF
Бот отвечает общими словами, документ будто не читалЛибо нода базы знаний не подключена к порту KB ноды поиска, либо промпт не требует опираться на найденноеПроверьте провод в порт KB; добавьте в промпт и вывод фрагментов, и явный запрет отвечать по общим знаниям
«Ничего не найдено», хотя текст в документе точно естьПорог близости отсекает всё: по умолчанию он 0 («ничего не отсекать»), но выставленный вручную 0.7–0.8 режет живые попадания. Второй частый случай — ответ разорван нарезкойВерните порог в 0, поднимите число фрагментов (top_k, до 20) и включите контекстное окно, чтобы к найденному приклеивались соседние фрагменты
Найдено не то, что нужноФрагмент 500 символов режет длинные таблицы и списки посреди строкиСоздайте новую базу с большим размером фрагмента: у существующей его не поменять
В списке моделей эмбеддингов пусто или нет нужнойСписок = каталог платформы плюс модели ваших подключений. Модели облачных провайдеров появляются только вместе с подключением и ключомДля урока берите локальную all-MiniLM-L6-v2 — ей ключ не нужен
Файл не загружаетсяФормат вне PDF/DOCX/TXT/MD, файл больше 10 МБ или база упёрлась в квоту тарифа (100 МБ, 50 000 фрагментов)Разбейте документ на части или удалите ненужные
Запуск отклонёнКончились кредиты: на бесплатном тарифе работа сверх остатка запрещенаНастройки → Использование

Разбор параметров поиска целиком — в «Базах знаний и RAG»; что показывает сам раздел — в «Базе знаний»; общий список симптомов — в «Что делать, если не работает».

Что дальше