當從 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":(不變)

指定最大 tokens

  • Text Completions:max_tokens_to_sample 參數。沒有驗證,但每個模型有上限值。
  • Messages:max_tokens 參數。如果傳遞的值高於模型支持的值,則返回驗證錯誤。

流式格式

在 Text Completions 中使用 "stream": true 時,響應包括 completionpingerror 服務器發送事件中的任何一個。有關詳細信息,請參閱 Text Completions 流式傳輸

Messages 可以包含多個不同類型的內容塊,因此其流式格式稍微複雜一些。有關詳細信息,請參閱 Messages 流式傳輸