Migrando desde Text Completions
Migrando desde Text Completions a Messages
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:
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:
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:
>>> 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:
>>> 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:
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
:
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:
{
"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:
:
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
:
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ó tumax_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.