Перейти к содержимому
中文

Проверка модели и использования

Что можно проверить в ответах, инструментах и журнале и чего эти проверки не доказывают.

Сверьте запрошенный model ID, возвращённые поля, поддерживаемые функции, использование и запись в журнале. Ответ на вопрос «какая ты модель?» не является надёжным доказательством происхождения.

Минимальные проверки

Раздел «Минимальные проверки»

Используйте короткий запрос, поток и необходимый инструментальный сценарий из примеров ниже. Проверьте завершение, usage и результат обработки инструмента. Для Sonnet 5.5 и других 5.x в указанном инструментальном примере применяется tool_choice: auto: принудительный выбор вроде tool или any может давать 400.

Отдельный успешный ответ не подтверждает все функции, весь диапазон контекста или постоянную доступность. Скорость, стиль текста, поля имени модели и биллинг по отдельности также не доказывают источник.

Сохраните время, модель, протокол, идентификатор запроса и обезличенный ответ. Сопоставьте с журналом и правилами оплаты. Удалите ключ и приватные данные перед отправкой в поддержку.

Примеры запросов и конфигурации

Раздел «Примеры запросов и конфигурации»

Используйте пример для выбранного протокола и версии клиента. Замените учебные ключи и идентификаторы моделей своими. Команды выполняются на вашем компьютере или сервере.

bash
#!/usr/bin/env bash
# Использование:ONEZHE_API_KEY=sk-YOUR_API_KEY bash verify.sh [MODEL_ID]
set -euo pipefail
BASE="https://1zheai.com"
MODEL="${1:-claude-sonnet-5-5}"
H=(-H "x-api-key: $ONEZHE_API_KEY" -H "anthropic-version: 2023-06-01" -H "content-type: application/json")
echo "== 1. поле model"
curl -s "$BASE/v1/messages" "${H[@]}" \
-d "$(jq -n --arg m "$MODEL" '{model:$m,max_tokens:16,messages:[{role:"user",content:"ping"}]}')" \
| jq 'if .error then .error else {id, model, usage} end'
echo "== 2. кэш: повторите запрос и проверьте cache_read_input_tokens во втором ответе"
LONG=$(printf 'Это неизменный текст для проверки кэширования. Важна достаточная длина.%.0s' {1..600})
BODY=$(jq -n --arg m "$MODEL" --arg t "$LONG" '{model:$m,max_tokens:16,
system:[{type:"text",text:$t,cache_control:{type:"ephemeral"}}],
messages:[{role:"user",content:"ping"}]}')
for i in 1 2; do
curl -s "$BASE/v1/messages" "${H[@]}" -d "$BODY" | jq -c 'if .error then .error else .usage end'
done
echo "== 3. ID вызова инструмента"
curl -s "$BASE/v1/messages" "${H[@]}" \
-d "$(jq -n --arg m "$MODEL" '{model:$m,max_tokens:256,
tools:[{name:"get_weather",description:"Получить погоду в городе",
input_schema:{type:"object",properties:{city:{type:"string"}},required:["city"]}}],
tool_choice:{type:"auto"},
messages:[{role:"user",content:"Какая сегодня погода в Пекине?"}]}')" \
| jq -r 'if .error then .error.message else (.content[]? | select(.type=="tool_use") | .id) end'
echo "== 4. последовательность потоковых событий"
curl -sN "$BASE/v1/messages" "${H[@]}" \
-d "$(jq -n --arg m "$MODEL" '{model:$m,max_tokens:32,stream:true,messages:[{role:"user",content:"Сосчитайте до трёх"}]}')" \
| grep '^event:' | uniq
text
== 1. поле model
{
"id": "msg_011Cg3Esh8zeEdLeXAPVALKe",
"model": "claude-sonnet-5-5",
"usage": {
"input_tokens": 518,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"output_tokens": 12,
...
}
}
== 2. кэш: повторите запрос и проверьте cache_read_input_tokens во втором ответе
{"input_tokens":23,"cache_creation_input_tokens":17920,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":17920,"ephemeral_1h_input_tokens":0},"output_tokens":4,"output_tokens_details":{"thinking_tokens":0},"service_tier":"standard","inference_geo":"global"}
{"input_tokens":23,"cache_creation_input_tokens":0,"cache_read_input_tokens":17920,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":4,"output_tokens_details":{"thinking_tokens":0},"service_tier":"standard","inference_geo":"global"}
== 3. ID вызова инструмента
toolu_01UPsdyKX8M9fJTTkDoSKHXA
== 4. последовательность потоковых событий
event: message_start
event: content_block_start
event: ping
event: content_block_delta
event: content_block_stop
event: message_delta
event: message_stop
json
"thinking": {"type": "adaptive", "display": "summarized"}