Roadmap production ready RAG
Текущая связка PFRAG и RAG уже показывает рабочую архитектуру: подготовка документов отдельно, retrieval и чат отдельно. Но production-ready RAG — это не только LightRAG и красивый endpoint для чата. Нужны устойчивые очереди, миграции, контроль безопасности, наблюдаемость и понятная стратегия масштабирования.
Этот roadmap описывает направления усиления. Это не список уже готовых функций, а план доведения pipeline до более надёжной эксплуатации.
Очереди и фоновые задачи
В PFRAG тяжёлые операции уже вынесены в Celery/Redis: OCR, парсинг сайтов, LLM cleanup, дедупликация, PDF export. В RAG ingestion сейчас описан через BackgroundTask FastAPI. Для production логично привести indexing pipeline к такой же устойчивой модели очередей.
Что стоит сделать:
- вынести ingestion и reindex в Celery/Redis или отдельный worker-контур;
- хранить retry policy и dead-letter сценарии;
- разделить очереди для OCR, LLM cleanup, embeddings и indexing;
- добавить лимиты конкурентности по типу задачи;
- показывать оператору не только статус документа, но и состояние очереди.
Это снизит риск, что тяжёлая индексация будет конкурировать с чат-API за ресурсы.
Auth, security и доступы
В RAG уже есть опциональный Bearer-токен и rate limiting. Для production этого мало, особенно если сервис принимает внешние документы и URL.
Нужны отдельные решения:
- нормальная модель пользователей, ролей и API-ключей;
- ограничение CORS конкретными доменами вместо открытой политики;
- аудит действий: кто загрузил документ, кто удалил, кто запустил reindex;
- секреты через vault или защищённое окружение, а не ручное хранение ключей;
- раздельные права на ingestion, chat, admin и document management.
Security claims здесь лучше формулировать осторожно: roadmap должен описывать, что нужно усилить, а не обещать безопасность без проверки.
SSRF protection для URL-парсинга
PFRAG умеет парсить сайты и скачивать найденные документы. Это полезная функция, но для production она требует строгой защиты от SSRF и связанных рисков.
Что стоит добавить:
- запрет private, loopback и link-local IP;
- DNS rebind checks;
- allowlist/denylist доменов;
- лимиты размера ответа и времени скачивания;
- ограничение типов контента;
- отдельную сетевую зону для crawler worker;
- журналирование всех внешних запросов.
URL-парсер должен рассматриваться как потенциально опасный вход, а не как обычная форма загрузки.
Alembic и миграции
В обоих контурах есть PostgreSQL. Для production нужна воспроизводимая схема миграций, а не неявное создание таблиц при старте.
Roadmap:
- добавить Alembic для PFRAG и RAG backend;
- зафиксировать миграции для документов, промптов, настроек, истории чата и dedup-отчётов;
- разделить миграции и startup приложения;
- добавить проверку версии схемы при запуске;
- описать rollback-процедуры для критичных изменений.
Это особенно важно, если база знаний уже накопила документы и историю.
Monitoring и observability
Healthcheck RAG уже проверяет PostgreSQL, Qdrant и Neo4j. Следующий шаг — полноценная наблюдаемость.
Нужны метрики по нескольким слоям:
- ingestion latency и ошибки индексации;
- размер очередей и время ожидания задач;
- ошибки LLM/embedding providers;
- количество документов по статусам;
- частота query modes и среднее время ответа;
- доля пустых или слабых retrieval-ответов;
- расход внешних LLM API.
Логи должны позволять восстановить путь документа: загрузка, primary, final, dedup, ingestion, query usage.
Re-ranking и metadata filtering
Hybrid retrieval даёт хороший базовый слой, но production-поиск часто требует дополнительной настройки.
Направления развития:
- re-ranking retrieved chunks перед генерацией ответа;
- metadata filtering по источнику, дате, типу документа, проекту или владельцу;
- отдельные namespaces/collections для разных баз знаний;
- тестовые наборы вопросов для сравнения режимов
naive,local,global,hybrid; - ручная разметка плохих ответов и анализ причин.
Важно не добавлять re-ranking вслепую. Сначала нужны наблюдения: какие запросы ломаются, какой контекст возвращается и где теряются нужные документы.
Scaling
Масштабирование RAG pipeline лучше делать по контурам:
- PFRAG workers масштабировать по тяжёлым batch-задачам;
- RAG chat backend масштабировать отдельно от indexing workers;
- Qdrant и Neo4j настраивать под объём индекса и характер запросов;
- PostgreSQL разделить по нагрузке metadata/history и операционным отчётам;
- статические файлы и исходные документы вынести в объектное хранилище.
Такой подход сохраняет главную архитектурную идею: подготовка контента и ответы пользователю не должны мешать друг другу.
Риски внешних LLM API
Оба контура завязаны на внешние LLM или OpenAI-compatible providers: очистка, embeddings, entity extraction и генерация ответа. Это даёт гибкость, но добавляет риски.
Что нужно учитывать:
- rate limits и временные сбои API;
- стоимость повторной обработки больших документов;
- различия в качестве моделей для cleanup и ответа;
- приватность загружаемых документов;
- необходимость retry, backoff и fallback-политик;
- версионирование промптов и моделей, чтобы понимать, чем был обработан документ.
Production-ready версия должна делать эти зависимости явными. Тогда база знаний будет не просто работать на демо, а оставаться управляемой при росте документов, пользователей и источников.