

# Definir uma ferramenta
<a name="tool-use-definition"></a>

Uma etapa crítica no fluxo de trabalho de chamada de ferramentas é definir a ferramenta. A definição da ferramenta deve incluir todo o contexto necessário para orientar o modelo sobre quando é apropriado invocar a ferramenta.

Para definir uma ferramenta, crie uma configuração de ferramenta e passe essa configuração com a mensagem do usuário para a API. O esquema de [configuração da ferramenta](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolConfiguration.html) espera uma matriz de ferramentas e, opcionalmente, um parâmetro de escolha de ferramenta.

**nota**  
O Amazon Nova é compatível com as opções `auto`, `any` e `tool` para `toolChoice`. Para obter mais informações, consulte [ToolChoice](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolChoice.html) na documentação da API do Amazon Bedrock e [Use uma ferramenta para completar uma resposta do modelo Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html).

Confira abaixo um exemplo de como definir uma ferramenta:

```
tool_config = {
    "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"
                        ]
                    }
                }
            }
        }
    ],
}
```

O nome, a descrição e o esquema de entrada devem ser explícitos com a funcionalidade exata da ferramenta. Certifique-se de que todos os principais diferenciais para quando usar a ferramenta estejam refletidos na configuração da ferramenta.

**nota**  
Atualmente, os modelos de compreensão do Amazon Nova são compatíveis apenas com um subconjunto da funcionalidade JsonSchema quando usados para definir o [ToolInputSchema](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolInputSchema.html) na API Converse.  
O esquema de nível superior deve ser do tipo [Object](https://json-schema.org/understanding-json-schema/reference/object).
Somente três campos são compatíveis no Objeto de nível superior: type (deve ser definido como “object”), [https://json-schema.org/understanding-json-schema/reference/object#properties](https://json-schema.org/understanding-json-schema/reference/object#properties) e [https://json-schema.org/understanding-json-schema/reference/object#required](https://json-schema.org/understanding-json-schema/reference/object#required).

Para chamadas de ferramentas, é recomendável definir a temperatura como 0 para habilitar a decodificação greedy.

Confira abaixo um exemplo de chamada de ferramenta com a API Converse:

```
import json
import boto3

client = boto3.client("bedrock-runtime", region_name="us-east-1")

input_text = "What is the most popular song on WZPZ?"

messages = [{
    "role": "user",
    "content": [{"text": input_text}]
}]

inf_params = {"maxTokens": 1000, "temperature": 0}

response = client.converse(
    modelId="us.amazon.nova-lite-v1:0",
    messages=messages,
    toolConfig=tool_config,
    inferenceConfig=inf_params
)

messages.append(response["output"]["message"])

# Pretty print the response JSON.
print("[Full Response]")
print(json.dumps(response, indent=2))

# Print the tool content for easy readability.
tool = next(
    block["toolUse"]
    for block in response["output"]["message"]["content"]
    if "toolUse" in block
)
print("\n[Tool Response]")
print(tool)
```