Génération de résultats structurés avec Nova - Amazon Nova

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Génération de résultats structurés avec Nova

Les sorties structurées sont essentielles pour les cas d'utilisation des machine-to-machine communications, car elles permettent aux cas d'utilisation en aval de consommer et de traiter plus efficacement les sorties générées. Qu'il s'agisse d'extraire des informations de documents, de créer des assistants qui extraient des données ou de APIs développer des agents qui prennent des mesures, ces tâches nécessitent des modèles de base pour générer des résultats dans des formats structurés spécifiques.

Les modèles Nova utilisent le décodage sous contrainte pour garantir une fiabilité élevée du modèle dans les résultats générés et pour permettre au modèle de gérer facilement des schémas complexes. Le décodage sous contrainte repose sur une grammaire pour « contraindre » les jetons possibles qu'un modèle peut générer à chaque étape. Cela se différencie des techniques d'invite utilisées par le passé car cela modifie les jetons réels parmi lesquels un modèle peut choisir lors de la génération d'une sortie. Par exemple, lors de la fermeture d'un objet JSON, le modèle serait limité à un jeton} à sélectionner. Le décodage sous contrainte est utilisé chaque fois qu'une configuration d'outil est transmise. Comme l'utilisation d'outils nous fournit déjà un schéma spécifique, nous pouvons l'utiliser pour générer une grammaire dynamiquement basée sur le schéma souhaité par le développeur. Le décodage restreint empêche le modèle de générer des clés non valides et impose des types de données corrects en fonction du schéma défini.

Pour tirer parti de l'utilisation des outils avec une sortie structurée, l'étape principale consiste à définir le schéma JSON dont vous avez besoin pour la sortie. Vous trouverez ci-dessous un exemple de schéma JSON défini dans une tool_config définition :

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

Lorsque vous appellerez l'outil ultérieurement à l'aide du modèle, vous recevrez une sortie répondant au format du schéma. Par exemple, vous trouverez ci-dessous un exemple d'appel du modèle en 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 ))

La sortie apparaît alors comme suit :

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