从 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
。
角色名称
Text Completions API 期望交替的 \n\nHuman:
和 \n\nAssistant:
轮次,但 Messages API 期望 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 = "今天是2024年1月1日。\n\nHuman: 你好,Claude\n\nAssistant:"
使用 Messages,你可以使用 system
参数指定系统提示:
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
时,响应包括 completion
、ping
和 error
服务器发送事件中的任何一个。有关详细信息,请参阅 Text Completions 流式传输。
Messages 可以包含多个不同类型的内容块,因此其流式格式稍微复杂一些。有关详细信息,请参阅 Messages 流式传输。