У Оруэлла в «Скотном дворе» свинья Наполеон объявляет урожай первоочередной задачей, а молоком, говорит, «займутся». Вот удобное слово: произнёс — и можно расходиться по делам. Ни имени, ни срока, зато слышно, как где-то уже работают. К вечеру молоко исчезает.

Из своих заметок хочется вынуть кое-что определённее: кто делает, что делает, к какому сроку. Автоматизация с ИИ в n8n позволит извлекать эти сведения из свободного текста. Мы соберём ручную цепочку, дадим ей две фразы и получим список задач в JSON. У неназванного срока оставим null. Потом добавим дату в исходник и проверим, как изменился ответ.

Сначала договоримся о результате и доступе

Наш исходник короткий: «Лена готовит план к 6 октября. Борис проверяет макет; срок не назван». Допустим, вы готовите небольшую выставку своих работ: нужно составить план и посмотреть макет приглашения. Лена уже назвала дату. Борис пока взялся за макет.

В обработку передадим только две исходные фразы, без рассказа о выставке. Проверка поместится на одном экране: два человека, два дела, одна названная дата. Макет можно уже крутить перед глазами, а срок его проверки ещё предстоит обсудить. В списке должны сохраниться обе подробности.

Для прохода нужны собственный доступный n8n и API-ключ Mistral. API позволяет одной программе обращаться к модели; обычный чат в браузере этого подключения не заменяет. У n8n есть облачный вариант без установки; выбирайте среду, которая уже доступна вам.

Основной путь ниже рассчитан на готовый API Mistral с активными платежами и выбранным вами бюджетом; расходы модели идут отдельно от доступа к n8n. У провайдера также есть Free mode без банковской карты, с ограничениями использования и частоты запросов. Справка n8n пока описывает подключение с платежами. Перед пробой проверьте свой режим, доступность и лимит: они определяют условия запуска. Ниже используем уже разрешённый собственный API.

Дайте себе помощника до настройки узлов

Откройте DeepSeek в новом чате, вставьте запрос и следующим сообщением — эту инструкцию. Привычный ChatGPT или Claude тоже подойдёт.

Помоги собрать в n8n ручной процесс «Заметка → задачи».
У меня будет один вымышленный текст, модель Mistral и JSON Schema
из инструкции. Сначала уточни мою версию n8n и открыт ли редактор.
Дальше веди по одному действию: что открыть, куда вставить
или что нажать и что должно появиться. Жди моего ответа.
Ключ API я введу только в credential n8n и тебе не передам.
Если шаг не получился, разбери описание или очищенную ошибку.
При различии интерфейса уточни видимые поля и сверь официальную
справку, если доступен поиск; иначе попроси её нужный фрагмент.
Схему и запрос ниже сохрани. Проверяй фактический ответ вместе
со мной по исходнику: людям и действиям; неназванный срок — null.

У помощника в соседней вкладке и модели внутри n8n разные дела. Первый разбирается вместе с вами в кнопках и названиях полей. Вторая получит заметку и заданный формат ответа. Начните хоть с фразы «Редактор открыт, помоги добавить первый узел». Дальше вы сообщаете, что получилось, и получаете следующее действие.

Соберите вход и остановку для пустого текста

В разделе Workflows создайте новый workflow «Заметка → задачи». Добавьте Manual Trigger: он запускает процесс по вашей команде. Соедините его с Edit Fields (Set) и назовите этот узел «Учебный текст». В Mode выберите JSON Output, вставьте:

{
  "text": "Лена готовит план к 6 октября. Борис проверяет макет; срок не назван."
}

Получится один элемент данных, в n8n его называют item, с полем text. В этом поле лежит вся наша заметка, целиком. Мы обрабатываем её одну за запуск. Edit Fields задаёт содержимое поля, модель прочтёт его позже.

После «Учебного текста» добавьте If. Он направит заполненную заметку к модели, а пустой текст остановит. В Conditions выберите тип String. Для левого значения включите Expression и вставьте:

{{ ($json.text || '').trim() }}

Это выражение берёт поле text, а trim() убирает пробелы с краёв. Выберите сравнение is not empty. Выход true позже соедините с Basic LLM Chain. От выхода false проведите связь к Stop And Error. В нём выберите Error Type = Error Message и впишите: «Нет текста: заполните поле text».

