Программа для создания общего саммари по содержимому папки с документами различных форматов (PDF, изображения и др.) с поддержкой различных LLM провайдеров (OpenRouter, OpenAI, Anthropic и др.).
- ✅ Обработка PDF файлов (извлечение текста)
- ✅ Обработка изображений с анализом содержимого через vision-модели (PNG, JPG, JPEG, WebP, GIF, BMP)
- ✅ Автоматическое распознавание текста на изображениях
- ✅ Создание общего объединенного саммари всех документов
- ✅ Модульная архитектура для легкого расширения
- ✅ Поддержка переключения между LLM провайдерами (OpenRouter, OpenAI, Anthropic и др.)
- ✅ Поддержка бесплатных моделей через OpenRouter
- Установите зависимости:
pip install -r requirements.txt-
Получите бесплатный API ключ на OpenRouter
-
Создайте файл
.envв корне проекта:
cp .env.example .env- Добавьте ваш API ключ в
.env:
OPENROUTER_API_KEY=your_api_key_here
python main.py docs/python main.py docs/ --api-key YOUR_API_KEYpython main.py docs/ --model "google/gemini-3-flash-preview"python main.py docs/ --vision-model "google/gemini-3-flash-preview"# Использовать OpenRouter (по умолчанию)
python main.py docs/ --provider openrouter
# Использовать OpenAI (требует OPENAI_API_KEY)
python main.py docs/ --provider openai --api-key YOUR_OPENAI_KEY
# Использовать Anthropic (требует ANTHROPIC_API_KEY)
python main.py docs/ --provider anthropic --api-key YOUR_ANTHROPIC_KEYpython main.py docs/ --output results.txtПроект организован модульно для легкого расширения:
.
├── main.py # Точка входа, CLI интерфейс
├── config.py # Конфигурация приложения
├── prompts.py # Промпты для LLM (все на русском языке)
├── summarizer.py # Основной класс для создания саммари
├── llm_providers/ # Модули LLM провайдеров
│ ├── __init__.py
│ ├── base.py # Базовый класс для всех провайдеров
│ ├── factory.py # Фабрика для создания провайдеров
│ └── openrouter.py # Реализация OpenRouter провайдера
├── processors/ # Модули обработки файлов
│ ├── __init__.py
│ ├── base_processor.py # Базовый класс для процессоров
│ ├── pdf_processor.py # Обработка PDF
│ ├── image_processor.py # Обработка изображений
│ └── processor_factory.py # Фабрика процессоров
└── requirements.txt # Зависимости
Система поддерживает легкое переключение между различными LLM провайдерами.
-
Через переменную окружения:
export LLM_PROVIDER=openrouter # или export LLM_PROVIDER=openai
-
Через .env файл:
LLM_PROVIDER=openrouter OPENROUTER_API_KEY=your_key_here -
Через аргумент командной строки:
python main.py docs/ --provider openrouter
Чтобы добавить поддержку нового LLM провайдера:
-
Создайте новый файл в
llm_providers/(например,my_provider.py) -
Наследуйтесь от
BaseLLMProvider:from .base import BaseLLMProvider class MyProvider(BaseLLMProvider): def generate_summary(self, text: str, context: Optional[str] = None) -> str: # Ваша реализация pass def generate_combined_summary(self, summaries: List[Dict[str, str]]) -> str: # Ваша реализация pass def analyze_image(self, image_path: Path) -> str: # Ваша реализация pass
-
Зарегистрируйте провайдер в
llm_providers/factory.py:from .my_provider import MyProvider _providers = { 'openrouter': OpenRouterProvider, 'my_provider': MyProvider, # Добавьте здесь }
-
Добавьте настройки в
config.py(API ключ, URL и т.д.)
- Создайте новый процессор, наследуясь от
BaseProcessor:
from processors.base_processor import BaseProcessor
class MyProcessor(BaseProcessor):
def can_process(self, file_path):
return file_path.suffix == '.myformat'
def extract_text(self, file_path):
# Ваша логика извлечения
return "извлеченный текст"- Зарегистрируйте его в
ProcessorFactoryили черезsummarizer.add_processor()
Все промпты для LLM находятся в файле prompts.py:
SUMMARY_PROMPT_TEMPLATE- шаблон для индивидуальных саммариCOMBINED_SUMMARY_PROMPT_TEMPLATE- шаблон для общего саммариIMAGE_ANALYSIS_PROMPT- промпт для анализа изображений
Для изменения промптов откройте prompts.py и отредактируйте соответствующие шаблоны. Все промпты на русском языке.
- PDF:
.pdf - Изображения:
.png,.jpg,.jpeg,.webp,.gif,.bmp
Основные настройки находятся в config.py:
- Модель по умолчанию
- Максимальный размер файла
- Поддерживаемые форматы
- Параметры LLM (temperature, max_tokens)
- Python 3.8+
- OpenRouter API ключ (бесплатный)
Если вы получаете ошибку No endpoints found for [model_name]:
-
Измените модель в config.py: Откройте
config.pyи измените:DEFAULT_MODEL- для текстовых документовDEFAULT_VISION_MODEL- для анализа изображений
-
Проверьте актуальный список моделей:
- Откройте OpenRouter Models
- Найдите бесплатные модели (они помечены как "Free")
- Для vision-моделей ищите модели с поддержкой "vision" или "multimodal"
- Используйте точное имя модели из списка
-
Проверьте правильность API ключа:
- Ключ должен начинаться с
sk-or-v1- - Убедитесь, что ключ скопирован полностью без пробелов
- Ключ должен начинаться с
-
Попробуйте другую модель через CLI:
python main.py docs/ --model "google/gemini-3-flash-preview" python main.py docs/ --vision-model "google/gemini-3-flash-preview"
- Проверьте правильность API ключа в
.envфайле - Убедитесь, что ключ активен на сайте OpenRouter
- Вы превысили лимит запросов
- Подождите несколько минут и попробуйте снова
- Рассмотрите использование другой модели
Программа теперь поддерживает полноценный анализ изображений через vision-модели OpenRouter:
- Автоматический анализ содержимого - программа описывает, что изображено на картинке
- Распознавание текста - если на изображении есть текст, он будет извлечен и включен в описание
- Поддержка больших изображений - автоматическое масштабирование для оптимизации