Безопасное восстановление после разрыва LLM-потока
Безопасное восстановление после разрыва LLM-потока: production-руководство с явным решением, повторяемым артефактом, проверками отказа, сигналами и подтвержденными границами.
Безопасное восстановление после разрыва LLM-потока: production-руководство с явным решением, повторяемым артефактом, проверками отказа, сигналами и подтвержденными границами.
Краткий ответ
Реализуйте Безопасное восстановление после разрыва LLM-потока как контракт контроля надежности, а не разовую настройку. До переноса трафика зафиксируйте протокол, owner, доказательства и rollback. Контрольные точки: first_event, partial_output, terminal_event, replay_policy.
Решение фиксируют таблица контракта и детерминированный пример. llm-stream-disconnect-recovery не выходит в rollout, если у жесткого контроля нет wire-доказательства, устойчивого чтения или owner.
Границы и ответственность
Разделяйте задачу клиента и control plane. Клиент отвечает за файл или переменную; шлюз — за аутентификацию, маршруты, лимиты, учет и попытки; поставщик — за нативный протокол и меняющиеся возможности. Один текстовый ответ доказывает только один путь.
Статья владеет решением, рисками и проверкой; живая документация — меняющимися командами и UI-шагами. Так формируется дерево возможностей без двух owner для одного поискового намерения.
Owner-запись страницы — llm-stream-disconnect-recovery; фиксированные контроли: first_event, partial_output, terminal_event, replay_policy. Каждое значение проверяется на wire-границе или в устойчивом состоянии, а не выводится из маркетинга.
Практический артефакт: Безопасное восстановление после разрыва LLM-потока
Эта запись ревью является поставляемым артефактом. Явные технические значения позволяют сравнить конфигурацию, wire-доказательство и устойчивое состояние без скриншотов.
| Контроль | Фиксированное решение | Доказательство |
|---|---|---|
stream_identity |
one_attempt_id_per_connection |
logical_request_id + attempt_id + provider_request_id |
first_effective_event |
record_exact_transition |
event_type + timestamp + bytes_received |
partial_output |
incomplete_not_success |
last_event_type + buffered_item_ids + incomplete_marker |
tool_arguments |
decode_only_after_terminal_boundary |
call_id + fragment_sequence + completion_event |
replay |
policy_depends_on_side_effect_risk |
replay_decision + new_attempt_id + prior_attempt_link |
billing |
retain_each_attempt_and_final_settlement |
attempt_usage + terminal_state + charge_record |
Детерминированный пример
Пример использует placeholders и детерминированный ввод. Заменяйте только проверенные идентификаторы, никогда секреты или данные клиента, и храните точный snapshot.
CONNECTING -> STREAMING -> TERMINAL_SUCCESS
| | \
| | -> DISCONNECTED_AFTER_PARTIAL -> INCOMPLETE
| -> CLIENT_CANCELLED -> CANCELLED
-> DISCONNECTED_BEFORE_FIRST_EVENT -> RETRY_ELIGIBLE?
Never concatenate output from two attempt IDs.
Never execute partial tool arguments.
Уровни проверки
Выполняйте уровни по порядку. Поздний успех не заменяет раннюю границу; каждая попытка должна связываться с одним логическим запросом.
- Зафиксировать клиент, политику шлюза, alias модели, маршруты и наблюдаемую базу. Запись для
stream_identity: применитьone_attempt_id_per_connectionи сохранитьlogical_request_id + attempt_id + provider_request_id. - Выполнить положительную пробу и сохранить ответ, request ID, маршрут, конечный статус и usage. Запись для
first_effective_event: применитьrecord_exact_transitionи сохранитьevent_type + timestamp + bytes_received. - Выполнить парный отрицательный, предельный или disconnect-сценарий и проверить слой отказа. Запись для
partial_output: применитьincomplete_not_successи сохранитьlast_event_type + buffered_item_ids + incomplete_marker. - Повторить через реальный протокол; не выводить нативную поддержку из соседнего endpoint. Запись для
tool_arguments: применитьdecode_only_after_terminal_boundaryи сохранитьcall_id + fragment_sequence + completion_event. - Развернуть на ограниченной когорте с owner, сроком, порогом остановки и rollback. Запись для
replay: применитьpolicy_depends_on_side_effect_riskи сохранитьreplay_decision + new_attempt_id + prior_attempt_link. - Перечитать устойчивую конфигурацию и учет; удалить временный доступ и тестовые данные. Запись для
billing: применитьretain_each_attempt_and_final_settlementи сохранитьattempt_usage + terminal_state + charge_record.
Предотвращаемые отказы
Каждый пункт ниже блокирует выпуск. HTTP 200, dashboard или одна демонстрация не отменяют условия.
blind_reconnect— Приblind_reconnectостановите rollout и примените заданные owner, доказательства и rollback; успешная проба не отменяет отказ.partial_success— Приpartial_successостановите rollout и примените заданные owner, доказательства и rollback; успешная проба не отменяет отказ.cross_attempt_splice— Приcross_attempt_spliceостановите rollout и примените заданные owner, доказательства и rollback; успешная проба не отменяет отказ.partial_tool_execution— Приpartial_tool_executionостановите rollout и примените заданные owner, доказательства и rollback; успешная проба не отменяет отказ.
Сигналы и условия остановки
Наблюдайте успех и вред вместе. Порог задается политикой workload; SLO и знаменатель фиксируются до окна.
| Сигнал | Порог | Действие |
|---|---|---|
disconnect_before_first_event_rate |
workload_SLO_threshold |
inspect_connect_and_header_phases |
disconnect_after_partial_rate |
workload_SLO_threshold |
mark_incomplete_and_stop_auto_retry |
stream_without_terminal_event |
0_success_classifications |
reclassify_and_investigate |
cross_attempt_fragment_count |
0 |
disable_recovery_path |
Границы Modelflare
Modelflare централизует совместимый и нативный routing, ограниченные ключи, группы, usage и ошибки. Канал не доказывает все поля, alias, обещания хранения, регионы или fallback. Проверяйте нативно, а финансовой истиной считайте устойчивый финальный расчет.
Это метод реализации, не сертификация, юридический вывод, история uptime или универсальный benchmark. Перепроверьте контракт, модели, цены, хранение и регионы в T-1; перенесите дату при изменении ключевого факта.
Продолжение тематического кластера
Parent объясняет широкое решение, sibling — следующий шаг, документация — текущую настройку. Ссылки в тексте нужны, потому что managed CMS не хранит related-slug.
Частые вопросы
Безопасное восстановление после разрыва LLM-потока: Достаточно одного успешного запроса?
Нет. Отрицательный тест, ограниченный rollout, устойчивое чтение и остановка — отдельные gates.
Безопасное восстановление после разрыва LLM-потока: Фиксировать модели и цены за месяцы?
Нет. Используйте placeholders или snapshots и проверяйте в T-1.
Безопасное восстановление после разрыва LLM-потока: Какие доказательства хранить?
Безопасные IDs, версию, время, статус, usage, финальную сумму и решение ревью.
Источники и дата проверки
Источники проверены 2026-08-07. Они задают контракты и принципы, но не доказывают непроверенные маршруты или будущее состояние.