View a markdown version of this page

Utilizzo degli strumenti (chiamata di funzioni) - Amazon Nova

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo degli strumenti (chiamata di funzioni)

Gli strumenti estendono le funzionalità di Amazon Nova collegando il modello a funzionalità esterne come APIs database e ambienti di esecuzione del codice. L'uso degli strumenti consente ad Amazon Nova di accedere a informazioni in tempo reale, eseguire calcoli e interagire con sistemi esterni.

Comprendere il flusso di lavoro relativo all'utilizzo degli strumenti

L'uso dello strumento con Amazon Nova prevede tre fasi chiave:

Interrogazione utente e definizione dello strumento

Definisci gli strumenti fornendo schemi JSON che descrivono le funzionalità e i requisiti di input di ogni strumento. La configurazione dello strumento deve includere dettagli espliciti su quando e come utilizzare ogni strumento.

Selezione dello strumento

Quando un utente invia un messaggio, Amazon Nova lo analizza per determinare se è necessario uno strumento. Questa scelta automatica dello strumento esamina il contesto e decide quale strumento (se presente) richiamare. Se Amazon Nova identifica uno strumento adatto, restituisce il nome dello strumento e i parametri richiesti.

Sei responsabile dell'esecuzione dello strumento in base alla richiesta del modello. Ciò significa scrivere codice che richiami la funzionalità dello strumento ed elabori i parametri di input forniti dal modello.

Restituisci risultati

Dopo aver eseguito lo strumento, invia i risultati ad Amazon Nova in un formato strutturato utilizzando JSON o una combinazione di testo e immagini. Amazon Nova incorpora l'output dello strumento nella risposta finale. Se si verificano errori durante l'esecuzione, indicalo nella risposta dello strumento per consentire ad Amazon Nova di adeguarsi di conseguenza.

Crea uno strumento

Definite gli utensili utilizzando una configurazione dell'utensile che include una serie di strumenti e, facoltativamente, un parametro di scelta dell'utensile. Le specifiche di ogni utensile devono includere:

  • Nome: identificatore chiaro per l'utensile

  • Descrizione: spiegazione concisa della funzionalità dello strumento

  • Schema di input: schema JSON che definisce i parametri obbligatori e opzionali

Esempio Esempio di configurazione dello strumento
tool_config = { "tools": [ { "toolSpec": { "name": "calculator", "description": "A calculator tool that can execute a math equation", "inputSchema": { "json": { "type": "object", "properties": { "equation": { "type": "string", "description": "The full equation to evaluate" } }, "required": ["equation"] } } } } ] }

