200 OK, но клиент молчит: три бага n8n-агента из production
Ровно через 20 дней после закрытия первого бага появился второй. На этот раз виновата не LLM, а слои вокруг: невидимые символы, проверки валидации и отключённые чекбоксы в конфигурации. Три разные природы багов: • **Служебные теги вместо ответа**: модель GLM отвечает только `[VERDICT:…] [TASK:NONE]`, валидатор пропускает как валидный контент, Format Response вырезает теги, клиенту остаётся `\n\n \n` • **Лимит Meta 1000 байт**: анкета на русском (имя, дата, сфера, телефон) занимает 1030 байт — одна буква 2 байта, эмодзи 3–4, API падает с Bad request • **Каталог вместо выборки**: Schema Type не задан, n8n вывел схему из схемы вместо примера, поле category оказалось на дне, инструмент возвращает весь ассортимент
AI-обработка оригинала Habr AI; редакция Hamidun News
Это вторая история про ИИ-агента в production. 20 дней назад я закрыл баг Reasoning Lock: модель тратила токены на скрытые мысли, отправляла пустую строку клиенту, хотя статус был успех. Добавил валидатор пустого ответа и телеметрию. Написал: «лог пуст — слои работают». Лог молчал 20 дней. Потом менеджеры прислали новые жалобы через заказчика: клиент пишет в Директ, агент молчит. Но на этот раз виновата не LLM.
Архитектура проекта: n8n-агент работает в production для ателье украшений. По ночам принимает заявки в НЕЛЬЗЯgram Direct, ведёт диалог, собирает анкету (имя, дата рождения, сфера, телефон), создаёт сделку в amoCRM. Стек: n8n (self-hosted) + Redis (память диалогов, TTL 30 дней) + LangChain. LLM сменилась: вместо DeepSeek V4 Pro теперь z-ai/glm-5.3-flash через OpenRouter, резервная qwen/qwen3.8-flash. Workflow вырос с 64 до 88 нод, реализована обработка комментариев и логика ретраев.
Баг 1: Служебные теги протокола вместо человеческого ответа
Открыл executions — чистота. Ни одного упавшего прогона. Гипотеза «Reasoning Lock повторился» отпадает: модель отвечает и шустро. Единственный след в amoCRM: клиентка ответила «Да» в 20:06 на подтверждение заказа (20:02), потом только запись в MESSENGER-ID, в директе тишина.
Открыл карточку OpenRouter: 871 token completion, из них 766 reasoning — остаток 105 видимых токенов. По объёму это служебные теги протокола: `[VERDICT:ORDER:DATA|HOT] [NEED_MANAGER_CALL] [STAGE:PERSONAL]`
Модель GLM ответила. По протоколу. Ни одного человеческого слова. DeepSeek 4.0 PRO замыкался в себе, GLM оказался примерным отличником: человеческий текст не положен — сдаёт форму.
Валидатор не поймал, потому что проверяет на пустоту (output непустой — pass). Инвариант «пустой content + потраченные токены + finish_reason stop ≠ успех» тоже отказал: токены потрачены (да), finish_reason stop (да), content непустой (да). Проверял отсутствие пустоты, а не наличие человеческого текста.
Дальше нода Format Response вырезает теги по дизайну — остаётся `\n\n \n` (непустая строка для n8n, символы для Meta, ничего для клиента). Guard перед отправкой проверяет isExecuted ноды, а не её содержимое.
Баг 2: Лимит Meta 1000 байт разбивает русский текст
После диагноза всплыла красная нода на финальной отправке:
``` NodeApiError: Bad request - please check your parameters Send direct message1 ```
Падение на анкете: имя, дата, сфера, телефон, абзацы через `\n\n`. Самое длинное сообщение в жизни агента. Документация Meta API: Message text must be UTF-8 and be 1000 bytes or less. Не символов, а байт.
В UTF-8 русская буква — 2 байта, эмодзи 3–4 байта (✨ = 3, 💎 = 4). 1000 байт это примерно 500–550 символов русского текста. Я прогнал 570-символьный русский текст: он занял 1030 байт. Анкета с именем, датой, сферой, тремя абзацами и «Все верно?» легко переезжает планку. Самое обидное: `\n\n` это не баг, это человеческие абзацы, как в Word — пайплайн, заточенный под reasoning, споткнулся о простой перенос строки.
Баг 3: Каталог вместо выборки — неправильный Schema Type
Пока разбирался с отправкой, пришла ещё жалоба менеджеров: «агент показывает не то». Просят серьги — вваливает полкаталога, просят часы — снова полкаталог.
За каталог отвечает tool-нода get_product_catalog1. Specify Input Schema включён, Schema Type не задан. n8n берёт дефолт — «Generate From JSON Example»: дай пример, я выведу схему. В jsonSchemaExample лежала не пример данных, а сама JSON Schema с полями type, properties, required, category (с enum: bracelets, earrings, necklaces, luch, candles) и description.
n8n содержимое не проверяет — честно принял схему за пример и вывел схему из схемы. Верхние ключи type, properties, required стали примером объекта, category уехала на дно. Инструмент читает inputData.json.category, получает undefined, идёт в дефолт all. Любой запрос возвращает весь ассортимент вместо выборки. Один клик фикса (Schema Type → «Define using JSON Schema»), полтора часа поиска.
Итог
Три разные природы одной проблемы: модель отвечает служебными тегами вместо текста, API имеет жёсткий лимит на байты вместо символов, конфиг инструмента скрывается за неправильным дефолтом. Зелёная нода худший вид красной — с падением хотя бы понятно где искать.
- 26 окт. 2026 г.Instinct, самый обсуждаемый ИИ-агент августа, столкнулся с Muse и Dots
- 25 окт. 2026 г.Открытые AI-модели: демократизация против киберугроз
- 25 окт. 2026 г.Lovable научил ИИ продвигать приложения: реклама в Google и Meta из чата
- 25 окт. 2026 г.Meta выпустила первую frontier-модель: Muse Wonder и Muse Wonder Full
Вопросы и ответы по материалу
Что известно по теме: баг 1: Служебные теги протокола вместо человеческого ответа?
Открыл executions — чистота. Ни одного упавшего прогона. Гипотеза «Reasoning Lock повторился» отпадает: модель отвечает и шустро. Единственный след в amoCRM: клиентка ответила «Да» в 20:06 на подтверждение заказа (20:02), потом только запись в MESSENGER-ID, в директе тишина. Открыл карточку OpenRouter: 871 token completion, из них 766 reasoning — остаток 105 видимых токенов. По объёму это служебные теги протокола: `[VERDICT:ORDER:DATA|HOT] [NEED_MANAGER_CALL] [STAGE:PERSONAL]` Модель GLM ответила. По протоколу. Ни одного человеческого слова. DeepSeek 4.0 PRO замыкался в себ
Что известно по теме: баг 2: Лимит Meta 1000 байт разбивает русский текст?
После диагноза всплыла красная нода на финальной отправке: ``` NodeApiError: Bad request - please check your parameters Send direct message1 ``` Падение на анкете: имя, дата, сфера, телефон, абзацы через `\n\n`. Самое длинное сообщение в жизни агента. Документация Meta API: Message text must be UTF-8 and be 1000 bytes or less. Не символов, а байт. В UTF-8 русская буква — 2 байта, эмодзи 3–4 байта (✨ = 3, 💎 = 4). 1000 байт это примерно 500–550 символов русского текста. Я прогнал 570-символьный русский текст: он занял 1030 байт. Анкета с именем, датой, сферой, тремя абзацами
Что известно по теме: баг 3: Каталог вместо выборки — неправильный Schema Type?
Пока разбирался с отправкой, пришла ещё жалоба менеджеров: «агент показывает не то». Просят серьги — вваливает полкаталога, просят часы — снова полкаталог. За каталог отвечает tool-нода get_product_catalog1. Specify Input Schema включён, Schema Type не задан. n8n берёт дефолт — «Generate From JSON Example»: дай пример, я выведу схему. В jsonSchemaExample лежала не пример данных, а сама JSON Schema с полями type, properties, required, category (с enum: bracelets, earrings, necklaces, luch, candles) и description. n8n содержимое не проверяет — честно принял схему за пример и
Делегируйте ресёрч, код и рутину автономному AI-агенту
Интеллектуальная агентная среда NomadNet Agent (agent.nomadnet.ai) выполняет многошаговые задачи: глубокий веб-ресёрч, анализ данных, написание кода и автоматизацию браузера.
Главное из мира ИИ — раз в неделю
7 ключевых событий недели, отобранных вручную. Без шума, репостов и пресс-релизов.
Готово! Проверьте почту — мы отправили подтверждение.