Amazon Bedrock ahora admite salidas estructuradas para todos los modelos de Anthropic Claude, tanto en los puntos finales de tiempo de ejecución como en los de fondo, donde el modelo está disponible.

Ya sea que llame a Claude a través de Boto3 y las API de bedrock-runtime o a través de la API de Messages y el punto final de bedrock-mantle, ahora puede recibir respuestas JSON compatibles con el esquema que se ajusten a una estructura definida. Ya no necesitas un análisis personalizado, una lógica

de reintentos o un posprocesamiento.

Aplicaciones prácticas

Con los resultados estructurados para Claude en Amazon Bedrock, puede automatizar tareas confiables que cumplan con los esquemas en todos los sectores. Algunos ejemplos incluyen extraer todos los campos obligatorios de los informes de resultados financieros y los documentos de cumplimiento, analizar las notas clínicas para convertirlas en historias clínicas electrónicas (EHR) y enriquecer los catálogos de productos con resultados consistentes y validados. También puede analizar los contratos para determinar las condiciones, las partes y las obligaciones clave, o gestionar de forma inteligente las solicitudes de soporte de forma que las intenciones, las opiniones y las entidades coincidan siempre con el modelo

de datos de su aplicación.

¿Qué cambia con los resultados estructurados en Amazon Bedrock?

Las salidas estructuradas utilizan una decodificación restringida para aplicar el esquema JSON durante la generación de los tokens, no después del hecho. El modelo no produce tokens que infrinjan tu esquema. Esto cambia el formato de salida de probabilístico a

determinista.

Ahora hay dos mecanismos complementarios disponibles en ambos puntos de enlace de Amazon Bedrock:

Característica Propósito Caso de uso
Formato de salida del esquema JSON Controla la estructura de respuesta del modelo Extracción de datos, generación de informes, respuestas de API
Uso estricto de herramientas Valide los parámetros de la herramienta comparándolos con los esquemas
Flujos de trabajo de agencia, llamadas a funciones, automatización de varios pasos

Qué significa esto para ti

Cada respuesta es un JSON válido, por lo que ya no encontrarás errores de JSON.parse () ni excepciones de análisis. Las respuestas también son seguras: los tipos de campo son obligatorios y los campos obligatorios siempre están presentes. Como los resultados siempre se ajustan a tu esquema, no necesitas volver a intentarlo para gestionar las infracciones del esquema, lo que hace que la integración sea más fiable. Los resultados estructurados también limitan las respuestas a solo los campos que defina el esquema, lo que reduce el recuento de tokens de salida y puede reducir los costos de inferencia para cargas de trabajo de gran volumen. Estas propiedades hacen que las salidas estructuradas estén listas para la producción, por lo que puedes implementarlas a escala sin necesidad

de código de validación de esquemas adicional.

Disponibilidad y modelos compatibles

Los resultados estructurados funcionan con la inferencia por lotes, por lo que puede procesar grandes volúmenes de solicitudes de forma asincrónica y, al mismo tiempo, recibir resultados que cumplan con el esquema. En el punto final de ejecución básico, también funciona con la inferencia entre regiones, por lo que puede utilizarla en todas las regiones de AWS sin necesidad de realizar ninguna configuración adicional. Si necesita respuestas en tiempo real, puede transmitir respuestas estructuradas

como eventos mecanografiados.

Cómo funciona

Cuando haces una solicitud con un esquema JSON, esto es lo que ocurre entre bastidores:

  1. Validación de esquemas: Amazon Bedrock valida su esquema JSON comparándolo con el subconjunto JSON Schema Draft 2020-12 compatible.
  2. Compilación gramatical: para los esquemas nuevos, Amazon Bedrock compila un artefacto gramatical (la primera solicitud puede tardar un poco más).
  3. Almacenamiento en caché: las gramáticas compiladas se almacenan en caché durante 24 horas, lo que acelera las solicitudes posteriores.
  4. Generación restringida: el modelo genera tokens que producen un JSON válido que coincide con su esquema.

Consideraciones sobre el rendimiento

En