Теперь забытая заметка не отправится на торжественную обработку пустоты. Пустая строка и одни пробелы приведут к сообщению «Нет текста…» ещё до модели. Чтобы продолжить, нужно заполнить поле. Назначение ветвей описано в справках If и Stop And Error.

Автоматизация с ИИ в n8n: одно задание для модели

Добавьте Basic LLM Chain и соедините с ним выход true узла If. Основная дорожка получится такой:

Manual Trigger → Учебный текст → If → Basic LLM Chain.

В Chain выберите Prompt = Define below. В поле Prompt (User Message) включите Expression и вставьте весь запрос:

Извлеки из текста только явно названные поручения.
Ответ — объект tasks: массив person/action/deadline.
person — имя из текста.
action — действие из текста без выдуманных деталей.
deadline — срок дословно или null, если срок не назван.
Не придумывай год, ответственного, поручение или срок.
Сохраняй связь каждого действия с человеком.
Если явных поручений нет, tasks=[].
Текст: {{ $json.text }}

Вместо подстановки в последней строке модель получит значение поля text. Задание сохранится для следующего запуска, а исходник вы поменяете в Edit Fields. При проверке можно отдельно открыть, что попросили сделать и какой материал дали. Справка Basic LLM Chain показывает выбор запроса и обработку ответа.

Через разъём Chat Model у Chain добавьте Mistral Cloud Chat Model. В Credential выберите создание нового подключения Mistral Cloud. В своём кабинете Mistral откройте API Keys → Create new key. Скопируйте ключ в поле подключения n8n и сохраните credential. В заметку, запрос и переписку с помощником ключ не входит. Шаги подключения указаны в справке n8n.

В поле Model выберите модель из загрузившегося списка — n8n показывает доступные вашему аккаунту варианты. В Options, если эти поля есть в вашей версии, поставьте Sampling Temperature = 0, Maximum Number of Tokens = 1000, Max Retries = 0, Timeout = 30000 миллисекунд. Это параметры небольшой пробы; результат всё равно будем сверять с заметкой. Значения и единицы описаны у Mistral Cloud Chat Model.

Задайте форму, в которой разрешено «срока нет»

В Chain включите Require Specific Output Format. К появившемуся разъёму Output Parser присоедините Structured Output Parser. Парсер проверит, можно ли разложить ответ по нашим полям.

В нём выберите Schema Type = Define using JSON Schema и вставьте схему целиком:

{
  "type": "object",
  "properties": {
    "tasks": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "person": { "type": "string" },
          "action": { "type": "string" },
          "deadline": { "type": ["string", "null"] }
        },
        "required": ["person", "action", "deadline"],
        "additionalProperties": false
      }
    }
  },
  "required": ["tasks"],
  "additionalProperties": false
}

У каждой задачи обязательны человек, действие и поле срока. Сам срок может быть строкой или null: так записывается отсутствие значения. null пишется без кавычек. Борис с макетом никуда не пропадает; у его дела пока свободно место для даты.

Режим Generate from JSON Example здесь не выбираем: нужные нам два допустимых типа заданы явно. Параметры схемы и особенность подузлов изложены в справке Structured Output Parser.

Парсер проверяет форму. В поле deadline поместится и «когда-нибудь», и «6 октября»: обе записи являются строками. Какая из них была в заметке, выясняется при сравнении. Проверка содержания здесь отделена от проверки устройства ответа: сначала получили пригодные поля, затем прочитали их рядом с исходником.

Найдите срок, которого никто не называл

Нажмите Execute Workflow и дождитесь завершения. Откройте OUTPUT узла Basic LLM Chain в представлении JSON. С подключённым parser в текущей реализации объект возвращается напрямую: ищите верхнее поле tasks. Если старая версия показывает обёртку, раскройте её и посмотрите устройство ответа вместе с помощником.

Ниже — образец для сверки по нашей заметке:

{
  "tasks": [
    {
      "person": "Лена",
      "action": "готовит план",
      "deadline": "6 октября"
    },
    {
      "person": "Борис",
      "action": "проверяет макет",
      "deadline": null
    }
  ]
}

