使用 Converse API
若要使用 Converse API,您可以呼叫 Converse 或 ConverseStream 操作,將訊息傳送到模型。若要呼叫 Converse,您需要 bedrock:InvokeModel 操作的許可。若要呼叫 ConverseStream,您需要 bedrock:InvokeModelWithResponseStream 操作的許可。
請求
使用 Amazon Bedrock 執行時期端點提出 Converse 請求時,您可以包含下列欄位:
-
modelId:標頭中的必要參數,可讓您指定用於推論的資源。
-
下列欄位可讓您自訂提示:
-
訊息:用來指定提示的內容和角色。
-
系統:用來指定系統提示,以定義模型的指示或內容。
-
inferenceConfig:用來指定所有模型通用的推論參數。影響回應產生的推論參數。
-
additionalModelRequestFields:用來指定與您執行推論所用之模型所特有的推論參數。
-
promptVariables:(如果您使用提示管理中的提示) 使用此欄位來定義提示中要填入的變數,以及要填入這些變數的值。
-
-
下列欄位可讓您自訂回應的傳回方式:
-
guardrailConfig:使用此欄位來包含要套用至整個提示的防護機制。
-
toolConfig:使用此欄位來包含工具,以協助模型產生回應。
-
additionalModelResponseFieldPaths:使用此欄位指定要作為 JSON 指標物件傳回的欄位。
-
-
requestMetadata:使用此欄位來包含可在使用調用日誌時篩選的中繼資料。
注意
當您搭配 Converse 或 ConverseStream 使用提示管理提示時,適用下列限制:
-
您無法包含
additionalModelRequestFields、inferenceConfig、system或toolConfig欄位。 -
如果您包含
messages欄位,會將訊息附加在提示中定義的訊息之後。 -
如果您包含
guardrailConfig欄位,則防護機制會套用至整個提示。如果您在 ContentBlock 欄位中包含guardContent區塊,防護機制只會套用至那些區塊。
展開區段以進一步了解 Converse 請求內文中的欄位:
messages 欄位是 Message 物件的陣列,每個項目都會定義使用者與模型之間的訊息。Message 物件包含下列欄位:
-
角色:定義訊息是來自
user(傳送至模型的提示) 還是assistant(模型回應)。 -
內容:在提示中定義內容。
注意
Amazon Bedrock 不會存放您作為內容提供的任何文字、影像或文件。資料僅用於產生回應。
您可以在後續 Converse 請求中包含對話中的所有訊息,並使用 role 欄位來指定訊息是來自使用者或模型,以維護對話內容。
content 欄位會對應至 ContentBlock 物件的陣列。在每個 ContentBlock 中,您可以指定下列其中一個欄位 (若要查看哪些模型支援哪些區塊,請參閱支援的模型和模型功能):
注意
下列限制與 content 欄位相關:
-
您最多可以包含 20 個影像。每個影像的大小、高度和寬度分別不得超過 3.75 MB、8,000 px 和 8,000 px。
-
您最多可以包含五個文件。每個文件的大小不得超過 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. " } ]
Converse API 支援一組您在 inferenceConfig 欄位 (InferenceConfiguration) 中設定的推論參數。推論參數的基本集合為:
-
maxTokens – 產生的回應中允許的字符數目上限。
-
stopSequences – 停止序列的清單。停止序列是使模型停止產生回應的字元序列。
-
temperature – 模型產生回應時,選取較高機率選項的可能性。
-
topP – 模型考慮下一個字符時,最可能的候選項目百分比。
如需詳細資訊,請參閱 使用推論參數影響回應生成。
下列範例 JSON 會設定 temperature 推論參數。
{"temperature": 0.5}
如果您使用的模型有其他推論參數,您可以在 additionalModelRequestFields 欄位中將那些參數指定為 JSON,以設定參數。下列範例 JSON 說明如何設定可在 Anthropic Claude 模型中使用的 top_k (但其不是訊息 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 } }
您可以包含此欄位,套用使用 Amazon Bedrock 防護機制建立的防護機制。若要將防護機制套用至對話中的特定訊息,請在 GuardrailConverseContentBlock 中包含訊息。如果您在請求內文中未包含任何 GuardrailConverseContentBlock,則會將防護機制套用至 messages 欄位中的所有訊息。如需範例,請參閱「包含防護機制與 Converse API 」。
此欄位可讓您為模型定義工具,以用於協助產生回應。如需詳細資訊,請參閱 使用工具完成 Amazon Bedrock 模型回應。
您可以如下列範例所示,在 additionalModelResponseFieldPaths 欄位中指定其他模型參數的路徑。
[ "/stop_sequence" ]
API 會傳回您在 additionalModelResponseFields 欄位中請求的其他欄位。
此欄位會對應至 JSON 物件。您可以指定中繼資料金鑰和其在此物件中所對應的值。您可以使用請求中繼資料來協助您篩選模型調用日誌。
視使用的模型而定,您也可以選擇將快取檢查點新增至 system 或 tools 欄位,以使用提示快取。如需詳細資訊,請參閱 提示快取可加快模型推論速度。
回應
您從 Converse API 取得的回應取決於您呼叫的操作 (Converse 或 ConverseStream)。
Converse 回應
在來自 Converse 的回應中,output 欄位 (ConverseOutput) 包含模型產生的訊息 (訊息)。訊息內容位於 content (ContentBlock) 欄位中,而訊息對應的角色 (user 或 assistant) 位於 role 欄位中。
如果您使用提示快取,請在用量欄位中,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}}}