Почему первый ответ в моем сеансе OpenAI Realtime C# показывает использование кэшированного токена (cached_input_tokens)C#

Место общения программистов C#
Anonymous
Почему первый ответ в моем сеансе OpenAI Realtime C# показывает использование кэшированного токена (cached_input_tokens)

Сообщение Anonymous »

Я работаю с OpenAI.Realtime C# SDK и регистрирую подробные показатели использования токенов для многооборотного аудиоразговора. Моя установка основана на пользовательском классе RealtimeScenarioBase и производном сценарии (RT_Test3_TwoVoices), который отправляет два аудиовхода и получает два аудиоответа.
Все работает, но я заметил странную модель использования токенов:
Проблема
В первом ответе помощника в сеансе отображаются кэшированные входные токены, хотя:
  • История предыдущих разговоров не существует
  • Предыдущие сообщения пользователя не отправлялись
  • Сеанс только что создан
  • Модель – gpt-realtime-mini (развертывание Azure)
Пример протоколируемого использования
Timestamp: 2026-03-22T02:49:15.7672185+00:00
Step: Voice1
Model: realtime-mini-test-3
InputTokens: 1459
InputTextTokens: 1349
InputAudioTokens: 110
CachedInputTokens: 1408
CachedTextInputTokens: 1344
CachedAudioInputTokens: 64
OutputTokens: 396
OutputTextTokens: 97
OutputAudioTokens: 299
TotalTokens: 1855

Второй ход также показывает кэшированные токены, что и ожидалось, но первый ход не должен, если я не правильно понимаю, как работает кеширование.
Мой вопрос
Почему первый ответ помощника в сеансе реального времени показывает использование кэшированного токена?
Это ожидаемое поведение для gpt-realtime-mini, или я пропустил событие использования на более раннем этапе жизненного цикла сеанса (например, во время session.created, session.updated или внедрения инструкций)?
Соответствующий код
У меня есть большой базовый класс, но вот ключевые части:

Настройка сеанса

var sessionOptions = new RealtimeConversationSessionOptions
{
Instructions = firstLargeInstruction,
AudioOptions = BuildStandardAudioOptions(),
};

var session = await CreateAndConfigureSessionAsync(sessionOptions);

Первый ход

await SendAudioFileAsync(session, DefaultInputAudioPath);
await session.StartResponseAsync();

Извлечение использования токена

case RealtimeServerUpdateResponseDone responseDone:
var usageMetrics = ReadUsage(responseDone.Response.Usage);
// ...

Что я рассмотрел
  • Возможно, системные инструкции (firstLargeInstruction) кэшируются?
  • Может быть, модель предварительно загружает или внедряет внутренние системные подсказки?
  • Может быть, я пропускаю событие использования во время session.updated?
  • Может быть, при развертывании Azure gpt-realtime-mini используется внутреннее кэширование с горячим стартом?
Что мне нужно знать
  • Ожидается ли использование кэшированного токена в первом ответе для моделей реального времени?
  • Кэширует ли API Realtime системные инструкции или преамбулу модели внутри себя?
  • Должен ли я регистрировать использование токенов на более ранних этапах жизненного цикла сеанса?
  • Или это ошибка в моей логике отслеживания использования?
Пакеты


Вернуться в «C#»