ES ▾
Obtener clave de API

Parámetros de la API de LLM: de los campos de solicitud a los de respuesta

Al ver la documentación de la API de chat completion por primera vez, la larga lista de parámetros puede asustar. Imagina una llamada como pedir comida: messages es tu conversación, temperature es cuánto improvisar, max_tokens la porción máxima, y tools permite llamar a la cocina. Esta guía lo explica todo con tablas.

Actualizado el

Puntos clave

  • messages incluye roles system, user, assistant y tool. El modelo no tiene memoria; tú debes proporcionar el historial.
  • temperature controla la aleatoriedad y top_p el rango de candidatos; suelen ser similares, ajusta solo uno.
  • finish_reason indica cómo tratar el resultado: stop es finalización normal, length es truncamiento, tool_calls requiere ejecutar funciones.
  • usage es la única fuente fiable para facturación y presupuesto; léelo siempre.

Aspecto de una solicitud

El endpoint es POST https://api.apidamoxing.com/v1/chat/completions, el encabezado de autenticación es Authorization: Bearer <key> y el cuerpo es JSON, compatible con la API de chat de OpenAI. Veamos una solicitud completa con campos comunes:

curl https://api.apidamoxing.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [
      {"role": "system", "content": "你是一位耐心的天文科普作者。"},
      {"role": "user", "content": "为什么月亮总是同一面朝向地球?"}
    ],
    "temperature": 0.7,
    "top_p": 0.9,
    "max_tokens": 400,
    "stop": ["###"]
  }'

Nota: model solo acepta uncensored porque el servicio tiene un solo modelo, sin opciones. Confírmalo con GET /v1/models. Explicamos campo por campo.

Los parámetros se dividen en: qué decir (messages, tools), cómo decirlo (temperature, top_p) y cuánto/parar (max_tokens, stop, stream). Clasifica cualquier campo desconocido para adivinar su uso.

messages: el "libro de actas" de la conversación

messages es un array con role y content. Es como un acta: el modelo lee todo desde cero cada vez. No recuerda, así que debes enviar el historial completo.

roleQuién escribeUso
systemTú (desarrollador)Define identidad, reglas y formato; colócalo al inicio
userUsuario finalPregunta o instrucción
assistantModelo (o historial añadido)Respuestas previas para contexto multironda
toolTu programaResultado de llamada a función, requiere tool_call_id

Un truco común: si quieres que el modelo continúe escribiendo con un tono específico, puedes construir un mensaje de assistant y añadirlo al historial. Recuerda que el prompt y la salida combinados no pueden superar los 100,000 tokens; cuanto más largo sea el historial, más espacio ocupará.

Ejemplo: asistente de soporte con system "responde solo sobre pedidos, máx. tres frases". Usuario pregunta por envío y luego "¿y la devolución?". La segunda petición incluye: system, user 1, assistant 1, user 2. Sin todo, el modelo no entiende "y la devolución".

Parámetros de muestreo: ajustar el "margen de maniobra"

El modelo asigna probabilidades a candidatos y luego hace un sorteo. Estos parámetros ajustan las reglas del sorteo:

ParámetroAnalogíaInterpretaciónValores comunes
temperatureCreatividad del chefCuanto más bajo, más conservador y estable; cuanto más alto, más dispersoDe 0 a 1.2; usa valores bajos para preguntas y respuestas, y altos para creación
top_pSortear solo entre los primeros puestosSolo se extrae de los candidatos cuya probabilidad acumulada alcanza pDe 0.8 a 1; el valor predeterminado suele ser suficiente

Ambos controlan «cuánta aleatoriedad» desde ángulos distintos. Ajustarlos a la vez dificulta saber de qué proviene el efecto, así que se recomienda modificar solo uno a la vez. Estos campos de muestreo estándar se reenvían tal cual; la API no los modifica.

Ejemplo: probabilidades 60%, 30%, 10%. Temperature bajo favorece al primero; alto los iguala. Con top_p 0.9, solo se conservan los dos primeros (90%). Números hipotéticos.

Control de longitud y detención: max_tokens, stop, stream

ParámetroFunciónPuntos clave
max_tokensLimita el máximo de tokens que se generarán en esta peticiónPredeterminado 2048, máximo por llamada 32,000; la suma con el prompt no debe superar 100,000
stopDetiene la generación al encontrar la cadena especificadaAcepta un array de cadenas; útil para segmentar o truncar formatos fijos
streamIndica si la respuesta se devuelve en streamingAl establecerlo en true se envían fragmentos vía SSE; al final se añade automáticamente un fragmento con usage

max_tokens es como el tamaño del plato: si es pequeño, la comida se retira antes de servirla y finish_reason será length. stop actúa como una señal convenida; el chef se detiene al recibirla. stream no cambia el contenido, solo la forma de entrega: en lugar de «todo listo para servir», se pasa a «servir por porciones», lo que hace que la respuesta se sienta más rápida.

stop tiene un uso muy práctico: si pides al modelo que siga el formato «Pregunta: …… Respuesta: ……###» y estableces ### como stop, la generación se detendrá automáticamente al llegar al separador, ahorrando tokens y evitando que el modelo añada texto innecesario. Ten en cuenta que, al activarse stop, finish_reason también será stop; si necesitas distinguir el motivo, debes inspeccionar el contenido tú mismo.

