Generazione di output strutturati con Nova - 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à.

Generazione di output strutturati con Nova

L'output strutturato è fondamentale per i casi d'uso machine-to-machine della comunicazione, in quanto consente ai casi d'uso a valle di utilizzare ed elaborare in modo più efficace gli output generati. Che si tratti di estrarre informazioni dai documenti, creare assistenti che recuperano dati o sviluppare agenti che intraprendano azioni APIs, queste attività richiedono modelli di base per generare output in formati strutturati specifici.

I modelli Nova sfruttano la decodifica vincolata per garantire un'elevata affidabilità del modello nell'output generato e per consentire al modello di gestire schemi complessi con facilità. La decodifica vincolata si basa su una grammatica per «limitare» i possibili token che un modello può emettere in ogni fase. Questa tecnica si differenzia dalle tecniche di suggerimento utilizzate storicamente, poiché modifica i token effettivi tra cui un modello può scegliere per generare un output. Ad esempio, quando si chiude un oggetto JSON, il modello sarebbe vincolato a un solo token} da selezionare. La decodifica vincolata viene sfruttata ogni volta che viene passata una configurazione dello strumento. Poiché l'uso degli strumenti ci fornisce già uno schema specifico, siamo in grado di utilizzarlo per generare dinamicamente una grammatica basata sullo schema desiderato dallo sviluppatore. La decodifica vincolata impedisce al modello di generare chiavi non valide e applica tipi di dati corretti in base allo schema definito.

Per sfruttare l'utilizzo degli strumenti con l'output strutturato, il passaggio principale è definire lo schema JSON necessario per l'output. Di seguito è riportato un esempio di schema JSON definito all'interno di una definizione: tool_config

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" } } }

Quando richiamerete lo strumento in un secondo momento utilizzando il modello, riceverete un output che risponde nel formato dello schema. Ad esempio, di seguito è riportato un esempio di chiamata al modello in Python:

import boto3 client = boto3.client("bedrock-runtime") model_id = "amazon.nova-lite-1-5-v1:0" user_query = """The Amazon Kindle Scribe is a state-of-the-art e-reader designed for both reading and writing, featuring a 10.2-inch paper-like display and a premium stylus. This versatile device allows users to enjoy books, take notes, annotate PDFs, and even sketch, making it ideal for readers, students, and professionals. Priced at $339.99, it falls under the electronics category and boasts features like a front light, adjustable warm light settings, and up to 12 weeks of battery life on a single charge. Customer ratings for the Kindle Scribe average around 4.5 stars, reflecting its high user satisfaction.""" messages = [{ "role": "user", "content": [{ "text": user_query }] }] system = [{"text": "Leverage the ProductAnalysis tool to extract product information"}] inference_params = {"temperature": 0} response = client.converse(modelId=model_id, system=system, messages=messages, toolConfig=tool_config, inferenceConfig=inference_params) print(next( block["toolUse"] for block in response["output"]["message"]["content"] if "toolUse" in block ))

L'output appare quindi così:

{ "toolUseId": "tooluse_hke1FUeuRbKXK8DPqIptVg", "name": "ProductAnalysis", "input": { "name": "Amazon Kindle Scribe", "rating": 4.5, "features": [ "10.2-inch paper-like display", "premium stylus", "front light", "adjustable warm light settings", "up to 12 weeks of battery life" ], "category": "electronics", "price": 339.99 } }