n8n + Paperless-ngx + Paperless-GPT: Создание системы RAG для документов
Полное руководство по созданию системы Retrieval-Augmented Generation (RAG) для ваших документов с использованием n8n, Paperless-ngx и Paperless-GPT. Узнайте, как автоматизировать обработку и извлечение информации.
n8n + Paperless-ngx + Paperless-GPT для добавления RAG к вашим документам!
I. Введение
Что такое RAG и почему он важен для обработки документов
Представьте, что вы можете спросить свой архив документов: "Найди все контракты с клиентом X, заключенные в прошлом году, и покажи пункты об условиях оплаты", и получить не просто список файлов, а структурированный ответ с выжимкой ключевых моментов. Звучит как фантастика? С технологией Retrieval-Augmented Generation (RAG) это уже реальность!
RAG — это революционный подход, который объединяет два мощных инструмента: поиск релевантной информации и генерацию текста на основе этой информации. Вместо того чтобы полагаться на "голое" знание ИИ, мы даем ему доступ к нашим документам, гарантируя, что ответы будут основаны на реальных данных.
Зачем это нужно в мире документов? Ответ прост:
- Время — сокращение времени поиска нужной информации с часов до минут
- Точность — устранение "галлюцинаций" ИИ, которые могут привести к серьезным ошибкам
- Автоматизация — освобождение сотрудников от рутинных задач по обработке документов
- Прозрачность — возможность отследить, на основе каких документов был сгенерирован ответ
Обзор инструментов: n8n, Paperless-ngx, Paperless-GPT
Paperless-ngx — это не просто еще одна система хранения документов. Это полноценный архив с умным поиском. Paperless-ngx автоматически распознает текст в отсканированных документах с помощью OCR, позволяет добавлять теги, метаданные и организовывать документы в структуру. Он превращает вашу пачку бумаг в полностью цифровую, searchable базу знаний.
n8n — это как конструктор LEGO для автоматизации. С помощью этого инструмента вы можете создавать сложные рабочие процессы, соединяя различные сервисы и API. n8n работает по принципу "узлов" — каждый узел выполняет конкретное действие, и вы соединяете их в логические цепочки. Это позволяет автоматизировать практически любую задачу обработки документов.
Paperless-GPT — это "мозг", который превращает хранящиеся в Paperless-ngx документы в интерактивный источник знаний. Этот инструмент использует мощь языковых моделей (таких как GPT) для понимания содержания документов, ответов на вопросы и извлечения конкретной информации.
Потенциальные применения RAG в документообороте
Комбинация этих трех инструментов открывает невероятные возможности:
- Интеллектуальный помощник — система, которая может отвечать на сложные вопросы о ваших документах
- Автоматическая классификация — новые документы автоматически сортируются по нужным категориям
- Извлечение структурированных данных — превращение неструктурированных текстов в organized базы данных
- Аналитика документов — поиск трендов, аномалий и ключевых изменений в документах
- Автоматическая генерация отчетов — создание сводок на основе множества документов
II. Настройка Paperless-ngx
Установка и базовая настройка
Начнем с установки Paperless-ngx. Самый простой способ — использовать Docker Compose. Создайте файл docker-compose.yml со следующим содержанием:
version: '3.8'
services:
paperless-ngx:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
container_name: paperless-ngx
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- ./data:/usr/src/paperless/data
- ./media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
environment:
- PAPERLESS_TIME_ZONE=Europe/Moscow
- PAPERLESS_OCR_LANGUAGE=rus+eng
- PAPERLESS_ADMIN_USER=admin
- PAPERLESS_ADMIN_PASSWORD=your_secure_password
- PAPERLESS_SECRET_KEY=your_secret_key_here
После запуска с помощью docker-compose up -d Paperless-ngx будет доступен по адресу http://localhost:8000.
В веб-интерфейсе завершите первоначальную настройку:
- Создайте администратора с надежным паролем
- Настройте параметры OCR (не забудьте включить русский и английский языки)
- Подключите PostgreSQL для более надежной работы с данными (рекомендуется)
📚 Полное руководство по установке Paperless-ngx доступно на официальном сайте
Настройка сканирования и импорта документов
Paperless-ngx предлагает несколько способов добавления документов:
- Простой перетаскивание — просто перетащите файлы в интерфейс
- Папка наблюдения — настройте папку, в которую будут автоматически добавляться документы
- Почта — настройте прием писем с вложениями
- Прямое сканирование — можно сканировать документы прямо в систему
Для эффективной работы настройте:
- Корневые папки — для основной структуры документов (например, "Входящие", "Исходящие", "Архив")
- Теги — для автоматической классификации (например, "Срочно", "Требуется подпись", "Контракт")
- Пользовательские поля — для хранения специфичных данных (например, "Номер договора", "Сумма")
Индексация документов для поиска
Качество поиска напрямую зависит от качества индексации. Для лучшей работы:
-
Оптимизируйте OCR:
- В настройках выберите нужные языки распознавания
- Настройте параметры качества для ваших типов документов
-
Используйте метаданные:
- Добавляйте теги к документам вручную или автоматически через n8n
- Заполняйте пользовательские поля
- Используйте корневые папки для логической организации
-
Настройте поиск:
- Включите полнотекстовый поиск в настройках
- Настройте морфологию для вашего языка
- Используйте операторы поиска для более точных результатов
III. Интеграция n8n в систему
Установка n8n
Установка n8n еще проще, чем Paperless-ngx. Используйте Docker Compose:
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=your_password
volumes:
- ./data:/home/node/.n8n
Запустите с помощью docker-compose up -d и зайдите в интерфейс по адресу http://localhost:5678.
Настройка подключения к Paperless-ngx API
Чтобы n8n мог работать с Paperless-ngx, нам нужно настроить API подключение:
-
В Paperless-ngx создайте токен API:
- Зайдите в профиль пользователя
- Перейдите в раздел "Tokens"
- Создайте новый токен с нужными правами
-
В n8n создайте новое подключение:
- Перейдите в раздел "Credentials" → "Add credential"
- Выберите "Header Auth"
- В поле "Name" введите
Paperless-ngx API - В поле "Name" введите
Token - В поле "Value" вставьте токен API из Paperless-ngx
-
Основные эндпоинты Paperless-ngx API:
GET /api/documents/— получение списка документовPOST /api/documents/— создание нового документаGET /api/documents/{id}/— получение информации о документеGET /api/tags/— получение списка теговPOST /api/tags/— создание нового тега
Создание рабочих процессов для автоматизации
Теперь самое интересное — создадим полезные автоматизации:
1. Автоматическая обработка новых документов:
[Триггер: Новый документ в Paperless-ngx]
→ [Извлечь текст документа]
→ [Классифицировать по ключевым словам]
→ [Присвоить соответствующие теги]
→ [Отправить уведомление в Slack]
2. Регулярный бэкап:
[Триггер: По расписанию (каждые 24 часа)]
→ [Выбрать документы, созданные за день]
→ [Экспортировать в ZIP]
→ [Сохранить в облачное хранилище]
→ [Отправить отчет о бэкапе]
3. Обработка входящих писем:
[Триггер: Новое письмо в папке]
→ [Проверить наличие вложений]
→ [Загрузить вложения в Paperless-ngx]
→ [Присвоить тег "Входящие"]
→ [Отправить подтверждение отправителю]
Пример ноды для загрузки документа в Paperless-ngx:
{
"operation": "paperlessngx.createDocument",
"parameters": {
"title": "Договор от {{ $now }}",
"file": "/path/to/document.pdf",
"tags": ["Контракт", "Новый"],
"correspondent": "Компания X",
"document_type": "Договор"
}
}
IV. Добавление Paperless-GPT
Что такое Paperless-GPT
Paperless-GPT — это мост между вашими документами и мощью языковых моделей. Это дополнение для Paperless-ngx, которое позволяет:
- Задавать вопросы документам на естественном языке
- Извлекать структурированную информацию (даты, суммы, имена)
- Сравнивать несколько документов
- Генерировать ответы на основе содержимого
- Автоматически создавать краткие содержания
В отличие от простого поиска, Paperless-GPT понимает контекст и может отвечать на сложные вопросы, требующие анализа нескольких документов.
Интеграция с Paperless-ngx
Интеграция Paperless-GPT с Paperless-ngx — ключевой элемент нашей системы:
-
Установка Paperless-GPT:
git clone https://github.com/ks那种朋友/Paperless-GPT.git cd Paperless-GPT pip install -r requirements.txt -
Настройка конфигурации: Создайте файл
config.py:PAPERLESS_URL = "http://localhost:8000" PAPERLESS_API_TOKEN = "ваш_токен_api" OPENAI_API_KEY = "ваш_ключ_openai" OPENAI_MODEL = "gpt-3.5-turbo" -
Интеграция с n8n:
- Создайте в n8n вебхук для приема запросов к Paperless-GPT
- Настройте передачу документов из Paperless-ngx в Paperless-GPT
- Добавьте обработку результатов
📚 Подробная документация по Paperless-GPT доступна на GitHub репозитории
Настройка для работы с документами
Настройка Paperless-GPT для эффективной работы:
-
Конфигурация модели:
# В config.py MODEL_SETTINGS = { "temperature": 0.3, # Низкая температура для более точных ответов "max_tokens": 1000, # Максимальная длина ответа "top_p": 0.9, "frequency_penalty": 0.2 } -
Шаблоны для извлечения информации: Создайте файл с шаблонами
templates.json:{ "contract_details": { "prompt": "Извлеки из следующего текста информацию о договоре: стороны договора, сумма, сроки действия, условия оплаты", "fields": ["party1", "party2", "amount", "period", "payment_terms"] }, "invoice_details": { "prompt": "Извлеки из следующего текста реквизиты счета: номер, дата, сумма, ИНN поставщика, срок оплаты", "fields": ["number", "date", "amount", "inn", "payment_deadline"] } } -
Правила обработки: Определите, какие шаблоны применять к какому типу документов:
DOCUMENT_RULES = { "Договор": ["contract_details"], "Счет": ["invoice_details"], "Акт": ["act_details"] }
V. Создание системы RAG
Как работает RAG в контексте документов
Теперь соберем все вместе в полноценную систему RAG для документов:
-
Индексация документов:
- Документы добавляются в Paperless-ngx через n8n
- Текст извлекается с помощью OCR
- Текст разбивается на смысловые фрагменты (chunks)
- Каждый фрагмент векторизуется и сохраняется в векторную базу данных
-
Поиск релевантной информации:
- Когда пользователь задает вопрос, он также векторизуется
- Система ищет наиболее релевантные фрагменты документов
- Выбираются 3-5 наиболее подходящих документов
-
Генерация ответа:
- Выбранные фрагменты документов и исходный вопрос передаются в языковую модель
- Модель генерирует ответ на основе этих фрагментов
- Ответ форматируется и возвращается пользователю
Настройка извлечения информации
Для настройки эффективного извлечения информации:
-
Векторизация документов:
from sentence_transformers import SentenceTransformer model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2') # Разбиение текста на фрагменты def chunk_text(text, chunk_size=500): words = text.split() return [' '.join(words[i:i+chunk_size]) for i in range(0, len(words), chunk_size)] # Векторизация фрагментов def embed_chunks(chunks): return model.encode(chunks) -
Хранение в векторной базе: Используйте ChromaDB для хранения векторов:
import chromadb client = chromadb.Client() collection = client.create_collection("documents") # Добавление документов в базу collection.add( embeddings=embeddings, documents=chunks, metadatas=[{"doc_id": doc_id, "page": page} for page in range(len(chunks))] ) -
Поиск релевантной информации:
def search_relevant(query, top_k=3): # Векторизация запроса query_embedding = model.encode([query]) # Поиск в векторной базе results = collection.query( query_embeddings=query_embedding, n_results=top_k ) return results['documents'][0]
Генерация ответов на основе документов
Настройка генерации ответов:
-
Создание промптов:
def create_prompt(query, context): return f"""Используй следующий контекст из документов, чтобы ответить на вопрос. Если в контексте нет информации для ответа, скажи, что не знаешь. Контекст: {context} Вопрос: {query} Ответ:""" -
Генерация ответа:
from openai import OpenAI client = OpenAI(api_key="your_api_key") def generate_answer(query, context): prompt = create_prompt(query, context) response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], temperature=0.3 ) return response.choices[0].message.content -
Интеграция с n8n: Создайте вебхук в n8n, который будет:
- Принимать вопросы от пользователей
- Искать релевантные документы
- Генерировать ответ
- Возвращать ответ пользователю
VI. Практические применения
Автоматическая обработка запросов
Система может обрабатывать различные типы запросов:
-
Поиск информации:
- Запрос пользователя: "Найди все договоры с компанией 'ТехноСофт' за 2023 год"
- Система: Находит соответствующие документы и извлекает ключевые условия
-
Проверка условий:
- Запрос пользователя: "Есть ли в этом договоре пункт о конфиденциальности?"
- Система: Проверяет документ и указывает на соответствующий раздел
-
Сравнение документов:
- Запрос пользователя: "Сравни условия в этом договоре со стандартным"
- Система: Выделяет различия и сходства между документами
Классификация документов
Автоматическая классификация новых документов:
-
По типу:
- Входящий документ: Автоматическое определение как "договор", "счет", "акт", "заявление"
- Пример: n8n анализирует текст документа и присваивает соответствующий тег
-
По приоритету:
- Автоматическое присвоение: Уровня срочности на основе ключевых слов ("срочно", "важно", "для исполнения сегодня")
-
По отделу:
- Маршрутизация: Автоматическая отправка документов в соответствующие отделы на основе их содержания
Извлечение ключевой информации
Извлечение структурированной информации:
-
Данные из договоров:
- Пример: Система извлекает:
{ "parties": ["Компания А", "Компания Б"], "amount": "1 500 000 руб.", "period": "01.01.2024 - 31.12.2024", "payment_terms": "30 дней со дня подписания акта" }
- Пример: Система извлекает:
-
Данные из счетов:
- Пример: Извлечение номера счета, суммы, ИНН поставщика, срока оплаты
-
Данные из заявлений:
- Пример: Извлечение ФИО, паспортных данных, цели обращения
Ответы на вопросы на основе документов
Система может отвечать на сложные вопросы:
-
Аналитические вопросы:
- Запрос: "Как изменились условия наших договоров за последний год?"
- Ответ: Система анализирует изменения и предоставляет сравнительную таблицу
-
Прогностические вопросы:
- Запрос: "Какие риски содержит этот договор?"
- Ответ: Система анализирует документ и выделяет потенциальные риски
-
Операционные вопросы:
- Запрос: "Что мне нужно сделать для закрытия этого проекта?"
- Ответ: Система находит соответствующие инструкции и выделяет ключевые действия
VII. Оптимизация и масштабирование
Повышение производительности
Для повышения производительности системы:
-
Оптимизация индексации:
- Используйте параллельную обработку документов
- Настройте пакетную обработку документов
- Используйте кэширование для часто запрашиваемых документов
-
Оптимизация поиска:
- Используйте более эффективные метрики похожести
- Настройте иерархический поиск
- Оптимизируйте размер фрагментов документов
-
Оптимизация генерации:
- Используйте более быстрые языковые модели для предварительных ответов
- Настройте систему двухэтапной генерации
- Используйте кэширование ответов на частые вопросы
Обработка больших объемов документов
Для обработки больших объемов документов:
-
Масштабирование хранилища:
- Используйте распределенные файловые системы
- Настройте репликацию данных
- Используйте шардирование для векторной базы данных
-
Параллельная обработка:
- Используйте очереди сообщений (RabbitMQ, Kafka)
- Настройте worker nodes для распределенной обработки
- Используйте системы оркестрации (Kubernetes)
-
Управление ресурсами:
- Настройте приоритезацию задач
- Используйте квотирование для пользователей
- Настройте автоматическое масштабирование
Безопасность и конфиденциальность
Для обеспечения безопасности и конфиденциальности:
-
Контроль доступа:
- Настройте детальные права доступа к документам
- Используйте аутентификацию по двум факторам
- Реализуйте систему аудита доступа
-
Шифрование:
- Используйте шифрование данных в покое
- Настройте шифрование при передаче
- Используйте шифрование ключей
-
Соответствие требованиям:
- Настройте политику хранения документов
- Реализуйте автоматическое удаление старых документов
- Настройте систему резервного копирования
VIII. Заключение
Итоги интеграции
Система на базе n8n, Paperless-ngx и Paperless-GPT представляет собой мощное решение для интеллектуальной обработки документов. Она позволяет:
- Автоматизировать рутинные задачи обработки документов
- Предоставлять быстрые ответы на основе документов
- Извлекать структурированную информацию из неструктурированных данных
- Повышать эффективность работы с документами
Эта система может быть адаптирована под любые нужды бизнеса и постоянно улучшаться с помощью новых моделей и техник.
Дальнейшие возможности развития
Система может быть расширена следующими возможностями:
-
Интеграция с другими системами:
- CRM-системы
- Системы электронного документооборота
- Базы знаний компании
-
Улучшение качества ответов:
- Использование более продвинутых моделей
- Реализация мультиагентных систем
- Добавление возможности самообучения
-
Расширение функциональности:
- Автоматическое создание отчетов
- Анализ трендов в документах
- Предсказание будущих событий на основе документов
Рекомендации для реализации
При реализации системы RAG для документов:
-
Начинайте с малого:
- Реализуйте базовую функциональность
- Тестируйте на небольшом наборе документов
- Постепенно расширяйте функциональность
-
Вовлекайте пользователей:
- Собирайте обратную связь на каждом этапе
- Адаптируйте систему под реальные потребности
- Обучите пользователей эффективному использованию
-
Постоянно улучшайте систему:
- Анализируйте запросы пользователей
- Оптимизируйте производительность
- Обновляйте модели и инструменты по мере их появления
Система RAG на базе n8n, Paperless-ngx и Paperless-GPT — это мощный инструмент, который может революционизировать работу с документами в вашей организации. Начните с малого, постоянно улучшайте систему, и вы увидите значительный рост эффективности вашей работы с документами!