使用 Converse API 呼叫工具 - Amazon Bedrock

使用 Converse API 呼叫工具

若要讓模型使用工具來完成訊息的回應,您可以將訊息和一或多個工具的定義傳送到模型。如果模型判斷其中一個工具可協助產生回應,則會傳回讓您使用該工具的請求,並將工具結果傳回給模型。模型接著會使用結果來產生對原始訊息的回應。

下列步驟說明如何搭配 Converse API 使用工具。如需範例程式碼,請參閱 Converse API 工具使用範例

步驟 1:傳送訊息和工具定義

若要傳送訊息和工具定義,您可以使用 ConverseConverseStream (用於串流回應) 操作。

注意

Meta 針對建立將工具搭配 Llama 3.1 (或更新版本) 模型使用的提示,提出具體的建議。如需詳細資訊,請參閱 Meta 文件中的 JSON 型工具呼叫

工具的定義是您在 toolConfig(ToolConfiguration) 請求參數中傳遞給 Converse 操作的 JSON 結構描述。如需有關結構描述的資訊,請參閱 JSON 結構描述。以下是工具的範例結構描述,該工具會取得在廣播電台上播放的熱門歌曲。

{ "tools": [ { "toolSpec": { "name": "top_song", "description": "Get the most popular song played on a radio station.", "inputSchema": { "json": { "type": "object", "properties": { "sign": { "type": "string", "description": "The call sign for the radio station for which you want the most popular song. Example calls signs are WZPZ and WKRP." } }, "required": [ "sign" ] } } } } ] }

在相同的請求中,您也會在 messages(訊息) 請求參數中傳遞使用者訊息。

[ { "role": "user", "content": [ { "text": "What is the most popular song on WZPZ?" } ] } ]

如果您使用的是 Anthropic Claude 3 模型,您可以透過在 toolConfig 請求參數中指定 toolChoice(ToolChoice) 欄位,強制使用工具。強制使用工具有助於在開發期間測試工具。下列範例示範如何強制使用名為 top_song 的工具。

{"tool" : {"name" : "top_song"}}

如需您可傳遞之其他參數的詳細資訊,請參閱與 Converse API 操作進行對話

步驟 2:從模型取得工具請求

當您使用訊息和工具定義調用 Converse 操作時,模型會使用工具定義來判斷是否需要工具來回答訊息。例如,如果您的聊天應用程式使用者傳送 WZPZ 上最熱門的歌曲是哪一首?訊息,則模型會將訊息與 top_song 工具定義中的結構描述比對,並判斷該工具是否有助於產生回應。

當模型判定需要工具來產生回應時,模型會將 stopReason 回應欄位設定為 tool_use。回應也會識別模型希望您執行的工具 (top_song),及其希望您使用工具查詢的廣播電台 (WZPZ)。所請求工具的相關資訊位在模型於 output (ConverseOutput) 欄位傳回的訊息中。特別是 toolUse(ToolUseBlock) 欄位。您可以在稍後的呼叫中使用 toolUseId 欄位來識別工具請求。

下列範例顯示當您傳遞在 步驟 1:傳送訊息和工具定義 中討論的訊息時,來自 Converse 的回應。

{ "output": { "message": { "role": "assistant", "content": [ { "toolUse": { "toolUseId": "tooluse_kZJMlvQmRJ6eAyJE5GIl7Q", "name": "top_song", "input": { "sign": "WZPZ" } } } ] } }, "stopReason": "tool_use" }

步驟 3:提出模型的工具請求

從模型回應中的 toolUse 欄位,使用 name 欄位來識別工具的名稱。然後呼叫該工具的實作,並從 input 欄位傳遞輸入參數。

接著,建構包含 toolResult(ToolResultBlock) 內容區塊的使用者訊息。在內容區塊中,包含來自該工具的回應,以及您在上一個步驟中所取得工具請求的 ID。

{ "role": "user", "content": [ { "toolResult": { "toolUseId": "tooluse_kZJMlvQmRJ6eAyJE5GIl7Q", "content": [ { "json": { "song": "Elemental Hotel", "artist": "8 Storey Hike" } } ] } } ] }

如果工具中發生錯誤,例如請求不存在的廣播電台,您可以在 toolResult 欄位中將錯誤資訊傳送至模型。若要指出錯誤,請在 status 欄位中指定 error。下列範例錯誤表示工具找不到廣播電台。

{ "role": "user", "content": [ { "toolResult": { "toolUseId": "tooluse_kZJMlvQmRJ6eAyJE5GIl7Q", "content": [ { "text": "Station WZPA not found." } ], "status": "error" } } ] }

步驟 4:取得模型回應

繼續與模型的對話,方法是在對 Converse 的呼叫中包含您在上一個步驟建立的使用者訊息。模型接著會產生回應,以您在訊息的 toolResult 欄位中提供的資訊回應原始訊息 (WZPZ 上最熱門的歌曲是哪一首?)。

{ "output": { "message": { "role": "assistant", "content": [ { "text": "The most popular song on WZPZ is Elemental Hotel by 8 Storey Hike." } ] } }, "stopReason": "end_turn"