---
title: "Interfaz de diálogo Chat Completions"
description: "Solicitud mínima, campos comunes, lectura de respuestas y forma de escribir diálogos de múltiples turnos para POST /v1/chat/completions."
headingIds: {"Solicitud mínima":"section-1","Campos comunes":"section-2","Cómo leer la respuesta":"section-3","Diálogo de múltiples turnos":"section-4","Streaming y siguientes pasos":"section-5"}
---

<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>
Usa un cliente compatible con OpenAI, o si ya tienes código `chat.completions.create`, comienza con esta interfaz. La dirección completa es `https://1zheai.com/v1/chat/completions`; en la Base URL del SDK solo se rellena hasta `/v1`.

## Solicitud mínima

Primero configura `ONEZHE_API_KEY` en la terminal con la clave de este sitio. Los modelos siguientes deben existir en [tu lista de modelos disponibles](/es/docs/api-models/).

```bash
curl --fail-with-body --connect-timeout 10 --max-time 120 \
  https://1zheai.com/v1/chat/completions \
  -H "Authorization: Bearer $ONEZHE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.6-sol",
    "messages": [{"role": "user", "content": "请用一句中文解释 DNS 的作用。"}]
  }'
```

`--fail-with-body` hace que los errores HTTP devuelvan un código de salida distinto de cero, conservando a la vez el cuerpo del error; requiere curl 7.76 o una versión más reciente. En versiones anteriores, puedes usar primero `-i` para ver el código de estado.

## Campos comunes

| Campo | Tipo | Forma de uso |
| --- | --- | --- |
| `model` | string | Obligatorio, copia el ID del modelo de este sitio, sin añadir prefijos de proveedor de otras plataformas |
| `messages` | array | Obligatorio, envía en orden la pregunta de esta ronda y los mensajes del historial que deban conservarse |
| `messages[].role` | string | Para conversaciones normales usa `user` / `assistant`; el soporte del rol de instrucciones del sistema depende del modelo |
| `messages[].content` | string o array de bloques de contenido | Para texto plano usa primero una cadena; la entrada de imágenes requiere que el modelo admita el bloque de contenido correspondiente |
| `stream` | boolean | Cuando se establece en `true` se lee SSE, sin tratar toda la respuesta como un único JSON |
| `temperature` | number | Opcional, algunos modelos de razonamiento no admiten modificarlo; omítelo primero y verifica elemento por elemento |
| `tools` / `tool_choice` | array / string u object | Opcional, tanto el modelo como el origen deben admitirlo; la ejecución real de las herramientas la realiza tu programa |

Los parámetros de límite de salida varían según el modelo. No intercambies mecánicamente el `max_tokens` de Claude, el `max_output_tokens` de Responses y los parámetros de Chat Completions; consulta los requisitos del modelo elegido y, ante un 400, revisa primero el cuerpo del error.

## Cómo leer la respuesta

El resultado de texto normal se encuentra en `choices[0].message.content`. El motivo de finalización está en `choices[0].finish_reason`; cuando se devuelven llamadas a herramientas, el texto puede estar vacío y es necesario leer `message.tool_calls`. El `id`, `model` y `usage` de la respuesta pueden usarse para verificar esta llamada.

A continuación solo se muestra la estructura que requiere atención; los campos y números omitidos no representan el resultado real de una solicitud:

```json
{
  "id": "example-completion",
  "object": "chat.completion",
  "model": "gpt-5.6-sol",
  "choices": [{
    "index": 0,
    "message": {"role": "assistant", "content": "DNS 将域名解析为网络地址。"},
    "finish_reason": "stop"
  }]
}
```

## Diálogo de múltiples turnos

La interfaz no recuerda automáticamente la ronda anterior solo porque reutilices la misma clave. Envía junto el historial que deba conservarse:

```json
{
  "model": "gpt-5.6-sol",
  "messages": [
    {"role": "user", "content": "我正在学习 DNS。"},
    {"role": "assistant", "content": "我们可以从域名解析开始。"},
    {"role": "user", "content": "它和 HTTP 有什么区别？"}
  ]
}
```

Cuanto más largo es el historial, mayor es la solicitud. La aplicación debe recortar o resumir según el límite de contexto y conservar los pares completos de llamadas a herramientas y resultados.

## Streaming y siguientes pasos

Al añadir `"stream": true`, los incrementos de texto provienen de `choices[].delta.content`. Algunos eventos no tienen texto o `choices` está vacío, por lo que hay que comprobarlo al leer; consulta [salida en streaming](/es/docs/streaming/).

Ejecuta directamente [ejemplo completo en Python / Node.js](/es/docs/code-examples/), o cambia a [Responses](/es/docs/api-responses/); los parámetros nativos de Claude están en [Messages](/es/docs/api-messages/).
