Как тестировать OpenAI-совместимый API
Руководство для production: Как тестировать OpenAI-совместимый API. Включает детерминированный артефакт, границы отказа, контроль rollout и проверенные источники.
Руководство для production: Как тестировать OpenAI-совместимый API. Включает детерминированный артефакт, границы отказа, контроль rollout и проверенные источники.
Сначала решение
Как тестировать OpenAI-совместимый API — явный production-контракт, а не отдельное изменение. До переноса трафика задайте успех, конечный отказ и rollback; артефакт отделяет доказательства от предположений.
Начните с text, детерминированно докажите stream и сделайте errors обязательным release-gate.
Повторно используемый артефакт
Строка считается пройденной, только если доказательство относится к тому же запросу, окну теста или версии конфигурации.
| Контрольная точка | Доказательство | Условие прохождения |
|---|---|---|
text |
non-stream_response,finish_state,empty_and_Unicode_input |
Значение точно сохраняется и сравнивается на wire-границе. |
stream |
SSE_event_order,terminal_marker,usage_placement,disconnect |
Запись связывает логический запрос и конкретную попытку. |
tools |
single_and_parallel_calls,argument_schema,call_correlation |
Запись связывает логический запрос и конкретную попытку. |
schema |
valid_object,refusal,truncation,unsupported_keyword |
Предел явный, превышение закрывает операцию. |
usage |
input,output,cache_read/write,missing_categories |
Резерв, наблюдение и итог сходятся в долговечном ledger. |
errors |
401,403,429,499,5xx_outer_and_embedded_failures |
Owner, источник, дата и ограничение записаны. |
Разобранный пример
Пример синтетический и детерминированный. Подставьте проверенные параметры своей нагрузки; не используйте секреты или данные клиентов.
corpus_version: 1
cases:
- id: text/non_stream_zero_values
request: { stream: false, temperature: 0 }
assert: [http_status, response_shape, explicit_zero_preserved]
- id: stream/disconnect
action: cancel_after_first_content_delta
assert: [client_cancelled, upstream_cancelled, terminal_state_recorded]
- id: tools/two_calls
assert: [stable_call_ids, arguments_validated, results_correlated]
- id: errors/rate_limit
assert: [status_429, retry_after_parsed, attempt_budget_respected]
Порядок внедрения
- Зафиксировать текущие запрос, ответ, конфигурацию и наблюдаемую базовую линию.
- Выполнить детерминированный положительный сценарий и сохранить полный результат.
- Выполнить парный отрицательный или предельный сценарий.
- Связать попытки одним логическим request ID и записать время, конечное состояние и usage без чувствительного содержимого.
- Раскатывать на ограниченную когорту с условиями остановки.
- Повторно прочитать долговечное состояние и публичное поведение; при нарушении инварианта выполнить rollback.
Режимы отказа
Эти ошибки обесценивают результат, даже если внешний HTTP выглядит успешным:
- Один текстовый ответ принимается за полное доказательство совместимости.
- Явный
0илиfalseтеряется при сериализации. - Читается одно удобное поле, а типизированные outputs, tools, отказы или частичные результаты теряются.
- Повторы без бюджета усиливают нагрузку.
Граница Modelflare
Modelflare централизует OpenAI-совместимый routing, ключи, группы, usage и ошибки, но настроенный маршрут не доказывает опциональные возможности провайдера. Проверяйте модель и канал нативным протоколом, сохраняйте явные нули и считайте истиной billing только долговечный расчет.
Общая граница решения описана в родительском руководстве, текущая настройка — в документации.
Проверка перед публикацией
- Сначала ответить на главный вопрос.
- Назначить owner каждому полю, состоянию, метрике и формуле.
- Использовать только синтетические идентификаторы.
- Сохранить структуру, код, лимиты и предупреждения во всех языках.
- На T-1 перепроверить контракты, поддержку и цены; при изменении перенести дату.
- До срока исключить страницу из public API, маршрутов и sitemap.
Источники и дата проверки
Источники проверены 2026-08-07; они не доказывают непроверенный маршрут.