Перейти к содержанию

Ollama и n8n: локальные AI-сводки без отправки данных в облако

Обновлено: 2026-05-30

AI summary: Практический workflow для локальной AI-сводки: принять текст, очистить его, разбить на безопасные фрагменты, отправить в Ollama API, собрать итоговую summary и не выгружать внутренние данные во внешний AI-сервис.
Шаблон для внедрения

Импортируйте workflow, замените credentials и прогоните тестовый payload до включения production.

Проблема: команда хочет автоматизировать сводки писем, заявок или документов, но не может отправлять коммерческие данные в облачные LLM из-за NDA, персональных данных или внутренней политики безопасности.

Решение: использовать n8n как orchestrator и Ollama как локальный AI-runtime: workflow чистит входной текст, режет его на chunks, вызывает локальный `/api/generate`, собирает краткую сводку и пишет audit без лишних персональных данных.

Схема локальной AI-суммаризации через Ollama и n8n
Workflow оставляет чувствительный текст внутри вашей инфраструктуры и возвращает проверяемую summary.

Проблема: почему внутренние тексты нельзя всегда отправлять в облачный AI

Локальная AI-сводка нужна там, где исходный текст нельзя отдавать внешнему провайдеру: коммерческие предложения, обращения клиентов, внутренние отчёты, протоколы встреч или фрагменты базы знаний. Простая интеграция “HTTP Request → облачная модель” решает задачу быстро, но может нарушить правила хранения данных.

Ollama позволяет запускать модели локально, а n8n удобно использовать для маршрутизации, подготовки текста, контроля ошибок и передачи результата в CRM, Telegram или Google Sheets. Такая связка не делает модель магической: нужно контролировать размер текста, таймауты, качество ответа и fallback на ручную обработку.

Архитектура workflow Ollama → n8n для локальной суммаризации

НодаРольЧто проверить
Webhook inputпринимает текст, source_id и режим summaryлимит размера, автор запроса, тип источника
Normalize textудаляет HTML, повторяющиеся пробелы и мусорнет секретов в логах и stack trace
Chunk textрежет длинный текст на фрагментыразмер chunk меньше контекстного окна модели
Call Ollama APIвызывает локальный `/api/generate`base URL, model, timeout, stream=false
Merge summaryсобирает итоговую сводкунет выдуманных фактов, есть action items
Respond / Saveвозвращает JSON или пишет результатсохраняется source_id и audit_key

Для production лучше держать Ollama на отдельной машине или контейнере рядом с n8n, а не на случайном ноутбуке. Так проще контролировать GPU/CPU, доступ к порту `11434` и обновления модели.

Контракт входных данных для локальной AI-сводки

{
  "source_id": "ticket-9831",
  "source_type": "support_thread",
  "language": "ru",
  "summary_mode": "action_items",
  "text": "Клиент просит перенести интеграцию с Google Sheets на Битрикс24, сохранить UTM и убрать дубли по телефону. Нужен срок и оценка."
}

В payload не нужен полный контекст бизнеса. Передавайте только текст, который реально нужен для summary, и стабильный `source_id`, чтобы результат можно было связать с исходным объектом.

Code Node: очистка текста, chunking и prompt для Ollama

const src = $json.body ?? $json;
const text = String(src.text ?? '').replace(/<[^>]*>/g, ' ').replace(/\s+/g, ' ').trim();
if (text.length < 80) throw new Error('Text is too short for useful summary');
if (text.length > 60000) throw new Error('Text is too long: split before workflow');

const maxChunk = 5500;
const chunks = [];
for (let i = 0; i < text.length; i += maxChunk) {
  chunks.push(text.slice(i, i + maxChunk));
}

const prompt = `Сделай краткую деловую сводку на русском. Верни JSON: summary, facts, action_items, risks. Не добавляй факты, которых нет в тексте.\n\nТекст:\n${chunks[0]}`;

return [{
  json: {
    source_id: String(src.source_id ?? 'unknown'),
    source_type: String(src.source_type ?? 'text'),
    model: src.model ?? 'qwen2.5:7b-instruct',
    ollama_body: { model: src.model ?? 'qwen2.5:7b-instruct', prompt, stream: false, options: { temperature: 0.2 } },
    chunk_count: chunks.length,
    audit_key: `ollama-summary:${src.source_id ?? Date.now()}`
  }
}];
Почему stream=false удобнее для автоматизации

