Ao migrar de Text Completions para Messages, considere as seguintes mudanças.

Entradas e saídas

A maior mudança entre Text Completions e Messages é a maneira como você especifica as entradas do modelo e recebe as saídas do modelo.

Com Text Completions, as entradas são strings brutas:

Python
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 Messages, você especifica uma lista de mensagens de entrada em vez de um prompt bruto:

messages = [
  {"role": "user", "content": "Olá."},
  {"role": "assistant", "content": "Oi, eu sou o Claude. Como posso ajudar?"},
  {"role": "user", "content": "Você pode me explicar a Glicólise?"},
]

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 Text Completions, o texto gerado pelo modelo é retornado nos valores completion da resposta:

Python
>>> response = anthropic.completions.create(...)
>>> response.completion
" Oi, eu sou o Claude"

Com Messages, a resposta é o valor content, que é uma lista de blocos de conteúdo:

Python
>>> response = anthropic.beta.messages.create(...)
>>> response.content
[{"type": "text", "text": "Oi, eu sou o Claude"}]

Colocando palavras na boca do Claude

Com Text Completions, você pode pré-preencher parte da resposta do Claude:

Python
prompt = "\n\nHuman: Olá\n\nAssistant: Olá, meu nome é"

Com Messages, você pode obter o mesmo resultado fazendo com que a última mensagem de entrada tenha o papel assistant:

Python
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:

JSON
{
  "role": "assistant",
  "content": [{"type": "text", "text": " Claude. Como posso ajudá-lo hoje?" }],
  ...
}

Prompt do sistema

Com Text Completions, o prompt do sistema é especificado adicionando texto antes do primeiro turno \n\nHuman::

Python
prompt = "Hoje é 1º de janeiro de 2024.\n\nHuman: Olá, Claude\n\nAssistant:"

Com Messages, você especifica o prompt do sistema com o parâmetro system:

Python
anthropic.Anthropic().beta.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 Messages não o suporta.

Motivo de parada

Text Completions sempre têm 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 o max_tokens de conteúdo especificado por você ou atingiu seu máximo absoluto.

Messages têm 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 Text Completions, a resposta incluía qualquer um dos eventos enviados pelo servidor completion, ping e error. Consulte Streaming de Text Completions para obter detalhes.

Messages podem conter vários blocos de conteúdo de tipos variados e, portanto, seu formato de streaming é um pouco mais complexo. Consulte Streaming de Messages para obter detalhes.