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 в документообороте

Комбинация этих трех инструментов открывает невероятные возможности:

  1. Интеллектуальный помощник — система, которая может отвечать на сложные вопросы о ваших документах
  2. Автоматическая классификация — новые документы автоматически сортируются по нужным категориям
  3. Извлечение структурированных данных — превращение неструктурированных текстов в organized базы данных
  4. Аналитика документов — поиск трендов, аномалий и ключевых изменений в документах
  5. Автоматическая генерация отчетов — создание сводок на основе множества документов

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 предлагает несколько способов добавления документов:

  1. Простой перетаскивание — просто перетащите файлы в интерфейс
  2. Папка наблюдения — настройте папку, в которую будут автоматически добавляться документы
  3. Почта — настройте прием писем с вложениями
  4. Прямое сканирование — можно сканировать документы прямо в систему

Для эффективной работы настройте:

  • Корневые папки — для основной структуры документов (например, "Входящие", "Исходящие", "Архив")
  • Теги — для автоматической классификации (например, "Срочно", "Требуется подпись", "Контракт")
  • Пользовательские поля — для хранения специфичных данных (например, "Номер договора", "Сумма")

Индексация документов для поиска

Качество поиска напрямую зависит от качества индексации. Для лучшей работы:

  1. Оптимизируйте OCR:

    • В настройках выберите нужные языки распознавания
    • Настройте параметры качества для ваших типов документов
  2. Используйте метаданные:

    • Добавляйте теги к документам вручную или автоматически через n8n
    • Заполняйте пользовательские поля
    • Используйте корневые папки для логической организации
  3. Настройте поиск:

    • Включите полнотекстовый поиск в настройках
    • Настройте морфологию для вашего языка
    • Используйте операторы поиска для более точных результатов

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 подключение:

  1. В Paperless-ngx создайте токен API:

    • Зайдите в профиль пользователя
    • Перейдите в раздел "Tokens"
    • Создайте новый токен с нужными правами
  2. В n8n создайте новое подключение:

    • Перейдите в раздел "Credentials" → "Add credential"
    • Выберите "Header Auth"
    • В поле "Name" введите Paperless-ngx API
    • В поле "Name" введите Token
    • В поле "Value" вставьте токен API из Paperless-ngx
  3. Основные эндпоинты 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 — ключевой элемент нашей системы:

  1. Установка Paperless-GPT:

    git clone https://github.com/ks那种朋友/Paperless-GPT.git
    cd Paperless-GPT
    pip install -r requirements.txt
    
  2. Настройка конфигурации: Создайте файл config.py:

    PAPERLESS_URL = "http://localhost:8000"
    PAPERLESS_API_TOKEN = "ваш_токен_api"
    OPENAI_API_KEY = "ваш_ключ_openai"
    OPENAI_MODEL = "gpt-3.5-turbo"
    
  3. Интеграция с n8n:

    • Создайте в n8n вебхук для приема запросов к Paperless-GPT
    • Настройте передачу документов из Paperless-ngx в Paperless-GPT
    • Добавьте обработку результатов

📚 Подробная документация по Paperless-GPT доступна на GitHub репозитории

Настройка для работы с документами

Настройка Paperless-GPT для эффективной работы:

  1. Конфигурация модели:

    # В config.py
    MODEL_SETTINGS = {
        "temperature": 0.3,  # Низкая температура для более точных ответов
        "max_tokens": 1000,  # Максимальная длина ответа
        "top_p": 0.9,
        "frequency_penalty": 0.2
    }
    
  2. Шаблоны для извлечения информации: Создайте файл с шаблонами templates.json:

    {
        "contract_details": {
            "prompt": "Извлеки из следующего текста информацию о договоре: стороны договора, сумма, сроки действия, условия оплаты",
            "fields": ["party1", "party2", "amount", "period", "payment_terms"]
        },
        "invoice_details": {
            "prompt": "Извлеки из следующего текста реквизиты счета: номер, дата, сумма, ИНN поставщика, срок оплаты",
            "fields": ["number", "date", "amount", "inn", "payment_deadline"]
        }
    }
    
  3. Правила обработки: Определите, какие шаблоны применять к какому типу документов:

    DOCUMENT_RULES = {
        "Договор": ["contract_details"],
        "Счет": ["invoice_details"],
        "Акт": ["act_details"]
    }
    

