---
title: "Verificar el modelo y el uso"
description: "Verifica el modelo, el uso de tokens y el costo de cada llamada con el registro de llamadas y cinco comprobaciones."
headingIds: {"Registro de llamadas":"section-1","Cinco comprobaciones":"section-2","Completar las cuatro primeras con un script":"section-3","Bloques thinking":"section-4","Al detectar inconsistencias":"section-5","Preguntas frecuentes":"section-6"}
---

<aside className="docs-publication" data-pagefind-ignore>

Documentación mantenida por [1ZheAI](https://1zheai.com/en/editorial/#publisher). [Fuentes y correcciones](https://1zheai.com/en/editorial/).

¿Encontraste un error? [Contacta con soporte](mailto:support@1zheai.com) indicando la dirección de la página y una descripción. No envíes claves de API ni credenciales de cuenta.

</aside>
## Registro de llamadas

Cada llamada se registra en el [registro de llamadas](/es/docs/usage-logs/) de la consola, que enumera el modelo, el uso de tokens de entrada, salida, lectura de caché y escritura de caché, así como el costo.

## Cinco comprobaciones

Las siguientes comprobaciones se basan en el formato público de la interfaz de Anthropic y sirven para detectar diferencias en los campos y el formato de la respuesta.

| Comprobación | Resultado esperado | Qué vigilar |
|---|---|---|
| 1. Campo `model` devuelto | Coincide con el ID del modelo solicitado | Devuelve otro nombre de modelo, o el campo no está presente |
| 2. Lectura de caché | La misma solicitud que cumple las condiciones de caché se envía dos veces dentro de la vigencia de la caché; el `cache_read_input_tokens` de la segunda es mayor que 0 | Siempre es 0, o `usage` no contiene campos de caché |
| 3. ID de llamada a herramientas | El `id` del bloque `tool_use` comienza con `toolu_` | Otro formato, o el modelo no llama a las herramientas según lo requerido |
| 4. Orden de eventos de streaming | Aparecen en orden `message_start`, `content_block_start`, `content_block_delta`, `message_delta` y `message_stop` | Solo bloques `data:` en formato OpenAI, o eventos ausentes o en orden incorrecto |
| 5. Contraste con una tarea real | Comparar los resultados de una tarea fija con la API oficial u otra fuente confiable | Resultados claramente peores, rechazos anómalos o cortes frecuentes |

<Warning>

Estas comprobaciones solo pueden detectar diferencias en los campos y el formato; no pueden confirmar por sí solas el modelo realmente utilizado. El campo `model` puede ser alterado y el formato también puede ser imitado.

</Warning>

## Completar las cuatro primeras con un script

Se necesitan `bash`, `curl` y `jq`. El script realiza cinco llamadas pequeñas, una de las cuales escribe en caché aproximadamente 18 mil tokens, facturados al precio normal.

```bash title="verify.sh"
#!/usr/bin/env bash
# 用法：ONEZHE_API_KEY=sk-你的API密钥 bash verify.sh [模型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
```

El punto 3 usa `tool_choice: auto`. Los modelos 5.x como Sonnet 5.5 no admiten la especificación forzada de herramientas (`{"type":"tool"}` o `{"type":"any"}`) y devuelven un error 400 `does not support forced tool_choice`.

La siguiente salida fue medida el 2026-10-15 con `claude-sonnet-5-5` (el punto 1 solo conserva los campos clave):

```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
```

Si el evento `ping` aparece o en qué posición no es fijo y no afecta la evaluación.

## Bloques thinking

Con thinking activado, el bloque `thinking` devuelto incluye el campo `signature`, que también puede usarse como comprobación de formato. La forma de escribirlo en los modelos 5.x difiere de la de los 4.x; medido el 2026-10-15:

| Modelo | Parámetro `thinking` | Resultado |
|---|---|---|
| `claude-sonnet-4-6` | `{"type":"enabled","budget_tokens":1024}` | Devuelve el bloque `thinking`, con texto de pensamiento y `signature` |
| `claude-sonnet-5` | `{"type":"enabled","budget_tokens":1024}` o `{"type":"adaptive"}` | Ambas funcionan |
| `claude-sonnet-5-5` | `{"type":"adaptive"}` | Funciona; al pasar `enabled` devuelve 400 indicando que solo se admite adaptive |

El bloque `thinking` de los modelos 5.x solo contiene `signature` por defecto, y el texto de pensamiento es una cadena vacía. Para ver el resumen del pensamiento, añade `"display": "summarized"`:

```json
"thinking": {"type": "adaptive", "display": "summarized"}
```


Al usar sitios web de detección de terceros, se recomienda crear una clave API dedicada y eliminarla después de la prueba.

## Al detectar inconsistencias

Envía un correo a support@1zheai.com con la hora de la solicitud, el ID del modelo, el contenido completo de la respuesta (elimina la clave API) y el punto de comprobación correspondiente. El request id en la respuesta o en el mensaje de error puede ayudar a localizar esta llamada.

## Preguntas frecuentes

<AccordionGroup>
<Accordion title="¿Es fiable preguntar directamente al modelo «¿Quién eres?»?">

No es fiable. La autodescripción del modelo está influenciada por el prompt del sistema y, con ciertos prompts, puede responder incorrectamente su propia versión. Verificar los campos devueltos y el formato de los eventos es más útil.

</Accordion>
<Accordion title="Elegí Opus, ¿por qué aparece Haiku en el registro de llamadas?">

Claude Code usa el modelo Haiku para algunas tareas en segundo plano, y en el registro de llamadas aparecen los registros correspondientes. Puedes especificar el modelo para este tipo de tareas con la variable de entorno `ANTHROPIC_DEFAULT_HAIKU_MODEL`; consulta [integración con Claude Code](/es/docs/quickstart-claude-code/). Si esto ocurre sin usar Claude Code, envía la hora de la solicitud a support@1zheai.com.

</Accordion>
</AccordionGroup>
