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.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().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 时,响应包括 completionpingerror 服务器发送事件中的任何一个。有关详细信息,请参阅 Text Completions 流式传输

Messages 可以包含多个不同类型的内容块,因此其流式格式稍微复杂一些。有关详细信息,请参阅 Messages 流式传输