

# ツールの呼び出し
<a name="tool-use-invocation"></a>

Amazon Nova がツールを呼び出すことにした場合、アシスタントメッセージの一部としてツール使用ブロックが返され、停止理由は「tool\$1use」になります。ツールブロックには、ツールの名前とその入力が含まれます。

**注記**  
ツール呼び出しの精度を向上させるために行う Amazon Nova モデルのデフォルトの動作は、ツール呼び出しに思考連鎖の推論を使用することです。思考プロセスはアシスタントメッセージで利用可能になり、＜thinking> タグに含まれます。レスポンスには複数のツール呼び出しと思考ブロックを含めることができるため、アプリケーションはこれを考慮する必要があります。  
ツールの選択が `any` または `tool` に設定されている場合、思考連鎖の動作は上書きされ、レスポンスには必要なツール呼び出しのみが含まれるようになります。

```
{
   "toolUse": 
    {
        "toolUseId": "tooluse_20Z9zl0BQWSXjFuLKdTJcA", 
        "name": "top_song", 
        "input": {
            "sign": "WZPZ"
        }
    }
}
```

実際のツールの呼び出しにおいて、アプリケーションは、ツール名と引数をメッセージから抽出し、呼び出すことができます。

ツール呼び出しを処理する方法の例を次に示します。

```
def get_top_song(sign):
    print(f"Getting the top song at {sign}")
    return ("Espresso", "Sabrina Carpenter")

stop_reason = response["stopReason"]

tool, song, artist = None, None, None
if stop_reason == "tool_use":
    thought_process = next(
        block["text"]
        for block in response["output"]["message"]["content"]
        if "text" in block
    )

    print(thought_process)

    tool = next(
        block["toolUse"]
        for block in response["output"]["message"]["content"]
        if "toolUse" in block
    )

    if tool["name"] == "top_song":
        song, artist = get_top_song(tool["input"]["sign"])
```

ツールを定義して呼び出すときは、セキュリティに留意することが重要です。Amazon Nova などの LLM はセッションの詳細にアクセスできないため、ツールを呼び出す前に必要に応じてアクセス許可を有効化する必要があります。プロンプトを拡張し、Amazon Nova にツール呼び出しへの挿入を許可するのではなく、セッションのユーザーの詳細を使用してください。