Migrando do Text Completions
Migrando do Text Completions para Messages
Ao migrar do Text Completions para Messages, considere as seguintes mudanças.
Entradas e saídas
A maior mudança entre o Text Completions e o Messages é a maneira como você especifica as entradas do modelo e recebe as saídas do modelo.
Com o Text Completions, as entradas são strings brutas:
prompt = "\n\nHuman: Olá\n\nAssistant: Oi, eu sou o Claude. Como posso ajudar?\n\nHuman: Você pode me explicar a Glicólise?\n\nAssistant:"
Com o Messages, você especifica uma lista de mensagens de entrada em vez de um prompt bruto:
Cada mensagem de entrada tem um role
e um content
.
Nomes dos papéis
A API Text Completions espera turnos alternados de \n\nHuman:
e \n\nAssistant:
, mas a API Messages espera os papéis user
e assistant
. Você pode ver a documentação se referindo a turnos de “human” ou “user”. Eles se referem ao mesmo papel e serão “user” daqui para frente.
Com o Text Completions, o texto gerado pelo modelo é retornado nos valores completion
da resposta:
>>> response = anthropic.completions.create(...)
>>> response.completion
" Oi, eu sou o Claude"
Com o Messages, a resposta é o valor content
, que é uma lista de blocos de conteúdo:
>>> response = anthropic.messages.create(...)
>>> response.content
[{"type": "text", "text": "Oi, eu sou o Claude"}]
Colocando palavras na boca do Claude
Com o Text Completions, você pode pré-preencher parte da resposta do Claude:
prompt = "\n\nHuman: Olá\n\nAssistant: Olá, meu nome é"
Com o Messages, você pode obter o mesmo resultado fazendo com que a última mensagem de entrada tenha o papel assistant
:
messages = [
{"role": "human", "content": "Olá"},
{"role": "assistant", "content": "Olá, meu nome é"},
]
Ao fazer isso, o content
da resposta continuará a partir do content
da última mensagem de entrada:
{
"role": "assistant",
"content": [{"type": "text", "text": " Claude. Como posso ajudá-lo hoje?" }],
...
}
Prompt do sistema
Com o Text Completions, o prompt do sistema é especificado adicionando texto antes do primeiro turno \n\nHuman:
:
prompt = "Hoje é 1º de janeiro de 2024.\n\nHuman: Olá, Claude\n\nAssistant:"
Com o Messages, você especifica o prompt do sistema com o parâmetro system
:
anthropic.Anthropic().messages.create(
model="claude-3-opus-20240229",
max_tokens=1024,
system="Hoje é 1º de janeiro de 2024.", # <-- prompt do sistema
messages=[
{"role": "user", "content": "Olá, Claude"}
]
)
Nomes dos modelos
A API Messages requer que você especifique a versão completa do modelo (por exemplo, claude-3-opus-20240229
).
Anteriormente, suportávamos especificar apenas o número da versão principal (por exemplo, claude-2
), o que resultava em atualizações automáticas para versões secundárias. No entanto, não recomendamos mais esse padrão de integração, e o Messages não o suporta.
Motivo de parada
O Text Completions sempre tem um stop_reason
de:
"stop_sequence"
: O modelo terminou seu turno naturalmente ou uma de suas sequências de parada personalizadas foi gerada."max_tokens"
: O modelo gerou omax_tokens
de conteúdo especificado por você ou atingiu seu máximo absoluto.
O Messages tem um stop_reason
de um dos seguintes valores:
"end_turn"
: O turno da conversa terminou naturalmente."stop_sequence"
: Uma de suas sequências de parada personalizadas especificadas foi gerada."max_tokens"
: (inalterado)
Especificando o máximo de tokens
- Text Completions: parâmetro
max_tokens_to_sample
. Sem validação, mas valores limitados por modelo. - Messages: parâmetro
max_tokens
. Se passar um valor maior do que o modelo suporta, retorna um erro de validação.
Formato de streaming
Ao usar "stream": true
com o Text Completions, a resposta incluía qualquer um dos eventos enviados pelo servidor completion
, ping
e error
. Consulte Streaming do Text Completions para obter detalhes.
O Messages pode conter vários blocos de conteúdo de tipos variados e, portanto, seu formato de streaming é um pouco mais complexo. Consulte Streaming do Messages para obter detalhes.