Text Completions에서 Messages로 마이그레이션할 때는 다음과 같은 변경 사항을 고려해야 합니다.

입력과 출력

Text Completions와 Messages 사이의 가장 큰 변화는 모델 입력을 지정하고 모델에서 출력을 받는 방식입니다.

Text Completions에서는 입력이 원시 문자열입니다:

Python
prompt = "\n\nHuman: 안녕하세요\n\nAssistant: 안녕하세요, 저는 Claude입니다. 어떻게 도와드릴까요?\n\nHuman: 해당 과정을 설명해 주실 수 있나요?\n\nAssistant:"

Messages에서는 원시 프롬프트 대신 입력 메시지 목록을 지정합니다:

messages = [
  {"role": "user", "content": "안녕하세요."},
  {"role": "assistant", "content": "안녕하세요, 저는 Claude입니다. 어떻게 도와드릴까요?"},
  {"role": "user", "content": "해당 과정을 설명해 주실 수 있나요?"},
]

각 입력 메시지에는 rolecontent가 있습니다.

역할 이름

Text Completions API는 \n\nHuman:\n\nAssistant: 턴이 번갈아 나오는 것을 기대하지만, Messages API는 userassistant 역할을 기대합니다. 문서에서 “human” 또는 “user” 턴을 언급하는 것을 볼 수 있습니다. 이들은 동일한 역할을 나타내며, 앞으로는 “user”가 될 것입니다.

Text Completions에서는 모델이 생성한 텍스트가 응답의 completion 값으로 반환됩니다:

Python
>>> response = anthropic.completions.create(...)
>>> response.completion
" 안녕하세요, 저는 Claude입니다"

Messages에서는 응답이 content 값이며, 이는 콘텐츠 블록의 목록입니다:

Python
>>> response = anthropic.beta.messages.create(...)
>>> response.content
[{"type": "text", "text": "안녕하세요, 저는 Claude입니다"}]

Claude의 입에 단어 넣기

Text Completions에서는 Claude의 응답 일부를 미리 채울 수 있습니다:

Python
prompt = "\n\nHuman: 안녕하세요\n\nAssistant: 안녕하세요, 제 이름은"

Messages에서는 마지막 입력 메시지의 역할을 assistant로 지정하여 동일한 결과를 얻을 수 있습니다:

Python
messages = [
  {"role": "human", "content": "안녕하세요"},
  {"role": "assistant", "content": "안녕하세요, 제 이름은"},
]

이렇게 하면 응답 content는 마지막 입력 메시지 content에서 계속됩니다:

JSON
{
  "role": "assistant",
  "content": [{"type": "text", "text": " Claude입니다. 오늘 어떻게 도와드릴까요?" }],
  ...
}

시스템 프롬프트

Text Completions에서는 첫 번째 \n\nHuman: 턴 앞에 텍스트를 추가하여 시스템 프롬프트를 지정합니다:

Python
prompt = "오늘은 2024년 1월 1일입니다.\n\nHuman: 안녕하세요, Claude\n\nAssistant:"

Messages에서는 system 매개변수로 시스템 프롬프트를 지정합니다:

Python
anthropic.Anthropic().beta.messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    system="오늘은 2024년 1월 1일입니다.", # <-- 시스템 프롬프트
    messages=[
        {"role": "user", "content": "안녕하세요, Claude"}
    ]
)

모델 이름

Messages API에서는 전체 모델 버전(예: 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 매개변수. 모델이 지원하는 것보다 높은 값을 전달하면 유효성 검사 오류가 반환됩니다.

스트리밍 형식

Text Completions에서 "stream": true를 사용할 때 응답에는 completion, ping, error 서버 전송 이벤트 중 하나가 포함되었습니다. 자세한 내용은 Text Completions 스트리밍을 참조하세요.

Messages에는 다양한 유형의 여러 콘텐츠 블록이 포함될 수 있으므로 스트리밍 형식이 다소 복잡합니다. 자세한 내용은 Messages 스트리밍을 참조하세요.