cuanto al rendimiento, la primera solicitud con un esquema nuevo puede tardar más, ya que Amazon Bedrock compila un artefacto gramatical antes de que comience la generación. Tras la compilación inicial, las solicitudes subsiguientes que utilizan el mismo esquema se ejecutan con una sobrecarga mínima, ya que la gramática compilada se almacena en caché. Esta caché depende de tu cuenta y dura 24 horas desde el primer acceso. Si cambias la estructura de tu esquema JSON, se invalida la caché y se activa una nueva compilación, mientras que si cambias solo los campos de nombre o descripción, la gramática almacenada en caché permanece intacta

.

Para empezar: salidas estructuradas con la API InvokeModel (bedrock-runtime)

La API InvokeModel toma el cuerpo de la solicitud nativo de Anthropic, por lo que el esquema pasa a output_config.format como un objeto JSON en lugar de una cadena JSON. El siguiente ejemplo muestra cómo extraer los datos estructurados de los clientes potenciales del correo electrónico de un cliente mediante boto3 con un modelo de Anthropic Claude

:

Python

importar boto3
importar json

REGION = «us-east-1" # Elige tu región preferida
bedrock_runtime = boto3.client (service_name="bedrock-runtime», region_name=REGION)

# Defina el esquema JSON para la salida estructurada
esquema = {
 «tipo»: «objeto»,
 «propiedades»: {
 «nombre»: {"type»: «cadena», «descripción»: «Nombre del cliente"},
 «email»: {"type»: «string», «description»: «Dirección de correo electrónico del cliente"},
 «plan_interest»: {"type»: «string», «description»: «Plan de producto de interés"},
 «demo_requested»: {"type»: «boolean», «description»: «Si se solicitó una demostración"}
 },
 «obligatorio»: ["nombre», «correo electrónico», «plan_interest», «demo_requested"],
 «Propiedades adicionales»: falso
}

# Realice una solicitud con salidas estructuradas a través de la API InvokeModel
# (reutilizando el esquema definido para el ejemplo de Converse)
respuesta = bedrock_runtime.invoke_model (
 modelid="global.anthropic.claude-Sonnet-5-5",
 body=json.dumps ({
 «anthropic_version»: «bedrock-2023-05-31",
 «max_tokens»: 512,
 «mensajes»: [
 {"rol»: «usuario», «contenido»: (
 «Paulo Santos (paulo@example.com) está interesado en nuestro plan Enterprise»
 «y quiere programar una demostración para el próximo martes a las 14:00 horas».
 )}
 ],
 «output_config»: {"formato»: {"tipo»: «json_schema», «esquema»: esquema}}
 })
)

body = json.loads (response ["body"] .read ())

# Compruebe el motivo de la detención antes de analizarla
si body ["stop_reason"] == «end_turn»:
 result_text = next (b ["text"] para b en el cuerpo ["content"] si b ["type"] == «text»)
 print (json.dumps (json.loads (result_text), indent=2))
elif body ["stop_reason"] == «max_tokens»:
 print («Respuesta truncada:
aumenta los max_tokens y vuelve a intentarlo»)

JSON

{
 «nombre»: «Paulo Santos»,
 «correo electrónico»: "paulo@example.com «,
 «plan_interest»: «Empresa»,
 «demo_requested»: verdadero
}

La respuesta se ajusta a su esquema. No se requiere ninguna validación adicional

.

Para ver más ejemplos de uso de la API, incluida la API Messages, consulta el cuaderno de muestra adjunto.

Uso estricto de herramientas para los flujos de trabajo de las agencias

Amazon Bedrock Mantle está diseñado para aplicaciones de agencia con herramientas del lado del servidor, inferencias en segundo plano y conversaciones con estado. Gracias al uso estricto de las herramientas en el punto final de Bedrock-Mantle, ahora puede garantizar que los parámetros de la herramienta coincidan exactamente con su esquema de entrada. El siguiente ejemplo muestra cómo definir una herramienta con un cumplimiento estricto

del esquema:
Importar json
de la importación antrópica AnthropicBedrockmantle

# Reutilizar el cliente creado en el ejemplo de la API de mensajes
client = AnthropicBedrockmantle (aws_region="us-east-1")