tools y tool_choice: permite que el modelo «llame» para consultarte

El modelo no puede acceder a datos en tiempo real. La función function calling consiste en indicarle qué funciones tienes disponibles; cuando lo considere necesario, en lugar de responder directamente, devuelve «Llama a la función X con los parámetros Y». Tu programa ejecuta la función y devuelve el resultado; el modelo lo usa para organizar la respuesta. El formato es compatible con OpenAI.

ParámetroValorDescripción
toolsArray de descripciones de funcionesCada elemento incluye name, description y parameters en formato JSON Schema
tool_choice"auto" / "none" / función específicaauto deja que el modelo decida; none deshabilita las llamadas; especificar una función fuerza su uso
import json
import os
from openai import OpenAI

client = OpenAI(base_url="https://api.apidamoxing.com/v1", api_key=os.environ["API_KEY"])

tools = [{
    "type": "function",
    "function": {
        "name": "get_tide_time",
        "description": "查询某港口今天的高潮时刻",
        "parameters": {
            "type": "object",
            "properties": {"port": {"type": "string", "description": "港口名称"}},
            "required": ["port"],
        },
    },
}]

messages = [{"role": "user", "content": "青岛今天几点涨潮?"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)
msg = first.choices[0].message

if msg.tool_calls:
    call = msg.tool_calls[0]
    args = json.loads(call.function.arguments)
    result = {"port": args["port"], "high_tide": "14:20"}   # 这里换成你自己的查询
    messages.append(msg)
    messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result, ensure_ascii=False)})
    final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
    print(final.choices[0].message.content)
else:
    print(msg.content)

El flujo tiene dos rondas: en la primera recibes tool_calls; en la segunda, añades el resultado con role tool y vuelves a solicitar. Cuanto más detallada sea la description, más claro tendrá el modelo cuándo llamar. Los parámetros son cadenas JSON; analízalas con json.loads y valida los datos antes de confiar en ellos.

Campos de respuesta: lee el «recibo» que devuelve la API

Una respuesta correcta tiene esta estructura fija:

{
  "id": "chatcmpl-xxxx",
  "object": "chat.completion",
  "model": "uncensored",
  "choices": [
    {
      "index": 0,
      "message": {"role": "assistant", "content": "因为潮汐锁定……"},
      "finish_reason": "stop"
    }
  ],
  "usage": {"prompt_tokens": 38, "completion_tokens": 212, "total_tokens": 250}
}
CampoSignificado
choicesArray de resultados; normalmente contiene un solo elemento, y el texto está en choices[0].message.content
finish_reasonMotivo de finalización: stop indica finalización normal; length indica truncamiento por alcanzar max_tokens; tool_calls indica que el modelo solicitó una llamada a función
usage.prompt_tokensTokens consumidos en la entrada
usage.completion_tokensTokens consumidos en la salida
usage.total_tokensSuma de ambos

En el código, revisa primero finish_reason: si es length, avisa al usuario de que el contenido se truncó o continúa automáticamente; si es tool_calls, sigue la rama de ejecución de funciones. El uso de usage se detalla con métodos de presupuesto en tokens y facturación.

Errores comunes con los parámetros

  • Tratar max_tokens como límite de entrada. Controla solo la salida; tú controlas la entrada.
  • Crear la ilusión de que el modelo recuerda la petición anterior. Cada petición es independiente; tú proporcionas el historial.
  • Asumir que temperature = 0 garantiza resultados idénticos. Aumenta la estabilidad, pero no asumas coincidencia carácter por carácter.
  • Leer directamente choices[0].message en modo streaming. Los bloques contienen delta; debes concatenarlos tú mismo.
  • Olvidaste añadir el mensaje del assistant con tool_calls tras la llamada a la herramienta, lo que provocó un error en la segunda ronda.

Puedes consultar el significado de los códigos de error y la estrategia de reintento en documentación. Para ver un ejemplo completo que conecta estos parámetros, consulta cómo crear un chatbot.

Preguntas frecuentes

Sí, pero es difícil aislar el efecto de cada uno. En la mayoría de los casos basta con ajustar temperature; modifica top_p solo cuando necesites un control fino del rango de candidatos.

Sí, pero es difícil separar los efectos. Usa solo temperature en la mayoría de casos; ajusta top_p solo si necesitas controlar el rango de candidatos.

Indica que la salida alcanzó el límite de max_tokens y se truncó. Puedes aumentar max_tokens hasta 32,000 o solicitar al modelo que genere por fragmentos.

Indica que la salida se truncó al alcanzar max_tokens. Puedes aumentar max_tokens hasta un límite de 32,000 o hacer que el modelo genere por fragmentos.

Sí. Usa tools y tool_choice con el formato de OpenAI; los tool_calls en la respuesta tienen la misma estructura.

Sí, usas el formato OpenAI de tools y tool_choice; tool_calls en la respuesta tiene la misma estructura.

Al activar stream, al final se añade automáticamente un fragmento con usage; solo debes leerlo, sin necesidad de parámetros adicionales.

Al activar stream, se añade un bloque final con usage. Léelo para obtener el uso sin parámetros extra.

Solo rellena el formulario para obtener la clave

Crea una cuenta, copia la clave y modifica la Base URL. La configuración es así de simple.

Obtener clave de API