Generación de resultados estructurados con Nova - Amazon Nova

Generación de resultados estructurados con Nova

Los resultados estructurados son fundamentales para los casos de uso de comunicación entre máquinas, ya que permite que los casos de uso posteriores consuman y procesen los resultados generados de forma más eficiente. Ya se trate de extraer información de los documentos, crear asistentes que obtengan datos de las API o desarrollar agentes que tomen medidas, estas tareas requieren modelos fundacionales para generar resultados en formatos estructurados específicos.

Los modelos de Nova utilizan la decodificación restringida para garantizar que el modelo genere resultados altamente fiables y permitir que gestione esquemas complejos con facilidad. La decodificación restringida se basa en una gramática para “restringir” los tokens posibles que un modelo puede generar en cada paso. Esto se diferencia de las técnicas de petición utilizadas históricamente porque cambian los tokens reales entre los que un modelo puede elegir al generar un resultado. Por ejemplo, al cerrar un objeto JSON, el modelo se limitaría a seleccionar solo un token }. La decodificación restringida se usa cada vez que se proporciona una configuración de herramientas. Como el uso de herramientas ya nos proporciona un esquema específico, podemos usarlo para generar una gramática dinámica basada en el esquema deseado por el desarrollador. La decodificación restringida evita que el modelo genere claves no válidas y aplica los tipos de datos correctos en función del esquema definido.

Para aprovechar el uso de la herramienta con un resultado estructurado, el paso principal es definir el esquema JSON que necesita para la salida. A continuación, se muestra un ejemplo de un esquema JSON definido dentro de una definición de 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" } } }

Cuando llame a la herramienta más adelante utilizando el modelo, recibirá un resultado que sigue el formato de esquema. Por ejemplo, a continuación se muestra un ejemplo de cómo llamar al modelo 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 ))

El resultado aparece entonces de la siguiente manera:

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