Когда LLM перестаёт быть чатом и становится backend системой
Недавно проверял, можно ли запускать локальные AI модели на обычном ноутбуке.
После этого возник следующий вопрос "а что происходит когда мы хотим не просто вызвать LLM, а сделать из этого нормальный backend сервис?"
Потому что простой сценарий выглядит красиво: пользователь задал вопрос -> модель ответила.
Но для реального помощника по документации этого мало.
Быстро появляются вопросы:
- откуда модель взяла ответ;
- какие документы попали в контекст;
- какие chunks нашёл retrieval;
- сколько заняли retrieval и generation;
- какой request_id искать в логах;
- что делать, если в документах нет ответа;
- почему после изменения файла RAG всё ещё отвечает по старому индексу.
Cделал небольшой локальный проект на FastAPI + Ollama, чтобы пройти этот путь руками: documents -> chunks -> embeddings -> vector store -> retrieval -> prompt -> answer.
Самое интересное оказалось не в том как вызвать LLM, а в backend обвязке вокруг неё: sources, timings, rebuild index, negative tests, exact-term guard и честный отказ от генерации если контекста нет.
Главный вывод простой: RAG это не магия и не один prompt. Это pipeline, где каждый этап может ошибиться.
Разобрал весь процесс в статье на Хабре: