Безопасная сборка аргументов потоковых функций
Руководство для production: Безопасная сборка аргументов потоковых функций. Включает детерминированный артефакт, границы отказа, контроль rollout и проверенные источники.
Руководство для production: Безопасная сборка аргументов потоковых функций. Включает детерминированный артефакт, границы отказа, контроль rollout и проверенные источники.
Сначала решение
Безопасная сборка аргументов потоковых функций — явный production-контракт, а не отдельное изменение. До переноса трафика задайте успех, конечный отказ и rollback; артефакт отделяет доказательства от предположений.
Начните с identity, детерминированно докажите buffer и сделайте replay обязательным release-gate.
Повторно используемый артефакт
Строка считается пройденной, только если доказательство относится к тому же запросу, окну теста или версии конфигурации.
| Контрольная точка | Доказательство | Условие прохождения |
|---|---|---|
identity |
response_id,output_index,item_ID,and_call_id |
Запись связывает логический запрос и конкретную попытку. |
buffer |
one_append-only_UTF-8_buffer_per_call |
Предел явный, превышение закрывает операцию. |
ordering |
event_sequence_validated;cross-call_order_not_assumed |
Значение точно сохраняется и сравнивается на wire-границе. |
completion |
arguments_parsed_only_after_the_call_terminal_event |
Значение точно сохраняется и сравнивается на wire-границе. |
validation |
JSON_parse,schema,authorization,business_rule |
Идентичность, scope и policy проверены перед выполнением. |
replay |
idempotency_key_derived_from_application_request_and_call_ID |
Повтор не дублирует эффект или списание. |
Разобранный пример
Пример синтетический и детерминированный. Подставьте проверенные параметры своей нагрузки; не используйте секреты или данные клиентов.
state = Map<call_id, { name, utf8_buffer, complete }>()
on argument_delta(event):
call = state.get_or_create(event.call_id)
call.utf8_buffer.append(event.delta)
on arguments_done(event):
call = state.require(event.call_id)
call.complete = true
args = JSON.parse(call.utf8_buffer)
validate_schema(args)
authorize(current_user, call.name, args)
execute_once(request_id + ":" + event.call_id, call.name, args)
fragment_sequence:
- [call_A, '{"order']
- [call_B, '{"city":"Pa']
- [call_A, '_id":"ORDER-1001"}']
- [call_B, 'ris"}']
terminal_parse:
call_A: { order_id: ORDER-1001 }
call_B: { city: Paris }
Порядок внедрения
- Зафиксировать текущие запрос, ответ, конфигурацию и наблюдаемую базовую линию.
- Выполнить детерминированный положительный сценарий и сохранить полный результат.
- Выполнить парный отрицательный или предельный сценарий.
- Связать попытки одним логическим request ID и записать время, конечное состояние и usage без чувствительного содержимого.
- Раскатывать на ограниченную когорту с условиями остановки.
- Повторно прочитать долговечное состояние и публичное поведение; при нарушении инварианта выполнить rollback.
Режимы отказа
Эти ошибки обесценивают результат, даже если внешний HTTP выглядит успешным:
- Фрагменты связываются по позиции, а не стабильному ID.
- JSON разбирается до терминального события вызова.
- Повтор дублирует необратимое действие.
- Промпты, ключи или чувствительные аргументы попадают в телеметрию.
Граница Modelflare
Modelflare централизует OpenAI-совместимый routing, ключи, группы, usage и ошибки, но настроенный маршрут не доказывает опциональные возможности провайдера. Проверяйте модель и канал нативным протоколом, сохраняйте явные нули и считайте истиной billing только долговечный расчет.
Общая граница решения описана в родительском руководстве, текущая настройка — в документации.
Проверка перед публикацией
- Сначала ответить на главный вопрос.
- Назначить owner каждому полю, состоянию, метрике и формуле.
- Использовать только синтетические идентификаторы.
- Сохранить структуру, код, лимиты и предупреждения во всех языках.
- На T-1 перепроверить контракты, поддержку и цены; при изменении перенести дату.
- До срока исключить страницу из public API, маршрутов и sitemap.
Источники и дата проверки
Источники проверены 2026-08-07; они не доказывают непроверенный маршрут.