Al migrar desde Text Completions a Messages, considera los siguientes cambios.

Entradas y salidas

El cambio más grande entre Text Completions y Messages es la forma en que especificas las entradas del modelo y recibes las salidas del modelo.

Con Text Completions, 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 Glicólisis?\n\nAssistant:"

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

messages = [
  {"role": "user", "content": "Hola."},
  {"role": "assistant", "content": "Hola, soy Claude. ¿En qué puedo ayudarte?"},
  {"role": "user", "content": "¿Puedes explicarme la Glicólisis?"},
]

Cada mensaje de entrada tiene un role y un content.

Nombres de roles

La API de Text Completions espera turnos alternados de \n\nHuman: y \n\nAssistant:, pero la API de Messages espera roles user y assistant. Puede que veas documentación refiriéndose a turnos de “human” o “user”. Estos se refieren al mismo rol, y en adelante será “user”.

Con Text Completions, 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 Messages, 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 Text Completions, puedes pre-llenar parte de la respuesta de Claude:

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

Con Messages, 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 hacerlo, el content de la respuesta continuará desde el content del último mensaje de entrada:

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

Prompt del sistema

Con Text Completions, 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 Messages, 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 Messages 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 Messages no lo admite.

Razón de parada

Text Completions siempre tiene una stop_reason de:

  • "stop_sequence": El modelo terminó su turno de forma natural, 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.

Messages tiene una stop_reason de uno de los siguientes valores:

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

Especificando max tokens

  • Text Completions: parámetro max_tokens_to_sample. Sin validación, pero valores limitados por modelo.
  • Messages: parámetro max_tokens. Si pasas un valor más alto de lo que el modelo admite, devuelve un error de validación.

Formato de streaming

Al usar "stream": true con Text Completions, la respuesta incluía cualquiera de los eventos enviados por el servidor completion, ping y error. Consulta Streaming de Text Completions para más detalles.

Messages puede contener múltiples bloques de contenido de varios tipos, por lo que su formato de streaming es algo más complejo. Consulta Streaming de Messages para más detalles.