83 lines
4.3 KiB
Markdown
83 lines
4.3 KiB
Markdown
# Paperless + Ollama: поиск по документам Paperless-ngx
|
||
|
||
Скрипт **paperless-ollama-ask.py** позволяет задавать вопросы по документам из Paperless-ngx (контейнер 104) и получать ответы от модели Ollama (обычно на ВМ 200). Работает так: ищет документы по тексту (OCR), собирает выдержки и подставляет их в промпт для локальной LLM.
|
||
|
||
---
|
||
|
||
## Требования
|
||
|
||
- Python 3.9+
|
||
- Запущенный **Paperless-ngx** (см. `container-104.md`) с доступным API
|
||
- Запущенный **Ollama** (обычно на ВМ 200, см. `container-200.md`)
|
||
|
||
Скрипт хранится в репозитории в `homelab/paperless-ollama-ask.py`, документация — в этом файле.
|
||
|
||
---
|
||
|
||
## Переменные окружения
|
||
|
||
| Переменная | Обязательная | По умолчанию | Пример |
|
||
|----------------------|--------------|------------------------|----------------------------------|
|
||
| `PAPERLESS_URL` | да | — | `http://192.168.1.104:8000` |
|
||
| `PAPERLESS_TOKEN` | да | — | токен API из Paperless |
|
||
| `OLLAMA_URL` | нет | `http://localhost:11434` | `http://192.168.1.200:11434` |
|
||
| `OLLAMA_MODEL` | нет | `saiga` | имя модели в Ollama |
|
||
| `PAPERLESS_MAX_DOCS` | нет | `5` | максимум документов в промпте |
|
||
|
||
**PAPERLESS_TOKEN:** берётся в веб-интерфейсе Paperless: профиль пользователя → токен API (см. документацию Paperless-ngx).
|
||
|
||
---
|
||
|
||
## Как это работает
|
||
|
||
1. Скрипт выполняет поиск в Paperless по строке запроса (full-text по OCR).
|
||
2. Берёт до `PAPERLESS_MAX_DOCS` подходящих документов.
|
||
3. Собирает выдержки/полный текст и формирует промпт для модели Ollama.
|
||
4. Отправляет промпт на `OLLAMA_URL` и выводит ответ в stdout.
|
||
|
||
---
|
||
|
||
## Примеры запуска
|
||
|
||
```bash
|
||
cd homelab
|
||
|
||
export PAPERLESS_URL="http://192.168.1.104:8000" # контейнер 104
|
||
export PAPERLESS_TOKEN="твой_токен_из_Paperless"
|
||
|
||
# Если Ollama на ВМ 200:
|
||
export OLLAMA_URL="http://192.168.1.200:11434"
|
||
|
||
# Вопросы по документам
|
||
python3 paperless-ollama-ask.py "номер паспорта?"
|
||
python3 paperless-ollama-ask.py "когда истекает договор?"
|
||
```
|
||
|
||
---
|
||
|
||
## Где запускать
|
||
|
||
- **На ВМ с Ollama (обычно ВМ 200):**
|
||
- `OLLAMA_URL=http://localhost:11434`
|
||
- `PAPERLESS_URL` — адрес контейнера 104 (`http://192.168.1.104:8000` или домен, который проксирует NPM).
|
||
|
||
- **На другой машине (например, твой ноут):**
|
||
- `PAPERLESS_URL` и `OLLAMA_URL` указывают на IP/домены Paperless и Ollama.
|
||
- Учесть доступность портов и фаервол.
|
||
|
||
---
|
||
|
||
## Безопасность и ограничение доступа
|
||
|
||
- **Токен Paperless** даёт доступ к документам — хранить его только в приватных местах (env, .env вне репозитория).
|
||
- **Ollama** обычно слушает на 11434; при пробросе наружу стоит ограничить доступ (файрвол, VPN).
|
||
- Запросы и выдержки из документов уходят в локальную модель; при использовании удалённых/облачных моделей учитывать конфиденциальность.
|
||
|
||
---
|
||
|
||
## Связь с другими документами
|
||
|
||
- [Контейнер 104 (Paperless)](container-104.md) — где крутится Paperless-ngx и какие порты/тома используются.
|
||
- [ВМ 200 (Immich)](container-200.md) — может одновременно работать как хост для Ollama (порт 11434).
|
||
|