← Все материалы

Гайд

ИИ отвечает по базе знаний: почему одного длинного промпта мало?

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

Обновлено

Открытая книга, страницы документов и лупа над выделенным фрагментом

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

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

Промпт

Создай помощника по базе знаний команды. Отвечай только по доступным пользователю утверждённым материалам. Показывай основания и версию документа, а при нехватке данных честно сообщай об этом. Добавь журнал вопросов без ответа и редакторское обновление источников.

Сначала библиотека, потом генерация

У каждого документа должны быть название, версия, статус и область доступа. «Старая инструкция» полезна для истории, но не должна незаметно участвовать в ответе о действующих правилах. Черновик редактора тоже не равен утверждённому материалу.

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

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

Пример: два похожих тарифа

В библиотеке есть две инструкции. Для тарифа «Команда» экспорт доступен руководителю, для «Личного» такой функции нет. Пользователь спрашивает: «Как выгрузить список участников?» Если модель получила только общий раздел об экспорте, она может дать неверный ответ для его тарифа.

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

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

Почему ссылка на документ ещё недостаточна

Если ответ содержит три утверждения, а источник подтверждает только одно, общая ссылка внизу вводит в заблуждение. Лучше связывать важные выводы с конкретными фрагментами. Тогда пользователь может проверить условие без чтения всей инструкции.

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

Если нужного фрагмента нет, система должна сохранить вопрос в очередь редактора. Это помогает развивать базу по реальному спросу, а не по предположениям о том, что людям когда-нибудь понадобится.

Короткий вызов в Чатиуме

В примере используется Gemini 4 Argon, но поиском и правами управляет приложение. sourceText уже содержит вопрос и отобранные доступные фрагменты с названиями и версиями. Сам вызов не выполняет поиск по вашей базе.

Это фрагмент серверного обработчика Чатиума. ctx передаёт платформа, sourceText содержит проверенный текст из формы. done и failed — заранее зарегистрированные маршруты app.function для результата и ошибки. Они проверяют, что вызов пришёл от приложения start: caller.type === 'plugin' && caller.appSlug === 'start'.

TypeScript
import { startCompletion } from '@start/sdk'

const { completionId } = await startCompletion(ctx, {
  model: 'google/gemini-4-argon',
  system: 'Ответь на вопрос только по переданным фрагментам базы знаний. Укажи основания и версии документов. Учитывай условия. Если сведений недостаточно, не дополняй ответ догадками.',
  messages: [{
    role: 'user',
    content: [{ type: 'text', text: sourceText }],
  }],
  onCompletionCompleted: done,
  onCompletionFailed: failed,
})

Метод возвращает completionId. Сам ответ приходит позже в onCompletionCompleted, ошибка — в onCompletionFailed; до этого приложение показывает ожидание. Это схема вызова, а не полный код приложения.

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

Как проверить первую версию

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

Оценивайте отдельно поиск и генерацию. Если нужный фрагмент не был найден, смена модели может не помочь. Если фрагмент найден правильно, но ответ потерял условие, улучшать нужно инструкцию или модельный шаг.

Частые вопросы

Нужно ли сразу внедрять сложный RAG?

Нет. Для небольшой библиотеки можно начать с понятного поиска и проверяемых фрагментов. Архитектурные варианты разобраны в RAG и длинном контексте.

Можно ли добавить весь архив переписки?

Сначала нужно определить, какие сообщения являются действующими знаниями. Переписка содержит предложения, ошибки и отменённые решения, которые нельзя автоматически считать инструкцией.

Как узнавать, чего не хватает в базе?

По журналу вопросов без достаточного ответа и ручным исправлениям. Из таких наблюдений можно готовить новые материалы FAQ.