РУКОВОДСТВО · ОБНОВЛЕНО 2026-10-21
Ответ нейросети оборвался: как отличить лимит от сбоя потока
Диагностика неполного ответа в чате и API: завершение модели, сетевой разрыв и лимит вывода.
Если ответ оборвался, сначала проверьте статус запроса и причину завершения, а не отправляйте автоматически «продолжай». Ограничение длины, отказ модели, вызов инструмента и разрыв соединения требуют разных действий. В совместимых API встречается finish_reason со значением length, а в Messages API Claude документирован stop_reason max_tokens. Эти поля нельзя переносить между протоколами механически. Сохраняйте частичный текст и идентификатор запроса, чтобы понять, завершилась ли генерация или клиент потерял её окончание.
1. Сохраните признаки завершения
Запишите HTTP-статус, идентификатор запроса, события потока и финальные поля, если они получены. Показанный в интерфейсе текст может быть только частью результата. Если соединение прервалось до заключительного события, не объявляйте причину length без подтверждения. Сравните, дошёл ли ответ до сервера приложения и до браузера. Не записывайте в журнал секреты и полные чувствительные документы ради диагностики. Для повторной обработки сохраните связь с исходным запросом.
2. Проверьте доступный бюджет ответа
Параметр ограничения вывода задаёт потолок конкретного ответа, а окно контекста относится к общему контракту модели и маршрута. Для моделей с рассуждением часть бюджета может расходоваться не так, как ожидается по длине видимого текста. Проверьте документацию конкретной модели и фактическое usage. Вместо бесконечного увеличения лимита попросите более короткий результат, разделите отчёт на самостоятельные разделы или сначала сформируйте план. Это также облегчает проверку содержимого человеком.
3. Продолжайте только текстовую часть
Для длинного объяснения можно запросить продолжение с явной границы, передав достаточно контекста и указав уже завершённые разделы. Проверяйте повторы, нумерацию и незакрытые блоки кода. Если в запросе участвовали инструменты, не воспроизводите весь цикл действий как простой способ дописать ответ: внешняя операция могла уже выполниться. Восстановление текста и повторное исполнение функции должны быть разными ветвями приложения с отдельными проверками результата и защиты от дублей.
4. Отдельно обработайте структурированные данные
Неполный JSON не записывают в рабочую базу как успешно извлечённые поля. Даже синтаксически восстановленный объект может потерять часть обязательных данных или изменить смысл. Сначала проверьте статус завершения, затем схему и бизнес-условия. При необходимости повторите ограниченное извлечение конкретного фрагмента исходного документа, а не просите модель угадать конец оборванного объекта. В контрольный набор включите лимит вывода, сетевой разрыв, ошибку инструмента и штатное завершение короткого ответа.
Частые вопросы
Всегда ли помогает увеличить max_tokens?
Нет. Это не исправит сетевой разрыв, отказ или ошибку инструмента. Сначала подтвердите фактическую причину и допустимые параметры маршрута.
Можно ли автоматически дописать JSON закрывающей скобкой?
Это не доказывает полноту данных. Проверяйте завершение, схему и смысл полей; при необходимости выполняйте новое ограниченное извлечение.
Почему текст короткий, а лимит уже исчерпан?
У конкретной модели могут учитываться дополнительные токены рассуждения. Сверьте usage и документацию, не оценивайте расход только по видимой длине.
Нужно ли заново выполнять весь агентный запрос?
Сначала проверьте уже выполненные действия. Повтор может создать дубликат внешнего изменения, даже если пользователь видел лишь часть итогового текста.