Streamlit-приложение для интерактивного обсуждения PDF-документов с помощью LLM через RAG (Retrieval-Augmented Generation) и OpenRouter API.
- Загрузка PDF файлов - поддержка drag-and-drop интерфейса
- Извлечение текста - автоматическая обработка PDF документов
- Векторный поиск - создание эмбеддингов через Course API
- Интеллектуальный чат - ответы на вопросы на основе содержимого PDF
- Множественные LLM модели - выбор между GPT-3.5, Claude 3, DeepSeek и другими
- RAG система - контекстно-зависимые ответы с цитированием источников
# Установка Python пакетов
uv add streamlit PyPDF2 requests scikit-learn numpy openai langchain langchain-community langchain-openai tiktoken chromadb faiss-cpu
# Или через pip
pip install streamlit PyPDF2 requests scikit-learn numpy openai langchain langchain-community langchain-openai tiktoken chromadb faiss-cpuСоздайте файл .env со следующими ключами:
OPENROUTER_API_KEY=your_openrouter_api_key_here
COURSE_API_KEY=your_course_api_key_herestreamlit run app.py --server.port 5000Приложение будет доступно по адресу: http://localhost:5000
├── app.py # Главный файл Streamlit приложения
├── pdf_processor.py # Обработка и извлечение текста из PDF
├── vector_store.py # Векторное хранилище и поиск
├── openrouter_client.py # Клиент для OpenRouter API
├── utils.py # Вспомогательные функции
├── utils2.py # Course API интеграция
├── README.md # Документация проекта
└── .streamlit/
└── config.toml # Конфигурация Streamlit
- Извлечение текста с помощью PyPDF2
- Разбиение на фрагменты по 1000 символов с перекрытием 200 символов
- Очистка и нормализация текста
- Создание эмбеддингов через Course API
- Использование косинусного сходства для поиска
- Хранение векторов в памяти с NumPy
- Поддержка множественных моделей через OpenRouter
- Создание контекстных промптов с найденными фрагментами
- Управление токенами и ограничениями API
- Streamlit интерфейс с drag-and-drop загрузкой
- История чата и управление сессиями
- Отображение статистики и отладочной информации
[server]
headless = true
address = "0.0.0.0"
port = 5000- OpenAI: GPT-4o, GPT-4o Mini, GPT-4 Turbo, GPT-3.5 Turbo
- Anthropic: Claude 3.5 Sonnet, Claude 3 Opus, Claude 3 Haiku
- Google: Gemini Pro 1.5, Gemini Flash 1.5
- Meta: Llama 3.1 405B, Llama 3.1 70B
- Mistral: Mixtral 8x7B
- Qwen: Qwen 2.5 72B
- Загрузка PDF → Пользователь загружает документ
- Извлечение текста → PyPDF2 обрабатывает файл
- Создание фрагментов → Текст разбивается на части
- Векторизация → Course API создает эмбеддинги
- Индексация → Векторы сохраняются для поиска
- Запрос пользователя → Вопрос обрабатывается
- Поиск контекста → Находятся релевантные фрагменты
- Генерация ответа → LLM создает ответ на основе контекста
- API ключи хранятся в переменных окружения
- Валидация размера файлов (максимум 200 МБ)
- Обработка ошибок и исключений
- Безопасная очистка временных файлов
В интерфейсе отображается отладочная информация:
- Количество обработанных фрагментов
- Статус векторного хранилища
- Найденные релевантные фрагменты
- Размер контекста для LLM
Apache License Version 2.0
- Форкните репозиторий
- Создайте ветку для функции (
git checkout -b feature/AmazingFeature) - Зафиксируйте изменения (
git commit -m 'Add some AmazingFeature') - Отправьте в ветку (
git push origin feature/AmazingFeature) - Откройте Pull Request
При возникновении проблем создайте issue в репозитории GitHub.
Создано с ❤️ для удобного изучения документов с помощью ИИ