

# ツールの選択
<a name="tool-choice"></a>

Amazon Nova モデルは、*ツール選択*の機能をサポートしています。ツールの選択により、開発者はツールの呼び出し方法を制御できます。ツールの選択には、`tool`、`any`、`auto` の 3 つのパラメータオプションがサポートされています。
+ **ツール** – 指定されたツールは 1 回呼び出されます。
+ **任意** – 提供されたツールの 1 つが少なくとも 1 回呼び出されます。
+ **自動** – モデルはツールを呼び出すかどうかを決定し、必要に応じて複数のツールが呼び出されます。

------
#### [ Tool ]

ツールの選択として `tool` を使用すると、モデルが呼び出す特定のツールを制御できます。以下の例では、レスポンスを一貫した方法でフォーマットする必要がある構造化された出力ユースケースを用いて、この点を明確に示しています。

```
tool_config = {
    "toolChoice": {
        "tool": { "name" : "extract_recipe"}
    },
    "tools": [
        {
            "toolSpec": {
                "name": "extract_recipe",
                "description": "Extract recipe for cooking instructions",
                "inputSchema": {
                    "json": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": "string",
                                "description": "Name of the recipe"
                            },
                            "description": {
                                "type": "string",
                                "description": "Brief description of the dish"
                            },
                            "ingredients": {
                                "type": "array",
                                "items": {
                                    "type": "string",
                                    "description": "Name of ingredient"
                                }
                            }
                        },
                        "required": ["name", "description", "ingredients"]
                    }
                }
            }
        }
    ]
}
```

------
#### [ Any ]

ツールの選択として `any` を使用すると、毎回少なくとも 1 つのツールが呼び出されるようにできます。呼び出すツールの決定はモデルに委ねられますが、常にツールが返されます。以下の例では、API 選択エンドポイントのユースケースでのツール選択の使用に焦点を当てています。これは、モデルが特定のツールを返すように要求することが役立つ場合の例の 1 つです。

```
tool_config = {
    "toolChoice": {
        "any": {}
    },
    "tools": [
         {
            "toolSpec": {
                "name": "get_all_products",
                "description": "API to retrieve multiple products with filtering and pagination options",
                "inputSchema": {
                    "json": {
                        "type": "object",
                        "properties": {
                            "sort_by": {
                                "type": "string",
                                "description": "Field to sort results by. One of: price, name, created_date, popularity",
                                "default": "created_date"
                            },
                            "sort_order": {
                                "type": "string",
                                "description": "Order of sorting (ascending or descending). One of: asc, desc",
                                "default": "desc"
                            },
                        },
                        "required": []
                    }
                }
            }
        },
        {
            "toolSpec": {
                "name": "get_products_by_id",
                "description": "API to retrieve retail products based on search criteria",
                "inputSchema": {
                    "json": {
                        "type": "object",
                        "properties": {
                            "product_id": {
                                "type": "string",
                                "description": "Unique identifier of the product"
                            },
                        },
                        "required": ["product_id"]
                    }
                }
            }
        }
    ]
}
```

------
#### [ Auto ]

ツールの選択として `auto` を使用することは、ツールサポートのデフォルトの機能であり、モデルはツールを呼び出すタイミングと呼び出すツールの数を決定できます。これは、リクエストにツールの選択を含めない場合の動作です。

**注記**  
Amazon Nova ツール呼び出しのデフォルトの動作は、ツールの選択に思考連鎖を使用することです。デフォルトの動作またはツール選択 `auto` を使用する場合、<thinking> タグの思考プロセス出力もあります。

次の例では、モデルがインターネットで最新情報を検索したり、ユーザーに直接応答したりできるようにするチャットボットのユースケースを示しています。このツールの選択は柔軟性を提供し、推論をモデルに任せることになります。

```
tool_config = {
    "toolChoice": {
        "auto": {}
    },
    "tools": [
         {
            "toolSpec": {
                "name": "search",
                "description": "API that provides access to the internet",
                "inputSchema": {
                    "json": {
                        "type": "object",
                        "properties": {
                            "query": {
                                "type": "string",
                                "description": "Query to search by",
                            },
                        },
                        "required": ["query"]
                    }
                }
            }
        }
    ]
}
```

------

**注記**  
ツール選択パラメータを設定すると、元のツール選択後にモデル出力テキストが表示される、または連続したツール呼び出しが実行される可能性があります。ここで停止シーケンスを設定して、出力をツールのみに制限することをお勧めします。  

```
“stopSequences”: [“</tool>”]
```
詳細については、「Amazon Bedrock API ガイド」の「[InferenceConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_InferenceConfiguration.html)」を参照してください。