Al migrar desde Completaciones de Texto a Mensajes, considere los siguientes cambios.

Entradas y salidas

El cambio más significativo entre las Completaciones de Texto y los Mensajes es la forma en que se especifican las entradas del modelo y se reciben las salidas del modelo.

Con Completaciones de Texto, las entradas son cadenas de texto sin procesar:

Python
prompt = "\n\nHuman: Hola\n\nAssistant: Hola, soy Claude. ¿En qué puedo ayudarte?\n\nHuman: ¿Puedes explicarme la Glucólisis?\n\nAssistant:"

Con Mensajes, especificas una lista de mensajes de entrada en lugar de un prompt sin procesar:

Cada mensaje de entrada tiene un role y content.

Nombres de roles

La API de Completaciones de Texto espera turnos alternados de \n\nHuman: y \n\nAssistant:, pero la API de Mensajes espera roles de user y assistant. Puede ver documentación que se refiera a turnos de “human” o “user”. Estos se refieren al mismo rol, y será “user” en adelante.

Con Completaciones de Texto, el texto generado por el modelo se devuelve en los valores completion de la respuesta:

Python
>>> response = anthropic.completions.create(...)
>>> response.completion
" Hola, soy Claude"

Con Mensajes, la respuesta es el valor content, que es una lista de bloques de contenido:

Python
>>> response = anthropic.messages.create(...)
>>> response.content
[{"type": "text", "text": "Hola, soy Claude"}]

Poniendo palabras en boca de Claude

Con Completaciones de Texto, puedes pre-llenar parte de la respuesta de Claude:

Python
prompt = "\n\nHuman: Hola\n\nAssistant: Hola, mi nombre es"

Con Mensajes, puedes lograr el mismo resultado haciendo que el último mensaje de entrada tenga el rol assistant:

Python
messages = [
  {"role": "human", "content": "Hola"},
  {"role": "assistant", "content": "Hola, mi nombre es"},
]

Al hacer esto, el content de la respuesta continuará desde el último mensaje de entrada content:

JSON
{
  "role": "assistant",
  "content": [{"type": "text", "text": " Claude. ¿En qué puedo ayudarte hoy?" }],
  ...
}

Prompt del sistema

Con Completaciones de Texto, el prompt del sistema se especifica agregando texto antes del primer turno \n\nHuman::

Python
prompt = "Hoy es 1 de enero de 2024.\n\nHuman: Hola, Claude\n\nAssistant:"

Con Mensajes, especificas el prompt del sistema con el parámetro system:

Python
anthropic.Anthropic().messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    system="Hoy es 1 de enero de 2024.", # <-- prompt del sistema
    messages=[
        {"role": "user", "content": "Hola, Claude"}
    ]
)

Nombres de modelos

La API de Mensajes requiere que especifiques la versión completa del modelo (por ejemplo, claude-3-opus-20240229).

Anteriormente admitíamos especificar solo el número de versión principal (por ejemplo, claude-2), lo que resultaba en actualizaciones automáticas a versiones menores. Sin embargo, ya no recomendamos este patrón de integración, y los Mensajes no lo admiten.

Razón de parada

Las Completaciones de Texto siempre tienen una stop_reason de:

  • "stop_sequence": El modelo terminó su turno naturalmente, o se generó una de tus secuencias de parada personalizadas.
  • "max_tokens": El modelo generó tu max_tokens especificado de contenido, o alcanzó su máximo absoluto.

Los Mensajes tienen una stop_reason de uno de los siguientes valores:

  • "end_turn": El turno de conversación terminó naturalmente.
  • "stop_sequence": Se generó una de tus secuencias de parada personalizadas especificadas.
  • "max_tokens": (sin cambios)

Especificando tokens máximos

  • Completaciones de Texto: parámetro max_tokens_to_sample. Sin validación, pero valores limitados por modelo.
  • Mensajes: parámetro max_tokens. Si se pasa un valor más alto que el que admite el modelo, devuelve un error de validación.

Formato de streaming

Al usar "stream": true con Completaciones de Texto, la respuesta incluía eventos enviados por el servidor de completion, ping y error. Consulta streaming de Completaciones de Texto para más detalles.

Los Mensajes pueden contener múltiples bloques de contenido de diferentes tipos, por lo que su formato de streaming es algo más complejo. Consulta streaming de Mensajes para más detalles.