Migrating from Text Completions
Миграция с Text Completions на Messages
При миграции с Text Completions на Messages учитывайте следующие изменения.
Входные и выходные данные
Самое большое изменение между Text Completions и Messages - это способ указания входных данных модели и получения выходных данных от модели.
В Text Completions входные данные представляют собой необработанные строки:
prompt = "\n\nHuman: Привет\n\nAssistant: Привет, я Claude. Чем я могу помочь?\n\nHuman: Можешь объяснить мне гликолиз?\n\nAssistant:"
В Messages вы указываете список входных сообщений вместо необработанного промпта:
Каждое входное сообщение имеет role
и content
.
Названия ролей
API Text Completions ожидает чередующиеся реплики \n\nHuman:
и \n\nAssistant:
, но API Messages ожидает роли user
и assistant
. Вы можете увидеть в документации упоминания как “human”, так и “user”. Они относятся к одной и той же роли, и в дальнейшем будет использоваться “user”.
В Text Completions сгенерированный моделью текст возвращается в значениях completion
ответа:
>>> response = anthropic.completions.create(...)
>>> response.completion
" Привет, я Claude"
В Messages ответ - это значение content
, которое представляет собой список блоков контента:
>>> response = anthropic.messages.create(...)
>>> response.content
[{"type": "text", "text": "Привет, я Claude"}]
Вкладывание слов в уста Claude
В Text Completions вы можете предварительно заполнить часть ответа Claude:
prompt = "\n\nHuman: Привет\n\nAssistant: Привет, меня зовут"
В Messages вы можете достичь того же результата, сделав последнее входное сообщение с ролью assistant
:
messages = [
{"role": "human", "content": "Привет"},
{"role": "assistant", "content": "Привет, меня зовут"},
]
При этом content
ответа будет продолжением content
последнего входного сообщения:
{
"role": "assistant",
"content": [{"type": "text", "text": " Claude. Чем я могу вам помочь сегодня?" }],
...
}
Системный промпт
В Text Completions системный промпт указывается путем добавления текста перед первой репликой \n\nHuman:
:
prompt = "Сегодня 1 января 2024 года.\n\nHuman: Привет, Claude\n\nAssistant:"
В Messages вы указываете системный промпт с помощью параметра system
:
anthropic.Anthropic().messages.create(
model="claude-3-opus-20240229",
max_tokens=1024,
system="Сегодня 1 января 2024 года.", # <-- системный промпт
messages=[
{"role": "user", "content": "Привет, Claude"}
]
)
Названия моделей
API Messages требует указания полной версии модели (например, claude-3-opus-20240229
).
Ранее мы поддерживали указание только основного номера версии (например, claude-2
), что приводило к автоматическому обновлению до дополнительных версий. Однако мы больше не рекомендуем этот шаблон интеграции, и Messages его не поддерживает.
Причина остановки
Text Completions всегда имеют stop_reason
либо:
"stop_sequence"
: Модель либо естественным образом завершила свою очередь, либо была сгенерирована одна из ваших пользовательских стоп-последовательностей."max_tokens"
: Либо модель сгенерировала указанное вами количествоmax_tokens
контента, либо достигла своего абсолютного максимума.
Messages имеют stop_reason
одного из следующих значений:
"end_turn"
: Диалоговый ход естественным образом завершился."stop_sequence"
: Была сгенерирована одна из указанных вами пользовательских стоп-последовательностей."max_tokens"
: (без изменений)
Указание максимального количества токенов
- Text Completions: параметр
max_tokens_to_sample
. Нет валидации, но ограниченные значения для каждой модели. - Messages: параметр
max_tokens
. Если передать значение, превышающее поддерживаемое моделью, возвращается ошибка валидации.
Формат потоковой передачи
При использовании "stream": true
в Text Completions ответ включал любые из completion
, ping
и error
серверных событий. Подробнее см. в Text Completions streaming.
Messages могут содержать несколько блоков контента различных типов, поэтому формат потоковой передачи несколько более сложный. Подробнее см. в Messages streaming.