200 OK, но клиент молчит: три бага n8n-агента из production
Ровно через 20 дней после закрытия первого бага появился второй. На этот раз виновата не LLM, а слои вокруг: невидимые символы, проверки валидации и отключённые чекбоксы в конфигурации. Три разные природы багов:
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 имеет жёсткий лимит на байты вместо символов, конфиг инструмента скрывается за неправильным дефолтом. Зелёная нода худший вид красной — с падением хотя бы понятно где искать.
- 12 нояб. 2026 г.Meta* включила ИИ-проверку возраста в Instagram* по всему миру: детей до 13 лет удалят
- 12 нояб. 2026 г.Meta вывела Muse на часы Apple и Android с тремя способами общения
- 12 нояб. 2026 г.Anthropic запустила Claude Meetings: ИИ садится в Google Meet и сразу ведёт задачи
- 12 нояб. 2026 г.SEO-текст стал вектором атаки: агент-ресерчер выполнил чужую инструкцию с сайта
Вопросы и ответы по материалу
Что известно по теме: баг 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 ответила. По протоколу.
Что известно по теме: баг 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 символов русского текста.
Что известно по теме: баг 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.
Протестируйте новые LLM и мультимодальные модели в одном окне
Платформа Nomad AI (nomadnet.ai) даёт прямой доступ к Claude Opus 5.5, GPT-6, Gemini 3.1, DeepSeek и автономным агентам без VPN, зарубежных карт и зоопарка подписок.
Главное из мира ИИ — раз в неделю
7 ключевых событий недели, отобранных вручную. Без шума, репостов и пресс-релизов.
Готово! Проверьте почту — мы отправили подтверждение.