RAG - это подход, при котором генеративная модель (LLM) формирует ответ не только на основе собственных знаний, но и опираясь на внешние документы, найденные по смыслу.
Проще говоря:
- Retrieval: система ищет в базе знаний релевантные фрагменты (чанки).
- Generation: эти фрагменты передаются в промпт, и LLM формирует точный, фактический ответ.
Благодаря этому модель не “выдумывает” факты и всегда ограничивается предоставленным контекстом.
Этот репозиторий - шаблон минимальной RAG-системы на FastAPI.
Основная идея:
- Через
/uploadвы загружаете текст (любой документ). Он автоматически разбивается на чанки, превращается в векторы и сохраняется в Chroma. - Через
/askотправляете запрос. Система делает семантический поиск по загруженным документам, выбирает наиболее подходящие чанки и подставляет их в промпт OpenAI. - LLM отвечает, используя только предоставленный контекст.
Например, корпоративные инструкции, мануалы или статьи. Ниже — четыре обучающих документа:
{
"doc_id": "postgresql_guide",
"text": "PostgreSQL — это реляционная база данных с открытым исходным кодом. Она поддерживает ACID-транзакции, индексы, триггеры и расширения.\n\nPostgreSQL обладает мощным оптимизатором запросов и подходит как для OLTP, так и для аналитических OLAP-нагрузок.\n\nПопулярные расширения включают PostGIS для геоданных и pg_cron для планирования задач."
}{
"doc_id": "fastapi_guide",
"text": "FastAPI — это современный высокопроизводительный Python-фреймворк для создания API. Он базируется на ASGI и использует Pydantic для валидации данных.\n\nFastAPI автоматически генерирует документацию Swagger и ReDoc и поддерживает асинхронный код.\n\nВысокая производительность достигается благодаря использованию Uvicorn и Starlette."
}{
"doc_id": "docker_guide",
"text": "Docker — это платформа для контейнеризации приложений. Контейнеры позволяют запускать программы изолированно от хостовой системы.\n\nDocker использует образы, которые содержат всё необходимое для запуска приложения, включая зависимости и настройки окружения.\n\nDocker Compose позволяет описывать многоконтейнерные приложения с помощью одного YAML-файла."
}{
"doc_id": "kafka_guide",
"text": "Kafka — распределённая система обмена сообщениями, разработанная в LinkedIn. Она используется для потоковой обработки данных и передачи событий между сервисами.\n\nОсновные сущности Kafka — это топики, партиции и брокеры. Производители публикуют сообщения в топики, а потребители читают их в реальном времени.\n\nKafka отличается высокой пропускной способностью и горизонтальным масштабированием. Она надёжна благодаря репликации данных и механизму подтверждений."
}query = "Что такое kafka"
k = 2
Ответ:
{
"answer": "Kafka — это распределённая система обмена сообщениями, разработанная в LinkedIn, которая используется для потоковой обработки данных и передачи событий между сервисами."
}query = "Что такое rabbitmq"
Ответ:
{
"answer": "Не знаю."
}- Перед запуском создайте файл
.envи укажите в нём вашOPENAI_API_KEY. - Векторное хранилище создаётся локально и автоматически сохраняет загруженные документы.
- Проект можно легко расширить: добавить загрузку PDF, бинарных файлов, историю диалога, агентов и др.