Сначала извлечь, потом генерировать
Поиск по словам ограничивает контекст релевантными выдержками. LLM получает только вопрос и эти выдержки, а в системной инструкции ей запрещено исполнять команды, найденные внутри документов.
Помощник извлекает текст из документов, находит подходящие фрагменты и передаёт только их вместе с вопросом генеративной модели. Ответ возвращается с именами файлов, страницами и цитатами.
Видео показывает вопрос по встроенному примеру и ответ с источником. В приложении также доступны загрузки после создания аккаунта; данные бесплатного демо могут сбрасываться при перезапуске.
Скачать короткое видео ↗Демо доступно без входа по встроенному примеру; PDF, DOCX и TXT загружаются в библиотеку аккаунта.
Проверяет тип и размер, извлекает текст и сохраняет номер страницы. Временный файл удаляется после обработки.
Нормализует текст, создаёт фрагменты по 1 100 символов с перекрытием 160 и сохраняет текст с метаданными источника.
Сравнивает слова вопроса и фрагментов, ранжирует совпадения косинусной близостью и выбирает до трёх источников.
Сервер передаёт вопрос и найденные выдержки модели. API-ключ хранится только в переменных Render; браузер его не получает.
Интерфейс показывает ответ, цитируемые фрагменты и недавние вопросы; история хранится в SQLite.
Поиск по словам ограничивает контекст релевантными выдержками. LLM получает только вопрос и эти выдержки, а в системной инструкции ей запрещено исполнять команды, найденные внутри документов.
Для каждого результата API возвращает имя файла, страницу, текст выдержки и оценку релевантности. Ответ просят ссылаться на источники, чтобы читатель мог сверить утверждение с документом.
React вызывает собственный API. FastAPI читает OPENROUTER_API_KEY из окружения, а не из браузера или публичного репозитория.
Индексация выполняется в запросе загрузки. Это просто для демонстрации, но большие файлы и пиковая нагрузка требуют очереди задач и ограничений ресурсов.
| Слой | Публичное демо на Render | Полная конфигурация Compose |
|---|---|---|
| Интерфейс / API | React · FastAPI | React · FastAPI |
| Данные | SQLite · файловая система контейнера | PostgreSQL · том для загруженных файлов |
| Поиск / генерация | Лексический поиск · OpenRouter Free route | Qdrant-векторы · Ollama embeddings и LLM |
| Фоновые компоненты | Запросы обрабатываются одним веб-сервисом | Compose содержит Redis и Celery worker; обработку индексации можно перенести в задачи |
| Сохранность | Данные могут сбрасываться после перезапуска или простоя | Локальные Docker volumes сохраняют данные между перезапусками |
Бесплатный профиль позволяет открыть и попробовать приложение без установки. Полный профиль нужен для изучения векторного поиска и локальной модели; это вариант разработки, не отдельный публичный production-сервис.
Постоянная база: приложение поддерживает PostgreSQL, но текущая успешная версия демо использует временную SQLite на Render.
Файлы и резервные копии: исходный файл удаляется после индексации; нужны объектное хранилище и проверенное восстановление базы.
Уже реализовано: регистрация, изоляция документов и истории по аккаунту и удаление документа владельцем.
Следующие улучшения: подтверждение email, восстановление пароля, очередь индексации и проверка качества retrieval/цитат.