Skip to content

laricko/rag-fastapi-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RAG Pipeline на FastAPI — минимальный пример

Что такое RAG (Retrieval-Augmented Generation)

RAG - это подход, при котором генеративная модель (LLM) формирует ответ не только на основе собственных знаний, но и опираясь на внешние документы, найденные по смыслу.

Проще говоря:

  1. Retrieval: система ищет в базе знаний релевантные фрагменты (чанки).
  2. Generation: эти фрагменты передаются в промпт, и LLM формирует точный, фактический ответ.

Благодаря этому модель не “выдумывает” факты и всегда ограничивается предоставленным контекстом.


Как устроен этот проект

Этот репозиторий - шаблон минимальной RAG-системы на FastAPI.

Основная идея:

  • Через /upload вы загружаете текст (любой документ). Он автоматически разбивается на чанки, превращается в векторы и сохраняется в Chroma.
  • Через /ask отправляете запрос. Система делает семантический поиск по загруженным документам, выбирает наиболее подходящие чанки и подставляет их в промпт OpenAI.
  • LLM отвечает, используя только предоставленный контекст.

Пример работы

1) Загружаем документы в /upload

Например, корпоративные инструкции, мануалы или статьи. Ниже — четыре обучающих документа:

PostgreSQL

{
  "doc_id": "postgresql_guide",
  "text": "PostgreSQL — это реляционная база данных с открытым исходным кодом. Она поддерживает ACID-транзакции, индексы, триггеры и расширения.\n\nPostgreSQL обладает мощным оптимизатором запросов и подходит как для OLTP, так и для аналитических OLAP-нагрузок.\n\nПопулярные расширения включают PostGIS для геоданных и pg_cron для планирования задач."
}

FastAPI

{
  "doc_id": "fastapi_guide",
  "text": "FastAPI — это современный высокопроизводительный Python-фреймворк для создания API. Он базируется на ASGI и использует Pydantic для валидации данных.\n\nFastAPI автоматически генерирует документацию Swagger и ReDoc и поддерживает асинхронный код.\n\nВысокая производительность достигается благодаря использованию Uvicorn и Starlette."
}

Docker

{
  "doc_id": "docker_guide",
  "text": "Docker — это платформа для контейнеризации приложений. Контейнеры позволяют запускать программы изолированно от хостовой системы.\n\nDocker использует образы, которые содержат всё необходимое для запуска приложения, включая зависимости и настройки окружения.\n\nDocker Compose позволяет описывать многоконтейнерные приложения с помощью одного YAML-файла."
}

Kafka

{
  "doc_id": "kafka_guide",
  "text": "Kafka — распределённая система обмена сообщениями, разработанная в LinkedIn. Она используется для потоковой обработки данных и передачи событий между сервисами.\n\nОсновные сущности Kafka — это топики, партиции и брокеры. Производители публикуют сообщения в топики, а потребители читают их в реальном времени.\n\nKafka отличается высокой пропускной способностью и горизонтальным масштабированием. Она надёжна благодаря репликации данных и механизму подтверждений."
}

2) Выполняем запрос /ask

Пример 1 — информация есть в базе знаний

query = "Что такое kafka"
k = 2

Ответ:

{
  "answer": "Kafka — это распределённая система обмена сообщениями, разработанная в LinkedIn, которая используется для потоковой обработки данных и передачи событий между сервисами."
}

Пример 2 — информация отсутствует в базе

query = "Что такое rabbitmq"

Ответ:

{
  "answer": "Не знаю."
}

📝 Примечания

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

About

simple FAQ document Rag pipeline example with fastapi

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages