Где заканчивается вызов LLM и начинается backend система: локальный RAG на FastAPI и Ollama
На практике хотел понять где заканчивается простой вызов локальной LLM и начинается backend система: с API контрактом, логированием, request_id, источниками, индексом документов, диагностикой и честными ограничениями.Сначала проект выглядел просто: frontend отправляет вопрос, FastAPI принимает POST /ask, backend вызывает локальную модель через Ollama и возвращает ответ. Это уже работало, но стало понятно такой вариант ещё нельзя назвать системой по документации. Модель отвечает, но непонятно на что она опирается, откуда взяла ответ, сколько времени занял каждый этап и что делать если документы изменились.
Локальный RAG без магии: sources, timings, request_id и отказ от генерации
На практике было интересно не просто вызвать локальную LLM из Python а понять, в какой момент такой вызов превращается в backend-систему: с API-контрактом, логами, request_id, источниками ответа, индексом документов, диагностикой и честным отказом отвечать, если данных в документах нет.В этой статье показываю не теорию RAG, а небольшой локальный проект, где хорошо видно, какие инженерные проблемы появляются вокруг LLM:что попадает в prompt;какие sources были найдены;сколько заняли retrieval и generation;когда backend должен не вызывать LLM;почему stale index может давать странное поведение;

