> ## Documentation Index
> Fetch the complete documentation index at: https://docs.acedata.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Solicitud y uso de la API de Kimi Chat Completion

> Kimi API guide - Ace Data Cloud

Kimi es una serie de modelos de IA lanzada por la Cara Oscura de la Luna. Actualmente, se recomienda el `kimi-k3` para programación a largo plazo, agentes, razonamiento complejo y trabajo de conocimiento, que se puede invocar a través de la API de Chat Completions compatible con OpenAI.

Este documento describe principalmente el proceso de uso de la API de Kimi Chat Completion, que nos permite utilizar fácilmente la función de conversación oficial de Kimi.

## Proceso de Solicitud

Para usar la API de Kimi Chat Completion, primero dirígete a la [consola de Ace Data Cloud](https://platform.acedata.cloud/console/applications) para obtener tu token de API, que debes guardar como respaldo.

![](https://cdn.acedata.cloud/5hmkdg.jpg)

Si aún no has iniciado sesión o registrado, serás redirigido automáticamente a la página de inicio de sesión que te invitará a registrarte e iniciar sesión; una vez completado, volverás automáticamente a la página actual.

**Un token de API es suficiente para acceder a todos los servicios de la plataforma, no es necesario solicitar uno por cada servicio.** La primera solicitud te otorgará un crédito gratuito para que puedas probarlo; si el crédito es insuficiente, puedes recargar el saldo general en la [consola](https://platform.acedata.cloud/console/coin).

> 📘 Documentación completa: [Kimi Chat Completion API →](https://platform.acedata.cloud/documents/kimi-chat-completions)

## Uso Básico

A continuación, puedes completar los campos correspondientes en la interfaz, como se muestra en la imagen:

<p>
  <img src="https://cdn.acedata.cloud/ej5ozg.png" width="400" className="m-auto" />
</p>

La primera vez que uses esta interfaz, necesitarás completar al menos tres campos: `authorization` que puedes seleccionar directamente de la lista desplegable; `model` que se utiliza para seleccionar el modelo Kimi, se recomienda usar `kimi-k3`; `messages` es un array de mensajes de conversación, cada mensaje contiene `role` y `content`, donde `role` admite `user`, `assistant`, `system` y `tool`.

También puedes notar que a la derecha hay un código de llamada correspondiente generado, puedes copiar el código para ejecutarlo directamente, o puedes hacer clic en el botón "Try" para realizar pruebas.

<p>
  <img src="https://cdn.acedata.cloud/six7e3.png" width="400" className="m-auto" />
</p>

A continuación se muestra una respuesta real de K3 obtenida usando `reasoning_effort: max` (se omiten los campos de extensión no utilizados):

```json theme={null}
{
  "id": "msg_2D4Btbg1WgvkNE3tCYkR4xGA",
  "object": "chat.completion",
  "created": 1784466588,
  "model": "kimi-k3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "¡Hola! ¿Cómo puedo ayudarte hoy?"
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 86,
    "completion_tokens": 206,
    "total_tokens": 292
  }
}
```

La respuesta contiene varios campos, que se describen a continuación:

* `id`, el ID que genera esta tarea de conversación, utilizado para identificar de manera única esta tarea de conversación.
* `model`, el modelo Kimi seleccionado en el sitio oficial.
* `choices`, la información de respuesta que Kimi proporciona en respuesta a la consulta.
* `usage`: información estadística sobre los tokens utilizados en esta pregunta y respuesta.

Dentro de `choices` se incluye la información de respuesta de Kimi, donde `choices` contiene la información específica de la respuesta de Kimi, como se puede ver en la imagen.

<p>
  <img src="https://cdn.acedata.cloud/tv9rul.png" width="400" className="m-auto" />
</p>

Se puede observar que el campo `content` dentro de `choices` contiene el contenido específico de la respuesta de Kimi; K3 también puede devolver `reasoning_content`, que se utiliza para representar el proceso de razonamiento.

## Intensidad de Razonamiento de K3

`kimi-k3` siempre habilita el razonamiento. El cuerpo de la solicitud admite el campo `reasoning_effort` en el nivel superior, el único valor actualmente admitido es `max`; si se omite este campo, también se utilizará `max`. `standard`, `high` u otras cadenas pueden ser aceptadas de manera flexible por algunos sistemas compatibles, pero no garantizan un cambio en el comportamiento del razonamiento, no se debe depender de ello.

```bash theme={null}
curl https://api.acedata.cloud/kimi/chat/completions \
  -H "Authorization: Bearer $ACEDATACLOUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kimi-k3",
    "messages": [{"role": "user", "content": "Revisa este código y proporciona una solución de reparación"}],
    "reasoning_effort": "max"
  }'
```

Al usar el SDK de OpenAI, puedes pasar directamente este campo:

```python theme={null}
response = client.chat.completions.create(
    model="kimi-k3",
    messages=[{"role": "user", "content": "Diseña una cola de tareas confiable"}],
    reasoning_effort="max",
)
```

En diálogos de múltiples turnos y llamadas a herramientas, debes devolver el mensaje completo del asistente de la ronda anterior a `messages`, incluyendo `reasoning_content` y `tool_calls`.

### Referencia Oficial

* [Thinking Effort](https://platform.kimi.ai/docs/guide/use-thinking-effort): explica que Kimi K3 siempre habilita el razonamiento, el único valor actualmente admitido para `reasoning_effort` es `max`.
* [Model Parameter Reference](https://platform.kimi.ai/docs/api/models-overview): compara los parámetros de razonamiento, la ventana de contexto y las diferencias en las llamadas a herramientas entre K3 y la serie K2.
* [Create Chat Completion](https://platform.kimi.ai/docs/api/chat): solicitudes, respuestas y definiciones de campos de OpenAPI de Chat Completions oficiales de Moonshot.

## Respuesta en Flujo

Esta interfaz también admite respuestas en flujo, lo cual es muy útil para la integración web, ya que permite mostrar el contenido palabra por palabra.

Si deseas que la respuesta se devuelva en flujo, puedes cambiar el parámetro `stream` en el encabezado de la solicitud a `true`.

El cambio se muestra en la imagen, pero el código de llamada necesita tener los cambios correspondientes para admitir respuestas en flujo.

<p>
  <img src="https://cdn.acedata.cloud/a3nzpw.png" width="400" className="m-auto" />
</p>

Al cambiar `stream` a `true`, la API devolverá los datos JSON correspondientes línea por línea, y a nivel de código, necesitamos hacer los cambios necesarios para obtener los resultados línea por línea.

Código de ejemplo en Python:

```python theme={null}
import requests

url = "https://api.acedata.cloud/kimi/chat/completions"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "kimi-k3",
    "messages": [{"role":"user","content":"Hola"}],
    "reasoning_effort": "max",
    "stream": True
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

A continuación se extraen los bloques de datos de inicio, razonamiento, cuerpo, finalización y uso de una respuesta en flujo real de K3 Max:

```json theme={null}
data: {"id":"msg_er7WZjyv2kD3TG2yzbFPu5ZJ","object":"chat.completion.chunk","created":1784466598,"model":"kimi-k3","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":null}],"usage":null}

data: {"id":"msg_er7WZjyv2kD3TG2yzbFPu5ZJ","object":"chat.completion.chunk","created":1784466598,"model":"kimi-k3","choices":[{"index":0,"delta":{"reasoning_content":"El"},"finish_reason":null}],"usage":null}

data: {"id":"msg_er7WZjyv2kD3TG2yzbFPu5ZJ","object":"chat.completion.chunk","created":1784466598,"model":"kimi-k3","choices":[{"index":0,"delta":{"content":"Hola"},"finish_reason":null}],"usage":null}

data: {"id":"msg_er7WZjyv2kD3TG2yzbFPu5ZJ","object":"chat.completion.chunk","created":1784466598,"model":"kimi-k3","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":null}

data: {"id":"msg_er7WZjyv2kD3TG2yzbFPu5ZJ","object":"chat.completion.chunk","created":1784466598,"model":"kimi-k3","choices":[],"usage":{"prompt_tokens":172,"completion_tokens":168,"total_tokens":340}}

data: [DONE]
```

Se puede ver que hay muchos `data` en la respuesta, donde `data` contiene el `choices`, que es el contenido de la respuesta más reciente, consistente con lo que se describió anteriormente. `choices` es el contenido de respuesta nuevo, que puede integrarse en su sistema según los resultados. Al mismo tiempo, el final de la respuesta en flujo se determina según el contenido de `data`; si el contenido es `[DONE]`, significa que la respuesta en flujo ha terminado por completo. El resultado devuelto de `data` tiene varios campos, que se describen a continuación:

* `id`, el ID que genera esta tarea de conversación, utilizado para identificar de manera única esta tarea de conversación.
* `model`, el modelo seleccionado de la página oficial de Kimi.
* `choices`, la información de respuesta que Kimi proporciona en respuesta a la consulta.

JavaScript también es compatible, por ejemplo, el código de llamada en flujo de Node.js es el siguiente:

```javascript theme={null}
const options = {
  method: "post",
  headers: {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
  },
  body: JSON.stringify({
    "model": "kimi-k3",
    "messages": [{"role":"user","content":"Hola"}],
    "stream": true
  })
};

fetch("https://api.acedata.cloud/kimi/chat/completions", options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
```

Ejemplo de código en Java:

```java theme={null}
JSONObject jsonObject = new JSONObject();
jsonObject.put("model", "kimi-k3");
jsonObject.put("messages", [{"role":"user","content":"Hola"}]);
jsonObject.put("stream", true);
MediaType mediaType = "application/json; charset=utf-8".toMediaType();
RequestBody body = jsonObject.toString().toRequestBody(mediaType);
Request request = new Request.Builder()
  .url("https://api.acedata.cloud/kimi/chat/completions")
  .post(body)
  .addHeader("accept", "application/json")
  .addHeader("authorization", "Bearer {token}")
  .addHeader("content-type", "application/json")
  .build();

OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
System.out.print(response.body!!.string())
```

Otros lenguajes pueden ser reescritos de manera similar, el principio es el mismo.

## Diálogo en múltiples turnos

Si desea integrar la función de diálogo en múltiples turnos, necesita cargar múltiples consultas en el campo `messages`, ejemplos específicos de múltiples consultas se muestran en la imagen a continuación:

<p>
  <img src="https://cdn.acedata.cloud/g85v2a.png" width="400" className="m-auto" />
</p>

Código de ejemplo en Python:

```python theme={null}
import requests

url = "https://api.acedata.cloud/kimi/chat/completions"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "kimi-k3",
    "messages": [{"role":"assistant","content":"¡Hola! ¿Cómo puedo ayudarte hoy?"},{"role":"user","content":"¿Qué modelo eres?"}],
    "reasoning_effort": "max"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Al cargar múltiples consultas, se puede lograr fácilmente un diálogo en múltiples turnos. A continuación se muestra la respuesta real obtenida de K3 Max para esta solicitud (se omiten los campos de extensión no utilizados):

```json theme={null}
{
  "id": "msg_Rqp8nPGBDHWwBlL4VpxuafOp",
  "object": "chat.completion",
  "created": 1784466628,
  "model": "kimi-k3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Soy Kimi, un asistente de IA desarrollado por Moonshot AI (月之暗面). No tengo un identificador de versión de modelo público específico para compartir desde aquí."
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 134,
    "completion_tokens": 346,
    "total_tokens": 480
  }
}
```

Se puede ver que la información contenida en `choices` es consistente con el contenido de uso básico, que incluye el contenido específico de respuesta de Kimi para múltiples diálogos, lo que permite responder a las preguntas correspondientes según el contenido de múltiples diálogos.

## Manejo de errores

Al llamar a la API, si se encuentra con un error, la API devolverá el código de error y la información correspondiente. Por ejemplo:

* `400 token_mismatched`: Solicitud incorrecta, posiblemente debido a parámetros faltantes o inválidos.
* `400 api_not_implemented`: Solicitud incorrecta, posiblemente debido a parámetros faltantes o inválidos.
* `401 invalid_token`: No autorizado, token de autorización inválido o faltante.
* `429 too_many_requests`: Demasiadas solicitudes, ha superado el límite de tasa.
* `500 api_error`: Error interno del servidor, algo salió mal en el servidor.

### Ejemplo de respuesta de error

```
{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "la recuperación falló"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}
```

## Conclusión

A través de este documento, ha aprendido cómo usar la API de Kimi Chat Completion para implementar conversaciones normales, respuestas en flujo, diálogos en múltiples turnos, y cómo controlar la intensidad de razonamiento de K3 a través de `reasoning_effort`.