V. Создание системы RAG

Как работает RAG в контексте документов

Теперь соберем все вместе в полноценную систему RAG для документов:

  1. Индексация документов:

    • Документы добавляются в Paperless-ngx через n8n
    • Текст извлекается с помощью OCR
    • Текст разбивается на смысловые фрагменты (chunks)
    • Каждый фрагмент векторизуется и сохраняется в векторную базу данных
  2. Поиск релевантной информации:

    • Когда пользователь задает вопрос, он также векторизуется
    • Система ищет наиболее релевантные фрагменты документов
    • Выбираются 3-5 наиболее подходящих документов
  3. Генерация ответа:

    • Выбранные фрагменты документов и исходный вопрос передаются в языковую модель
    • Модель генерирует ответ на основе этих фрагментов
    • Ответ форматируется и возвращается пользователю

Настройка извлечения информации

Для настройки эффективного извлечения информации:

  1. Векторизация документов:

    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)
    
  2. Хранение в векторной базе: Используйте 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))]
    )
    
  3. Поиск релевантной информации:

    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]
    

Генерация ответов на основе документов

Настройка генерации ответов:

  1. Создание промптов:

    def create_prompt(query, context):
        return f"""Используй следующий контекст из документов, чтобы ответить на вопрос. 
        Если в контексте нет информации для ответа, скажи, что не знаешь.
        
        Контекст:
        {context}
        
        Вопрос: {query}
        
        Ответ:"""
    
  2. Генерация ответа:

    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
    
  3. Интеграция с n8n: Создайте вебхук в n8n, который будет:

    • Принимать вопросы от пользователей
    • Искать релевантные документы
    • Генерировать ответ
    • Возвращать ответ пользователю

VI. Практические применения

Автоматическая обработка запросов

Система может обрабатывать различные типы запросов:

  1. Поиск информации:

    • Запрос пользователя: "Найди все договоры с компанией 'ТехноСофт' за 2023 год"
    • Система: Находит соответствующие документы и извлекает ключевые условия
  2. Проверка условий:

    • Запрос пользователя: "Есть ли в этом договоре пункт о конфиденциальности?"
    • Система: Проверяет документ и указывает на соответствующий раздел
  3. Сравнение документов:

    • Запрос пользователя: "Сравни условия в этом договоре со стандартным"
    • Система: Выделяет различия и сходства между документами

Классификация документов

Автоматическая классификация новых документов:

  1. По типу:

    • Входящий документ: Автоматическое определение как "договор", "счет", "акт", "заявление"
    • Пример: n8n анализирует текст документа и присваивает соответствующий тег
  2. По приоритету:

    • Автоматическое присвоение: Уровня срочности на основе ключевых слов ("срочно", "важно", "для исполнения сегодня")
  3. По отделу:

    • Маршрутизация: Автоматическая отправка документов в соответствующие отделы на основе их содержания

Извлечение ключевой информации

Извлечение структурированной информации:

  1. Данные из договоров:

    • Пример: Система извлекает:
      {
        "parties": ["Компания А", "Компания Б"],
        "amount": "1 500 000 руб.",
        "period": "01.01.2024 - 31.12.2024",
        "payment_terms": "30 дней со дня подписания акта"
      }
      
  2. Данные из счетов:

    • Пример: Извлечение номера счета, суммы, ИНН поставщика, срока оплаты
  3. Данные из заявлений:

    • Пример: Извлечение ФИО, паспортных данных, цели обращения

Ответы на вопросы на основе документов