mensaje = client.messages.create (
 model="anthropic.claude-sonnet-5",
 max_tokens=512,
 messages= [{"role»: «user», «content»: «¿Qué tiempo hace en San Francisco?"}] ,
 herramientas = [
 {
 «nombre»: «get_weather»,
 «description»: «Obtiene el clima actual de una ubicación específica»,
 «estricto»: Cierto,
 «input_schema»: {
 «tipo»: «objeto»,
 «propiedades»: {
 «ubicación»: {
 «tipo»: «cadena»,
 «descripción»: «La ciudad y el estado, p. ej., San Francisco, CA»
 },
 «unidad»: {
 «tipo»: «cadena»,
 «enumeración»: ["grados Celsius», «grados Fahrenheit"],
 «descripción»: «Unidad de temperatura»
 }
 },
 «obligatorio»: ["ubicación», «unidad"],
 «Propiedades adicionales»: falso
 }
 }
 ]
)

Las entradas de #Tool se ajustan al esquema
para bloquear en message.content:
 si block.type == «tool_use»:
 print («fTool: {block.name}»)
 print (f"Entrada: {json.dumps (block.input
, indent=2)}»)

La configuración estricta: verdadera restringe la entrada de la herramienta del modelo para que coincida exactamente con su esquema. El campo de ubicación es siempre una cadena y el campo de unidad siempre está en grados Celsius o Fahrenheit. El modelo no puede agregar campos fuera del esquema, por lo que la entrada de la herramienta contiene solo lo que especifica el esquema

.

Esto es especialmente útil para los casos de uso de agencias en Amazon Bedrock Mantle, donde los modelos organizan flujos de trabajo de varios pasos con herramientas del lado del servidor, como la búsqueda web y el intérprete de código.

Principales casos de uso de las salidas estructuradas de Claude

Las salidas estructuradas son las que más reducen la complejidad de la gestión de errores en tres patrones comunes:

  • Extracción de datos: extraiga campos de facturas, contratos, correos electrónicos y transcripciones en un JSON que siempre coincida con su esquema, listo para cargarse en bases de datos o sistemas de gestión de relaciones con los clientes (CRM).
  • Llamadas confiables a las herramientas de los agentes: valide los argumentos de la herramienta comparándolos con sus esquemas en el momento de la generación, de modo que los flujos de trabajo de los agentes de varios pasos se ejecuten sin errores derivados de entradas incorrectas.
  • Clasificación a escala: clasifique los tickets, los clientes potenciales o el contenido según su intención, prioridad y opinión para su clasificación, moderación y evaluación.

Claude Haiku 5.5 gestiona de forma fiable cargas de trabajo rápidas y repetitivas, como resúmenes, compactaciones, consultas a bases de datos y solicitudes de clasificación. El siguiente ejemplo muestra cómo clasificar y enrutar los datos entrantes mediante la API Invoke y Haiku

5.5:
importar boto3
importar json

REGION = «us-east-1" # Elige tu región preferida
bedrock_runtime = boto3.client (service_name="bedrock-runtime», region_name=REGION)

# Esquema de clasificación: las enumeraciones restringen la salida a un conjunto fijo de etiquetas
esquema = {
 «tipo»: «objeto»,
 «propiedades»: {
 «categoría»: {
 «tipo»: «cadena»,
 «enum»: ["facturación», «técnico», «cuenta», «ventas», «otros"],
 «description»: «Categoría principal de entrada»
 },
 «prioridad»: {
 «tipo»: «cadena»,
 «enum»: ["bajo», «medio», «alto», «urgente"],
 «description»: «La urgencia se basa en el impacto empresarial»
 },
 «sentimiento»: {
 «tipo»: «cadena»,
 «enum»: ["positivo», «neutro», «negativo"],
 «descripción»: «Sentimiento del cliente»
 },
 «escalate»: {"type»: «boolean», «description»: «Si un humano debe revisar inmediatamente"},
 «reason»: {"type»: «string», «description»: «Justificación de la clasificación en una frase"}
 },
 «obligatorio»: ["categoría», «prioridad», «sentimiento», «escalar», «motivo"],
 «Propiedades adicionales»: falso
}

billete = (
 «Nuestras llamadas a la API de producción han fallado con 500 errores desde esta mañana. »
 «Perdemos pedidos cada minuto. ¡Este es el segundo apagón de este mes!»
)

# Realice una solicitud con salidas estructuradas a través de la API InvokeModel
respuesta = bedrock_runtime.invoke_model (
 modelid="global.anthropic.claude-haiku-5-5",
 body=json.dumps ({
 «anthropic_version»: «bedrock-2023-05-31",
 «max_tokens»: 512,
 «system»: «Eres un clasificador de tickets de soporte. Clasifica el ticket con precisión. «,
 «mensajes»: [
 {"role»: «usuario», «contenido»: f"Clasifica este ticket de soporte:\n\n{ticket} "}
 ],
 «output_config»: {"formato»: {"tipo»: «json_schema», «esquema»: esquema}}
 })
)

body = json.loads (response ["body"] .read ())

# Compruebe el motivo de la detención antes de analizarla
si body ["stop_reason"] == «end_turn»:
 result_text = next (b ["text"] para b en el cuerpo ["content"] si b ["type"] == «text»)
 resultado = json.loads (result_text)
 print (json.dumps (resultado, indent=2))
 # Distribuya el billete basándose en las etiquetas de validez garantizada
 si el resultado ["escalar"]:
 print (f"Pasando a estar de guardia: {result ['category']}/{result ['priority']}»)
elif body ["stop_reason"] == «max_tokens»:
 print («Respuesta truncada:
aumenta los max_tokens y vuelve a intentarlo»)

Requisitos y mejores prácticas

Para utilizar los resultados estructurados de forma eficaz en Amazon Bedrock, siga estas directrices:

  1. Establecer additionalProperties: false en todos los objetos: esto es necesario para que funcionen las salidas estructuradas. Sin él, tu esquema no será aceptado
  2. .
  3. Utilice nombres de campo y descripciones descriptivos: los modelos utilizan nombres y descripciones de propiedades para saber qué datos extraer.
  4. Los nombres claros, como customer_email, superan a los nombres genéricos, como field1.
  5. Usa la enumeración para valores restringidos: cuando un campo tiene un conjunto limitado de valores válidos, usa la enumeración para restringir las opciones.
  6. Comience con lo básico y, a continuación, añada complejidad: comience con los campos mínimos obligatorios y añada complejidad de forma gradual. Los esquemas básicos se compilan más rápido, son más fáciles de depurar y reducen la carga útil de las solicitudes, ya que el esquema se tiene en cuenta para el tamaño de la carga útil de la API de Converse
  7. . Reutiliza
  8. los esquemas para aprovechar las ventajas del almacenamiento en caché: estructura tu aplicación para reutilizar los esquemas en todas las solicitudes. La caché gramatical de 24 horas mejora el rendimiento de las consultas repetidas
  9. .
  10. Comprueba el motivo de la suspensión en cada respuesta: hay dos situaciones en las que se pueden dar respuestas no conformes: las rechazadas (cuando el modelo se niega por motivos de seguridad) y los límites simbólicos (cuando se alcanza el límite máximo de fichas antes de completarse). Maneja ambos casos
  11. en tu código.
  12. Realice pruebas con datos realistas antes de la implementación: valide sus esquemas comparándolos con datos representativos de la producción. Los casos extremos en datos reales suelen revelar problemas de diseño del esquema
  13. .

Para obtener recomendaciones adicionales sobre prácticas recomendadas y diseño de esquemas, consulte Resultados estructurados en la Guía del usuario de Amazon Bedrock.

Funciones del esquema JSON compatibles

  1. Todos los tipos básicos: objeto, matriz, cadena, entero, número, booleano, nulo.
  2. enumeración (solo cadenas, números, valores booleanos o nulos).
  3. const, anyOf, allOf (con limitaciones).
  4. $ref, $def y definiciones (solo referencias internas).
  5. Formatos de cadena: fecha y hora, fecha, duración, correo electrónico, nombre de host, uri, ipv4, ipv6, uuid.
  6. Array minItems (solo valores 0 y 1).

No se admite

La API acepta estas palabras clave, pero no se aplican durante la generación. Una solicitud que las incluye devuelve una respuesta correcta y el modelo aún puede devolver valores que las infrinjan. Valide estas restricciones en su aplicación en lugar de confiar en el esquema para aplicarlas.

  1. Esquemas recursivos.
  2. Referencias externas de $ref.
  3. Restricciones numéricas (mínimo, máximo, múltipleOf).
  4. Restricciones de cadena (minLength, maxLength).
  5. AdditionalProperties se establece en cualquier valor que no sea falso.

Conclusión

Los

resultados estructurados para los modelos de Anthropic Claude en Amazon Bedrock proporcionan la confiabilidad que requieren las aplicaciones de IA de producción. Ya está disponible tanto en el punto final de Bedrock-Runtime como en el de Bedrock-mantle. Al combinar el formato de salida del esquema JSON y el uso estricto de herramientas, puede crear canalizaciones de datos que no necesitan ninguna validación adicional. También puede crear flujos de trabajo de agencia confiables y aplicaciones de inteligencia artificial de producción sin una lógica personalizada de análisis

o reintento.

Los resultados estructurados para Claude en Amazon Bedrock ya están disponibles de forma general. Para obtener más información, consulte la documentación de Amazon Bedrock y explore nuestro cuaderno de ejemplo

.

¿Qué flujos de trabajo podrían mejorar en su organización un JSON validado y compatible con los esquemas? Comparte tus comentarios y preguntas en los

comentarios.


Acerca de los autores

Anshika Saxena

Anshika Sajena

Anshika es científica de datos de IA generativa en AWS y se especializa en Amazon Bedrock. Ayuda a los clientes empresariales a acelerar la adopción de la IA generativa y la IA agencial guiándolos en la creación e implementación de soluciones en Amazon Bedrock. También trabaja con proveedores independientes de software independientes y empresas emergentes para ofrecerles los últimos servicios de Anthropic en

Amazon Bedrock.
Dani Mitchell

Dani Mitchell

Dani es arquitecto sénior de soluciones especializadas en IA generativa en AWS y trabaja en la comercialización de Anthropic en Amazon Bedrock. Ayuda a empresas de todo el mundo a diseñar e implementar soluciones de IA generativa utilizando los modelos y las capacidades de Anthropic en Amazon Bedrock para crear aplicaciones escalables y listas para la producción

.
Alfredo Castillo

Alfredo Castillo

Alfredo es arquitecto sénior de soluciones especializadas en IA generativa en AWS y se centra en la comercialización de modelos antrópicos en Amazon Bedrock. Trabaja con clientes de servicios financieros para diseñar y escalar soluciones de IA generativa en sistemas distribuidos y convertir los experimentos de IA generativa en cargas de trabajo de producción. Fuera del trabajo, le apasionan los deportes familiares y

de resistencia.
Aamna Najmi

Amana Najmi

Aamna es arquitecta sénior especializada en soluciones de IA generativa y se centra en los modelos antrópicos y en la operacionalización y el gobierno de los sistemas de IA generativa a gran escala en Amazon Bedrock. Ayuda a los ISV a resolver sus desafíos, adoptar la innovación y crear nuevas oportunidades de negocio con Amazon Bedrock

.
Sofian Hamiti

Sofián Haití

Sofian es un líder tecnológico con más de 12 años de experiencia en la creación de soluciones de inteligencia artificial y en la dirección de equipos de alto rendimiento para maximizar los resultados de los clientes. Le apasiona empoderar a diversos talentos para que generen un impacto global y logren sus aspiraciones profesionales

.
Ayan Ray

Ayan Ray

Ayan es socio principal, arquitecto de soluciones y líder tecnológico de IA en AWS, y se desempeña como líder tecnológico mundial de Anthropic en AWS. Trabaja en la intersección de la arquitectura de nube y la inteligencia artificial, ayudando a las organizaciones a adoptar y escalar las tecnologías de Anthropic en AWS

.

¿Tiene un proyecto de software o plataforma SaaS en mente?

Hable directamente con nuestros arquitectos de software en SoftAndino. Le brindamos asesoría técnica y cotización inmediata sin compromiso.