JSON-лог вызовов LLM на Python: задача с проверкой
JSON Lines хранит каждое событие отдельным JSON-объектом в одной строке. Такой формат удобен для потоковой обработки журналов и агрегации стоимости или задержки вызовов.
Разделите данные события и формат сериализации. В этом упражнении точный порядок полей и представление значений входят в контракт вывода. Работа идёт с готовыми входными записями, покупать доступ к LLM API не требуется.
Это бесплатное упражнение из платного курса. Проверьте решение без регистрации. Объяснения и последовательная практика — в курсе «LLMOps & Evaluation: из песочницы в продакшн».
Задача: сформируй JSON-лог вызовов LLM
Соберите минимальный лог для вызовов модели: на вход подаются параметры каждого вызова, на выходе нужно вывести по строке JSON (одна строка на один вызов) со строго заданными полями и форматированием.
Формат ввода
Первая строка: целое N — число вызовов (1 ≤ N ≤ 1000).
Далее N строк, разделитель полей — символ |:
model|prompt|input_tokens|output_tokens|latency_ms|price_in|price_out|ok
-
model— строка без| -
prompt— строка без|(пробелы допустимы) -
input_tokens,output_tokens,latency_ms— целые -
price_in,price_out— вещественные (цена в $ за 1000 токенов входа/выхода) -
ok— 1 или 0 (флаг «успех»)
Формат вывода
Ровно N строк; каждая — минифицированный JSON-объект (без пробелов) с полями в таком порядке:
{"request_id":..., "ts":..., "model":..., "prompt_hash":..., "input_tokens":..., "output_tokens":..., "latency_ms":..., "cost_usd":..., "status":...}
Точные правила заполнения:
-
request_id— первые 12 шестнадцатеричных символов SHA-256 от строки
model + "|" + prompt + "|" + input_tokens + "|" + output_tokens -
ts— всегда строка"2025-01-01T00:00:00Z"(фиксированное значение) -
model,input_tokens,output_tokens,latency_ms— как во входе -
prompt_hash— SHA-256 отprompt(hex, строчные) -
cost_usd— число:(input_tokens/1000)*price_in + (output_tokens/1000)*price_out, округлённое до 6 знаков после запятой (в JSON без незначащих нулей, например0.35,0.00325,0.002). Для нуля пишем 0, а не 0.0 -
status—"ok", еслиok=1иlatency_ms>0, иначе"error"
Ограничения и подсказки
-
Сравнение ответа — покомпонентное, точное.
-
JSON должен быть минифицирован (
separators=(',',':')), ключи — строго в указанном порядке. -
SHA-256 берите стандартной
hashlib.sha256(...).hexdigest().
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Quality Gate для LLM: задача на допуск релиза
- Валидация JSON и retries на Python: задача Guardrails
- PromptOps: почему хороший промпт требует версий и тестов
- LLM streaming: задержка первого токена и полный ответ
- Retry backoff, Retry-After и jitter: задача на Python
- RAG с цитатами: что проверять автоматическим тестом