Система может отвечать на сложные вопросы:

  1. Аналитические вопросы:

    • Запрос: "Как изменились условия наших договоров за последний год?"
    • Ответ: Система анализирует изменения и предоставляет сравнительную таблицу
  2. Прогностические вопросы:

    • Запрос: "Какие риски содержит этот договор?"
    • Ответ: Система анализирует документ и выделяет потенциальные риски
  3. Операционные вопросы:

    • Запрос: "Что мне нужно сделать для закрытия этого проекта?"
    • Ответ: Система находит соответствующие инструкции и выделяет ключевые действия

VII. Оптимизация и масштабирование

Повышение производительности

Для повышения производительности системы:

  1. Оптимизация индексации:

    • Используйте параллельную обработку документов
    • Настройте пакетную обработку документов
    • Используйте кэширование для часто запрашиваемых документов
  2. Оптимизация поиска:

    • Используйте более эффективные метрики похожести
    • Настройте иерархический поиск
    • Оптимизируйте размер фрагментов документов
  3. Оптимизация генерации:

    • Используйте более быстрые языковые модели для предварительных ответов
    • Настройте систему двухэтапной генерации
    • Используйте кэширование ответов на частые вопросы

Обработка больших объемов документов

Для обработки больших объемов документов:

  1. Масштабирование хранилища:

    • Используйте распределенные файловые системы
    • Настройте репликацию данных
    • Используйте шардирование для векторной базы данных
  2. Параллельная обработка:

    • Используйте очереди сообщений (RabbitMQ, Kafka)
    • Настройте worker nodes для распределенной обработки
    • Используйте системы оркестрации (Kubernetes)
  3. Управление ресурсами:

    • Настройте приоритезацию задач
    • Используйте квотирование для пользователей
    • Настройте автоматическое масштабирование

Безопасность и конфиденциальность

Для обеспечения безопасности и конфиденциальности:

  1. Контроль доступа:

    • Настройте детальные права доступа к документам
    • Используйте аутентификацию по двум факторам
    • Реализуйте систему аудита доступа
  2. Шифрование:

    • Используйте шифрование данных в покое
    • Настройте шифрование при передаче
    • Используйте шифрование ключей
  3. Соответствие требованиям:

    • Настройте политику хранения документов
    • Реализуйте автоматическое удаление старых документов
    • Настройте систему резервного копирования

VIII. Заключение

Итоги интеграции

Система на базе n8n, Paperless-ngx и Paperless-GPT представляет собой мощное решение для интеллектуальной обработки документов. Она позволяет:

  • Автоматизировать рутинные задачи обработки документов
  • Предоставлять быстрые ответы на основе документов
  • Извлекать структурированную информацию из неструктурированных данных
  • Повышать эффективность работы с документами

Эта система может быть адаптирована под любые нужды бизнеса и постоянно улучшаться с помощью новых моделей и техник.

Дальнейшие возможности развития

Система может быть расширена следующими возможностями:

  1. Интеграция с другими системами:

    • CRM-системы
    • Системы электронного документооборота
    • Базы знаний компании
  2. Улучшение качества ответов:

    • Использование более продвинутых моделей
    • Реализация мультиагентных систем
    • Добавление возможности самообучения
  3. Расширение функциональности:

    • Автоматическое создание отчетов
    • Анализ трендов в документах
    • Предсказание будущих событий на основе документов

Рекомендации для реализации

При реализации системы RAG для документов:

  1. Начинайте с малого:

    • Реализуйте базовую функциональность
    • Тестируйте на небольшом наборе документов
    • Постепенно расширяйте функциональность
  2. Вовлекайте пользователей:

    • Собирайте обратную связь на каждом этапе
    • Адаптируйте систему под реальные потребности
    • Обучите пользователей эффективному использованию
  3. Постоянно улучшайте систему:

    • Анализируйте запросы пользователей
    • Оптимизируйте производительность
    • Обновляйте модели и инструменты по мере их появления

Система RAG на базе n8n, Paperless-ngx и Paperless-GPT — это мощный инструмент, который может революционизировать работу с документами в вашей организации. Начните с малого, постоянно улучшайте систему, и вы увидите значительный рост эффективности вашей работы с документами!