Поставьте рядом свой фактический ответ и исходник. Должно быть две задачи. У Лены остаются план и 6 октября, у Бориса — макет и null без кавычек. Слово "null" в кавычках уже было бы строкой, а нам нужно отсутствие значения. Порядок задач может отличаться, формулировка действия — слегка меняться, но связи человека, дела и срока сохраняются. Год в исходнике отсутствует.

Проверяйте список целиком, потом соберите расхождения в одно сообщение помощнику. Например: «У Бориса появилась дата, хотя в исходнике срок не назван; Лена и её план переданы верно. Вот мой запрос, схема и ответ». Укажите, какие поля уже совпали: так можно исправлять причину и сохранять рабочую часть. Ключ в сообщение не переносите.

Придуманный срок — как будильник, который вам поставили без спроса. Договориться ещё не успели, а он уже звонит, подпрыгивает на столе и требует срочно закончить макет. Увидев null, можно спокойно спросить Бориса о дате. Макет не обязан служить подставкой для чужого будильника.

Проверьте следующую версию и два пустых случая

В «Учебном тексте» замените исходник на «Лена готовит план к 6 октября. Борис проверяет макет к 8 октября». Снова нажмите Execute Workflow. Теперь ждём у Бориса "deadline": "8 октября", а первую задачу сохраняем прежней. В этом проходе дата получила основание: её добавили в заметку вы сами.

После этого сделайте ещё две отдельные пробы. Их удобно сверять по таблице:

Что передать в text Где закончится процесс Что проверить
Исходная заметка, срок Бориса не назван Chain и parser Две задачи, у Бориса null без кавычек
Та же заметка со сроком «к 8 октября» Chain и parser Поменялся срок Бориса, задача Лены сохранилась
Пустая строка или одни пробелы false → Stop And Error Видно сообщение «Нет текста…», Chain не запускался
«Встреча состоялась. Новых поручений нет.» Chain и parser Пустой список tasks=[]

Пустую заметку просто забыли заполнить. В записи без поручений есть новости о встрече, но новых задач нет. Пустой список сохраняет эту подробность. Можно спокойно закончить встречу и разойтись по домам.

Сохраните свой JSON из OUTPUT и скачайте схему: меню workflow с тремя точками → Download. Рядом запишите дату пробы, выбранную модель и результат каждой строки таблицы. Конкретное расхождение тоже оставьте рядом с исходником: «Срок Бориса появился без основания». Когда вернётесь к файлу, сразу будет видно, что проверять.

Перед передачей экспорта обезличьте имя и ID credential; ключ остаётся в подключении. Свои ответы сохраняйте отдельно от примера в статье. Теперь при следующей заметке будет с чем сравнить изменения.

Частые вопросы

Где искать ошибку подключения или ответа?

Откройте узел с ошибкой и прочитайте сообщение. При 401 проверьте свою credential и действительность ключа. При 429 посмотрите лимит и квоту в кабинете провайдера, прекратите повторы до выяснения причины. При ошибке парсера сравните схему с ответом модели и исправьте расхождение. В настройках оставьте On Error = Stop Workflow. Сохранённые запуски видны в Executions, если их сохранение включено; ручную ошибку можно разобрать прямо в редакторе. Справка обработки ошибок описывает эти места.

Можно передать десять заметок сразу?

В этом процессе — один item с одним полем text. Выражения подузлов модели и парсера обращаются к первому item, поэтому для этой пробы заметки запускаем по одной. Пакетная обработка потребует отдельной настройки и проверки соответствия ответов исходникам.

Модель сама выберет, кому написать и куда сохранить задачи?

Здесь у неё фиксированное поручение: извлечь поля из текста. Узлов agent и tool, отправки сообщений и расписания в схеме нет. Результат остаётся в OUTPUT до вашей сверки; для ручных запусков Publish не нужен.

Как превратить принятые задачи в план?

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

У вас осталась своя схема и ответ, сверенный с заметкой: Лена делает план, Борис смотрит макет, одна дата известна, вторую надо уточнить. Когда Борис её назовёт, измените исходник и повторите знакомый проход. В списке появится согласованный срок. Будильник можно будет поставить уже по делу.