Потоковая генерация хороша для интерфейса чата, но workflow проще тестировать и логировать, когда Ollama возвращает один JSON-ответ. Для длинных документов лучше отдельно делать chunking и merge, а не ждать бесконечный stream.

Готовый workflow JSON: скачать и импортировать

Скачать готовый workflow JSON Скачать тестовый payload

{
  "name": "Nodbot - Ollama local AI summary",
  "nodes": [
    {
      "name": "Webhook input",
      "type": "n8n-nodes-base.webhook",
      "purpose": "Принять текст для локальной сводки"
    },
    {
      "name": "Normalize and chunk text",
      "type": "n8n-nodes-base.code",
      "purpose": "Очистить текст и подготовить prompt"
    },
    {
      "name": "Call Ollama generate",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Вызвать локальный Ollama API"
    },
    {
      "name": "Validate summary",
      "type": "n8n-nodes-base.code",
      "purpose": "Проверить JSON и отсутствие пустого ответа"
    },
    {
      "name": "Save audit log",
      "type": "n8n-nodes-base.postgres",
      "purpose": "Сохранить source_id, model и latency"
    },
    {
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "purpose": "Вернуть summary в вызывающую систему"
    }
  ],
  "connections": "Webhook input → Normalize and chunk text → Call Ollama generate → Validate summary → Save audit log → Respond to Webhook"
}

Пошаговая настройка Ollama, n8n и локальной модели

  1. Установите Ollama и скачайте модель, которую реально выдерживает ваш сервер.
  2. Закройте порт `11434` от внешнего интернета и разрешите доступ только n8n.
  3. Импортируйте workflow JSON и замените base URL Ollama, если он отличается от `http://localhost:11434`.
  4. Настройте prompt под ваш тип данных: заявки, письма, отчёты или протоколы.
  5. Добавьте audit log: source_id, model, chunk_count, latency и статус ответа.

Тесты перед production и проверка качества summary

curl -X POST "https://YOUR-N8N-DOMAIN/webhook/ollama-local-ai-summary" \
  -H "Content-Type: application/json" \
  --data @ollama-local-ai-summary-payload.json
  1. Отправьте короткий текст, длинный текст, HTML-письмо и текст с персональными данными.
  2. Проверьте, что модель не добавляет факты, которых нет во входном тексте.
  3. Остановите Ollama и убедитесь, что workflow возвращает контролируемую ошибку.
  4. Проверьте timeout: зависший локальный AI не должен блокировать очередь n8n.
  5. Сравните summary с ручной выжимкой на 10 реальных примерах.

Production-риски локального AI и Ollama API

  • Ollama доступен извне. Локальная приватность теряет смысл, если порт API открыт в интернет.
  • Нет лимита длины. Длинный текст может упасть по timeout или съесть всю память.
  • Модель выдумывает факты. Prompt должен требовать evidence и запрет на добавление отсутствующих данных.
  • Нет fallback. При недоступности Ollama нужна ручная очередь или облачный резерв только для разрешённых данных.
  • Execution logs хранят исходный текст. Настройте политику хранения данных в n8n.

См. также OpenRouter model fallback, GigaChat support draft и Docker Compose для n8n. Официальные документы: Ollama API и n8n HTTP Request.

Карточка результата локальной сводки Ollama в n8n
Итоговая карточка показывает модель, source_id, число chunks и статус проверки.

Критерии готовности

  1. Ollama недоступен из интернета и вызывается только из n8n.
  2. Есть лимиты размера текста, timeout и понятная ошибка при недоступной модели.
  3. Prompt требует JSON, action items и запрет на выдуманные факты.
  4. Audit log хранит source_id/model/status, но не избыточные персональные данные.
  5. Результат проверен на реальных примерах и принят владельцем процесса.
Нужны локальные AI-сводки без утечки данных?

Nodbot настроит Ollama, n8n, Docker, лимиты, prompt-контракт, audit log и интеграцию результата с вашей CRM или базой знаний.

Обсудить локальный AI workflow