Проект: RAG-система для ювелирных украшений
Интеллектуальная система ответов на вопросы о ювелирных изделиях
Задачи проекта:
- Разработка консольного приложения для ответов на вопросы о ювелирных украшениях
- Извлечение релевантной информации из базы знаний с помощью векторного поиска
- Оптимизация запросов через семантическое кэширование
- Эффективное управление документами и их метаданными
Описание проекта:
RAG-система для ювелирных украшений — это консольное приложение, использующее подход Retrieval-Augmented
Generation для предоставления точных ответов на вопросы о ювелирных изделиях. Система интегрирует большую
языковую модель (LLM) от OpenAI, векторную базу данных FAISS и SQLite для управления документами.
Архитектура решения
Общая архитектура
Система состоит из следующих основных компонентов:
- Консольный интерфейс для взаимодействия с пользователем
- SQLite для хранения текстов и метаданных документов
- FAISS для векторного поиска и семантического кэширования
- OpenAI API для генерации ответов и создания эмбеддингов
- LangChain для интеграции LLM и ретривера
Ключевые компоненты
DocumentStorage (SQLite)
- Хранение полного текста и метаданных документов (путь, хэш, время изменения)
- Отслеживание изменений файлов по хэшу и времени для исключения повторной обработки
- Хранение FAISS chunk ID для точного удаления устаревших данных
VectorDatabase (FAISS)
- Два индекса:
- Основной индекс: хранение эмбеддингов текстовых чанков для поиска
- Семантический кэш: хранение пар "вопрос-ответ" для ускорения обработки
- Поддержка создания и загрузки индексов
- Использование модели BAAI/bge-m3 для эмбеддингов
LangChain
- Интеграция GPT-4o-mini с FAISS-ретривером для генерации ответов
- Использование промпт-шаблонов для структурированных запросов
Unstructured
- Извлечение текста и метаданных из документов (PDF, DOCX, TXT)
Технический стек
- Backend: Python 3.8+
- AI/ML: OpenAI API (GPT-4o-mini), BAAI/bge-m3
- Data Storage: SQLite, FAISS
- Libraries: LangChain, Unstructured, python-dotenv
- Configuration: Environment variables
Особенности реализации
Масштабируемость
- Модульная структура кода
- Поддержка обработки множества документов
- Гибкая настройка параметров поиска
Производительность
- Семантическое кэширование для ускорения ответов
- Ограничение объема возвращаемых данных
- Оптимизация запросов к LLM
Надежность
- Обработка ошибок подключения к базам данных
- Безопасное закрытие соединений
- Валидация входных данных
Поддерживаемость
- Документированный код
- Использование LangChain для упрощения RAG
- Модульная настройка компонентов
Ключевые особенности:
- Точный поиск информации с помощью FAISS
- Оптимизация запросов через семантический кэш
- Возможность работы с большим количеством документов без потери производительности
- Возможность хранить значительные объемы неструктурированной информации
- Эффективное управление документами через SQLite
- Интеграция с OpenAI для качественных ответов
- Поддержка различных форматов документов (PDF, DOCX, TXT)
- Простое консольное меню для индексации и взаимодействия