Migliori pratiche per le definizioni degli strumenti

  • Assicurati che il nome e la descrizione indichino esplicitamente l'esatta funzionalità dello strumento; evita strumenti che sono eccessivamente simili dal punto di vista semantico

  • Includi i principali elementi di differenziazione nella descrizione per aiutare il modello a distinguere tra strumenti simili

  • Limita gli schemi JSON a due livelli di nidificazione per ottenere prestazioni ottimali

  • Limita gli input utilizzando tipi di schema (ad esempio enum, int, float) anziché descrivere la struttura in testo semplice

  • Indica i parametri obbligatori rispetto a quelli opzionali utilizzando la notazione dello schema JSON (ad esempio, «required»: ["param1", «param2"])

  • Convalida lo schema JSON utilizzando un validatore standard prima di inviarlo

  • Inserisci gli argomenti di stringa lunghi per ultimi nello schema ed evita di annidarli

Output strutturato con decodifica vincolata

I modelli Amazon Nova sfruttano la decodifica vincolata per garantire un'elevata affidabilità negli output generati. Questa tecnica utilizza la grammatica per limitare i possibili token in ogni fase della generazione, evitando chiavi non valide e applicando i tipi di dati corretti in base allo schema definito.

Esempio Esempio di output strutturato
tool_config = { "tools": [ { "toolSpec": { "name": "ProductAnalysis", "description": "Analyze product information from text.", "inputSchema": { "json": { "type": "object", "properties": { "name": { "type": "string", "description": "Product name" }, "rating": { "maximum": 5, "description": "Customer rating 1-5", "type": ["number", "null"], "minimum": 1 }, "features": { "description": "Key product features", "type": "array", "items": {"type": "string"} }, "category": { "type": "string", "description": "Product category" }, "price": { "type": "number", "description": "Price in USD" } }, "required": ["name", "category", "price", "features"] } } } } ], "toolChoice": { "tool": {"name": "ProductAnalysis"} } }

Opzioni di scelta degli utensili

Amazon Nova supporta tre parametri di scelta degli strumenti:

Strumento

Lo strumento specificato verrà chiamato una sola volta, ideale per casi d'uso di output strutturato

Qualsiasi

Uno degli strumenti forniti verrà chiamato almeno una volta, utile per gli scenari di selezione delle API

Automatico

Il modello decide se chiamare uno strumento e quanti strumenti chiamare (comportamento predefinito)

Chiamate uno strumento

Quando Amazon Nova decide di chiamare uno strumento, restituisce un blocco di utilizzo dello strumento come parte del messaggio dell'assistente con stopReason impostato su «tool_use». Il blocco di strumenti contiene il nome dello strumento e i relativi input.

Nota

Esegui le seguenti sezioni di codice in sequenza (Chiamata di uno strumento → Richiamata dello strumento di elaborazione → Restituzione dei risultati dello strumento) in una singola sessione di Python. Per eseguire nuovamente gli esempi, riavviate la sessione di Python.

Esempio Chiamare uno strumento
import boto3 import json # Create Bedrock client bedrock = boto3.client('bedrock-runtime', region_name='us-east-1') # Complex calculation that benefits from precise computation messages = [{ "role": "user", "content": [{ "text": "Calculate the compound interest on $10,000 invested at 4.75% annual rate for 7 years, compounded quarterly. Use the formula A = P(1 + r/n)^(nt) where P=10000, r=0.0475, n=4, t=7" }] }] # Define tool configuration with calculator tool_config = { "tools": [{ "toolSpec": { "name": "calculator", "description": "Perform mathematical calculations", "inputSchema": { "json": { "type": "object", "properties": { "expression": { "type": "string", "description": "Mathematical expression to evaluate" } }, "required": ["expression"] } } } }] } # Invoke Model response = bedrock.converse( modelId="us.amazon.nova-2-lite-v1:0", messages=messages, toolConfig=tool_config ) # Extract tool use from response tool = next( block["toolUse"] for block in response["output"]["message"]["content"] if "toolUse" in block ) print(f"Tool: {tool['name']}") print(f"Expression: {tool['input']['expression']}")

Elaborazione delle chiamate agli strumenti

Estrai il nome e gli argomenti dello strumento dal messaggio, quindi richiama lo strumento:

def calculate(expression): """Evaluate mathematical expression""" print(f"Calculating: {expression}") P = 10000 r = 0.0475 n = 4 t = 7 result = P * (1 + r/n) ** (n*t) return result stop_reason = response["stopReason"] if stop_reason == "tool_use": if tool["name"] == "calculator": result = calculate(tool["input"]["expression"])

Restituzione dei risultati dello strumento

Restituisci i risultati dello strumento utilizzando lo ToolResultBlock schema:

messages.append(response["output"]["message"]) # Add the tool result messages.append({ "role": "user", "content": [{ "toolResult": { "toolUseId": tool['toolUseId'], "content": [{"json": {"result": result}}], "status": "success" } }] }) # Send the tool result to the model response = bedrock.converse( modelId="us.amazon.nova-2-lite-v1:0", messages=messages, toolConfig=tool_config ) # Extract and display final response final_text = next( block["text"] for block in response["output"]["message"]["content"] if "text" in block ) print(f"\nFinal Response:\n{final_text}")

Gestione degli errori

Segnala gli errori ad Amazon Nova per consentire la modifica della richiesta e riprova:

tool_result_message = { "role": "user", "content": [ { "toolResult": { "toolUseId": tool["toolUseId"], "content": [{"text": "A validation exception occurred on field: sample.field"}], "status": "error" } } ] }

Considerazioni relative alla sicurezza

  • Verifica l'esistenza degli strumenti prima di richiamarli

  • Assicurati che gli input siano formattati correttamente

  • Verificate che siano disponibili le autorizzazioni appropriate prima dell'esecuzione dello strumento

  • Affidati ai dettagli della sessione anziché consentire ad Amazon Nova di inserire le informazioni degli utenti nelle chiamate agli strumenti

  • Ricorda che LLMs può provocare allucinazioni nelle chiamate agli strumenti; convalida sempre prima dell'esecuzione

Strumenti di sistema integrati

I modelli Amazon Nova 2.0 includono strumenti integrati completamente gestiti che non richiedono implementazioni personalizzate. Abilita questi strumenti con un semplice interruttore nell'API Converse.

Interprete di codice

Code Interpreter consente a Nova di eseguire in modo sicuro il codice Python in ambienti sandbox isolati. Questo strumento è progettato per calcoli matematici, operazioni logiche e algoritmi iterativi.

Nota

Code Interpreter è disponibile nelle regioni IAD, PDX e NRT. AWS Per garantire che le richieste vengano indirizzate a una regione supportata, utilizzate Global CRIS. Quando utilizzi le chiavi API Bedrock, dovrai aggiungere manualmente le InvokeTool autorizzazioni alle definizioni delle politiche. Il ruolo Bedrock predefinito non consente l'azione. InvokeTool

Abilita Code Interpreter specificando il parametro SystemTool:

import boto3 import json bedrock = boto3.client('bedrock-runtime', region_name='us-east-1') tool_config = { "tools": [{ "systemTool": { "name": "nova_code_interpreter" } }] } response = bedrock.converse( modelId="us.amazon.nova-2-lite-v1:0", messages=[{ "role": "user", "content": [{ "text": "What is the average of 10, 24, 2, 3, 43, 52, 13, 68, 6, 7, 902, 82" }] }], toolConfig=tool_config, inferenceConfig={"maxTokens": 10000, "temperature": 0} ) # Pretty print the response for block in response["output"]["message"]["content"]: if "toolUse" in block: print("=== Tool Use ===") print(f"Tool: {block['toolUse']['name']}") print(f"Code:\n{block['toolUse']['input']['snippet']}\n") elif "toolResult" in block: print("=== Tool Result ===") result = block['toolResult']['content'][0]['json'] print(f"Output: {result['stdOut']}") if result['stdErr']: print(f"Error: {result['stdErr']}") print(f"Exit Code: {result['exitCode']}\n") elif "text" in block: print("=== Final Answer ===") print(block["text"])

L'interprete esegue il codice in una sandbox e restituisce i risultati in uno schema standard:

{ "stdOut": "String", "stdErr": "String", "exitCode": "int", "isError": "boolean" }

Web grounding

Il Web grounding consente ad Amazon Nova di accedere a informazioni in tempo reale da Internet, fornendo up-to-date risposte e riducendo le allucinazioni. Abilita specificando lo strumento di sistema nova_grounding:

tool_config = { "tools": [{ "systemTool": {"name": "nova_grounding"} }] }

Per informazioni dettagliate su Web Grounding, vedere. Web grounding

Model Context Protocol (MCP)

Il Model Context Protocol (MCP) è uno standard aperto che consente connessioni sicure e bidirezionali tra fonti di dati e strumenti basati sull'intelligenza artificiale. Invece di scrivere adattatori personalizzati per ogni API o servizio, esegui un server MCP e consenti ad Amazon Nova di scoprire automaticamente i suoi strumenti tramite un bridge client.

Una volta connesso, Amazon Nova tratta gli strumenti MCP come qualsiasi altra integrazione esterna: decide quando chiamarli, invia i parametri richiesti e incorpora i risultati nelle risposte. L'uso di Amazon Nova con Strands semplifica questa operazione grazie a un sistema integrato MCPClient che gestisce automaticamente il rilevamento, la connessione e la mappatura dei risultati.