本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Converse API
要使用 Converse API,您可以调用Converse
或ConverseStream
操作向模型发送消息。要调用 Converse
,需具有 bedrock:InvokeModel
操作的权限。要调用 ConverseStream
,需具有 bedrock:InvokeModelWithResponseStream
操作的权限。
请求
当您使用 Amazon Bedrock 运行时终端节点发出 C onvers e 请求时,可以包含以下字段:
-
model iD — 标题中的必填参数,允许您指定用于推理的资源。
-
以下字段允许您自定义提示:
-
消息-用于指定提示的内容和角色。
-
system-用于指定系统提示,用于定义模型的指令或上下文。
-
InferenceConfig — 用于指定所有模型通用的推理参数。推理参数会影响响应的生成。
-
additionalModelRequest字段-用于指定特定于运行推理的模型的推理参数。
-
prompt Variables —(如果您使用提示管理中的提示)使用此字段定义提示中要填写的变量以及填充变量的值。
-
-
以下字段允许您自定义响应的返回方式:
-
GuardrailConfig — 使用此字段可以包含适用于整个提示的护栏。
-
ToolConfig-使用此字段可以包含一个帮助模型生成响应的工具。
-
additionalModelResponseFieldPaths— 使用此字段指定要作为 JSON 指针对象返回的字段。
-
-
requestMet adata-使用此字段可以包含在使用调用日志时可以筛选的元数据。
注意
当您使用带有Converse
或的 Prompt 管理提示时,以下限制适用ConverseStream
:
-
您不能包含
additionalModelRequestFields
、inferenceConfig
system
、或toolConfig
字段。 -
如果包含该
messages
字段,则消息将附加在提示中定义的消息之后。 -
如果包含该
guardrailConfig
字段,则护栏将应用于整个提示。如果您在ContentBlock字段中包含guardContent
方块,则护栏将仅应用于这些方块。
展开一个部分以了解有关Converse
请求正文中某个字段的更多信息:
该messages
字段是一组 M es sage 对象,每个对象都定义了用户和模型之间的消息。Message
对象包含以下字段:
-
ro le — 定义消息是来自
user
(发送给模型的提示)还是assistant
(模型响应)。 -
内容-定义提示中的内容。
注意
Amazon Bedrock 不会存储您作为内容提供的任何文本、图像或文档。数据仅用于生成响应。
您可以通过在后续Converse
请求中包含对话中的所有消息并使用该role
字段指定消息是来自用户还是模型来维护对话上下文。
该content
字段映射到一个ContentBlock对象数组。在每个字段ContentBlock中,您可以指定以下字段之一(要查看哪些模型支持哪些模块,请参阅支持的模型和模型功能):
注意
以下限制适用于 content
字段:
-
您最多可以包含 20 个图像。每个图像的大小、高度和宽度必须分别不超过 3.75 MB、8000 像素和 8000 像素。
-
您最多可以包含五个文档。每个文档的大小不得超过 4.5 MB。
-
如果
role
是user
,则只能包含图像和文档。
在以下 messages
示例中,用户要求提供一个包含三首流行歌曲的列表,模型生成了一个歌曲列表。
[ { "role": "user", "content": [ { "text": "Create a list of 3 pop songs." } ] }, { "role": "assistant", "content": [ { "text": "Here is a list of 3 pop songs by artists from the United Kingdom:\n\n1. \"As It Was\" by Harry Styles\n2. \"Easy On Me\" by Adele\n3. \"Unholy\" by Sam Smith and Kim Petras" } ] } ]
系统提示是一种提示,它向模型提供有关其应执行的任务或在对话中应采用的角色的说明或上下文。您可以在 system
(SystemContentBlock) 字段中为请求指定系统提示列表,如以下示例所示。
[ { "text": "You are an app that creates play lists for a radio station that plays rock and pop music. Only return song names and the artist. " } ]
ConverseAPI 支持您在inferenceConfig
字段 (InferenceConfiguration) 中设置的一组基本推理参数。基本推理参数集包括:
-
MaxTokens – 允许在生成的响应中使用的最大词元数。
-
stopSequences – 停止序列的列表。停止序列是一个字符序列,会使模型停止生成响应。
-
temperature – 模型在生成响应时选择更高概率选项的可能性。
-
topP – 模型为下一个词元考虑的最有可能的候选项所占百分比。
有关更多信息,请参阅 利用推理参数影响响应生成。
以下示例 JSON 设置了 temperature
推理参数。
{"temperature": 0.5}
如果您使用的模型具有其他推理参数,则可以通过在 additionalModelRequestFields
字段中将其指定为 JSON 来设置这些参数。以下示例 JSON 演示了如何设置 top_k
,该参数在 Anthropic Claude 模型中可用,但不是 messages API 中的基本推理参数。
{"top_k": 200}
如果您将提示管理中的提示指定modelId
为运行推理的资源,请使用此字段用实际值填充提示变量。该promptVariables
字段映射到一个 JSON 对象,其键对应于提示中定义的变量,以及用于替换变量的值。
例如,假设你有一个提示,上面写着Make me a
。提示的 ID 是{{genre}}
playlist consisting of the following number of songs: {{number}}
.PROMPT12345
,其版本是1
。您可以发送以下Converse
请求来替换变量:
POST /model/arn:aws:bedrock:us-east-1:111122223333:prompt/PROMPT12345:1/converse HTTP/1.1 Content-type: application/json { "promptVariables": { "genre" : "pop", "number": 3 } }
您可以通过添加此字段来应用您使用 A mazon Bedrock Guardrails 创建的护栏。要将护栏应用于对话中的特定消息,请将该消息包含在中。GuardrailConverseContentBlock如果您在请求正文中未包含任何 GuardrailConverseContentBlock
s,则会将护栏应用于该字段中的所有消息。messages
有关示例,请参阅在 API 中加入护栏 Converse。
此字段允许您定义一个工具供模型用来帮助其生成响应。有关更多信息,请参阅 使用工具完成 Amazon Bedrock 模型响应。
您可以在 additionalModelResponseFieldPaths
字段中指定其他模型参数的路径,如以下示例所示。
[ "/stop_sequence" ]
API 会返回您在 additionalModelResponseFields
字段中请求的其他字段。
此字段映射到一个 JSON 对象。您可以在此对象中指定它们映射到的元数据键和值。您可以使用请求元数据来帮助您筛选模型调用日志。
您也可以选择向system
或tools
字段添加缓存检查点以使用提示缓存,具体取决于您使用的模型。有关更多信息,请参阅 提示缓存以加快模型推断速度。
响应
您从 Converse API 获得的响应取决于您调用的操作Converse
或ConverseStream
。
Converse 响应
在来自的响应中Converse
,output
字段 (ConverseOutput) 包含模型生成的消息(消息)。消息内容位于 content
(ContentBlock) 字段中,消息对应的角色(user
或assistant
)位于该role
字段中。
如果您使用了提示缓存,则在 usage 字段中,cacheReadInputTokensCount
分别cacheWriteInputTokensCount
告诉您从缓存中读取和写入缓存的令牌总数。
字metrics
段 (ConverseMetrics) 包含呼叫的指标。要确定模型停止生成内容的原因,请检查 stopReason
字段。通过选中usage
字段 (TokenUsage),您可以获取有关在请求中传递给模型的令牌以及响应中生成的令牌的信息。如果您在请求中指定了其他响应字段,API 会在 additionalModelResponseFields
字段中将其作为 JSON 返回。
以下示例演示了您在传递 请求 中讨论的提示时 Converse
的响应。
{ "output": { "message": { "role": "assistant", "content": [ { "text": "Here is a list of 3 pop songs by artists from the United Kingdom:\n\n1. \"Wannabe\" by Spice Girls\n2. \"Bitter Sweet Symphony\" by The Verve \n3. \"Don't Look Back in Anger\" by Oasis" } ] } }, "stopReason": "end_turn", "usage": { "inputTokens": 125, "outputTokens": 60, "totalTokens": 185 }, "metrics": { "latencyMs": 1175 } }
ConverseStream 响应
如果您调用 ConverseStream
以流式传输来自模型的响应,则会在 stream
响应字段中返回该流。流按以下顺序发出以下事件。
-
messageStart
(MessageStartEvent)。 消息的开始事件。包括消息的角色。 -
contentBlockStart
(ContentBlockStartEvent)。 内容区块启动事件。仅用于实现工具使用。 -
contentBlockDelta
(ContentBlockDeltaEvent)。 内容区块增量事件。包括以下内容之一:-
text
— 模型生成的部分文本。 -
reasoningContent
— 模型为生成响应而进行的部分推理。除了在后续Converse
请求中提交之前的所有消息外signature
,您还必须提交返回的消息。如果任何消息发生更改,则响应会引发错误。 -
toolUse
— 用于工具的部分输入 JSON 对象。
-
-
contentBlockStop
(ContentBlockStopEvent)。 内容屏蔽停止事件。 -
messageStop
(MessageStopEvent)。 消息的停止事件。包括模型停止生成输出的原因。 -
metadata
(ConverseStreamMetadataEvent)。 请求的元数据。元数据包括usage
(TokenUsage) 中的令牌使用情况和metrics
(ConverseStreamMetadataEvent) 中调用的指标。
ConverseStream 将完整的内容块作为ContentBlockStartEvent
事件、一个或多个事件和一个ContentBlockDeltaEvent
ContentBlockStopEvent
事件进行流式传输。使用 contentBlockIndex
字段作为索引,关联构成内容块的事件。
以下示例是来自 ConverseStream
的部分响应。
{'messageStart': {'role': 'assistant'}} {'contentBlockDelta': {'delta': {'text': ''}, 'contentBlockIndex': 0}} {'contentBlockDelta': {'delta': {'text': ' Title'}, 'contentBlockIndex': 0}} {'contentBlockDelta': {'delta': {'text': ':'}, 'contentBlockIndex': 0}} . . . {'contentBlockDelta': {'delta': {'text': ' The'}, 'contentBlockIndex': 0}} {'messageStop': {'stopReason': 'max_tokens'}} {'metadata': {'usage': {'inputTokens': 47, 'outputTokens': 20, 'totalTokens': 67}, 'metrics': {'latencyMs': 100.0}}}