Cree un agente de citas de atención médica con Amazon Nova 2 Sonic

Si administra una clínica o una red hospitalaria, ya conoce el costo de las citas perdidas. La tasa promedio de inasistencia en la atención médica de EE. UU. se sitúa entre el 5 y el 30 por ciento, según la especialidad. Cada espacio vacío representa pérdida de ingresos, tiempo de inactividad del proveedor y retraso en la atención al paciente. La solución estándar, llamar a los pacientes uno por uno para confirmar o reprogramar, no se adapta.

En esta publicación, aprenderá cómo crear un agente de voz que maneje conversaciones de recordatorio de citas utilizando Amazon Nova 2 Sonic y Amazon Bedrock AgentCore. El agente autentica a los pacientes por voz, gestiona las citas (confirma, cancela o reprograma), recopila información de salud previa a la visita y la escala al personal humano cuando es necesario. Maneja llamadas de rutina a escala, lo que puede ayudar a reducir las tasas de no presentación. Este ejemplo se centra en el lado agente del problema: conversación de voz y orquestación de herramientas. Se incluye una interfaz basada en navegador para realizar pruebas. Para conectar al agente a líneas telefónicas reales para realizar llamadas salientes, debería integrar un servicio de telefonía como Amazon Connect Customer.

Este tutorial lo lleva a través de la compilación completa. Obtiene un agente de voz funcional en Amazon Bedrock que lleva a cabo conversaciones de citas naturales utilizando las capacidades de voz a voz de Amazon Nova 2 Sonic, además de siete herramientas específicas de atención médica creadas con el SDK de Strands Agents para la autenticación, programación y escalamiento de pacientes. La implementación sin servidor se ejecuta en Amazon Bedrock AgentCore con autenticación de Amazon Cognito, persistencia de Amazon DynamoDB y notificaciones de Amazon Simple Notification Service (Amazon SNS). Una interfaz React basada en navegador transmite audio bidireccional a través de conexiones WebSocket autenticadas.

Descripción general de la solución

Para automatizar las llamadas de citas de manera efectiva, necesita un sistema de inteligencia artificial conversacional que maneje múltiples pasos en una sola interacción: verificar la identidad, presentar los detalles de las citas, procesar cambios y recopilar información de salud.

Un enfoque tradicional encadena servicios separados. Un modelo de voz a texto transcribe las palabras del paciente, un modelo de lenguaje grande (LLM) basado en texto genera una respuesta y un modelo de texto a voz la lee. Cada traspaso introduce latencia y elimina el contexto. El paso de transcripción descarta señales vocales como el tono, la vacilación y la urgencia. El LLM no escucha cómo el paciente dijo algo, solo lo que dijo. En la atención sanitaria, donde la ansiedad o la confusión de un paciente deberían cambiar la forma en que responde el agente, esa pérdida importa.

Este agente adopta un enfoque diferente al combinar dos servicios de AWS.

Amazon Nova 2 Sonic

Amazon Nova 2 Sonic es un modelo de voz a voz disponible en Amazon Bedrock que permite IA conversacional en tiempo real con transmisión bidireccional. En lugar de encadenar servicios separados de transcripción, razonamiento y síntesis, Nova 2 Sonic procesa el habla de forma nativa en un solo modelo, de modo que el contexto vocal, como el tono y el ritmo, no se pierda en la transcripción. Para obtener más información sobre cómo Nova 2 Sonic procesa el habla y se adapta al contexto acústico, consulte la publicación del blog Presentación de Amazon Nova Sonic.

Para este agente, Nova 2 Sonic proporciona varias capacidades clave. Su procesamiento nativo de voz a voz conserva los matices vocales en todos los turnos, por lo que el agente detecta dudas o preocupaciones sin perder el contexto. La precisión de la llamada de herramientas mantiene en marcha los flujos de trabajo de atención médica de varios pasos. El modelo sabe cuándo autenticarse, cuándo consultar horarios y cuándo reservar. La transmisión bidireccional de baja latencia mantiene las conversaciones receptivas. El modelo también está diseñado para soportar el ruido de fondo común en entornos domésticos y clínicos, y el inglés con acento. Finalmente, el soporte multilingüe permite al agente cambiar al idioma preferido del paciente en mitad de la conversación sin cambios de configuración. Consulte la documentación de Amazon Nova 2 Sonic para conocer los idiomas admitidos.

Amazon Bedrock AgentCore

Amazon Bedrock AgentCore proporciona un tiempo de ejecución independiente del marco y sin servidor para ejecutar agentes de IA a escala con seguridad empresarial. Usted implementa la lógica de su agente como un contenedor y AgentCore maneja la infraestructura, el escalado y los puntos finales WebSocket autenticados por AWS Identity and Access Management (IAM). Esta implementación utiliza la clase BidiAgent del SDK de Strands Agents para administrar la transmisión de voz bidireccional con Nova 2 Sonic.

Arquitectura

El siguiente diagrama muestra cómo se conectan los componentes. Una interfaz de React se comunica con Amazon Bedrock AgentCore a través de una conexión WebSocket firmada por SigV4. Strands BidiAgent, con tecnología de Nova 2 Sonic, maneja conversaciones de voz en tiempo real e invoca herramientas de atención médica que leen y escriben en tablas de DynamoDB y publican en Amazon SNS.

Figura 1: Arquitectura del agente de citas sanitarias

La interfaz de React captura el audio del micrófono en el navegador y lo transmite al agente a través de un WebSocket, un protocolo que mantiene abierta una conexión bidireccional persistente entre el cliente y el servidor. Para asegurar esa conexión, la interfaz autentica a los usuarios a través de Amazon Cognito (un servicio de identidad que emite credenciales temporales de AWS) y firma cada solicitud con SigV4, el protocolo estándar de firma de solicitudes de AWS.

Amazon Bedrock AgentCore Runtime aloja Strands BidiAgent en contenedores, gestionando la infraestructura y el escalado. Nova 2 Sonic recibe entrada de audio, motivos de la conversación, invoca herramientas cuando es necesario y genera respuestas de audio. Tres tablas de DynamoDB almacenan registros de pacientes, detalles de citas y franjas horarias disponibles. Amazon SNS publica notificaciones de escalada cuando un paciente solicita hablar con un humano.

Cableándolo juntos

El SDK de Strands maneja la complejidad de la transmisión de voz bidireccional. Toda la configuración del agente cabe en unas pocas líneas:

de strands.experimental.bidi importar BidiAgent de strands.experimental.bidi.models importar BidiNovaSonicModel modelo = BidiNovaSonicModel( region="us-east-1", model_id="amazon.nova-2-sonic-v1:0", proveedor_config={ "audio": { "input_sample_rate": 16000, "output_sample_rate": 16000, "voice": "tiffany", } }, tools=tools, # Las siete herramientas de atención médica que se enumeran a continuación) agent = BidiAgent( model=model, tools=tools, system_prompt=system_prompt, ) # En el controlador WebSocket, conecte las entradas y salidas en espera de agent.run( inputs=[receive_audio], outputs=[send_audio], )

Pasa la lista de herramientas y el mensaje del sistema a BidiAgent, lo apunta a Nova 2 Sonic y el SDK administra la sesión de transmisión. Recibe audio, invoca herramientas cuando el modelo así lo decide y envía respuestas de audio.

El agente de voz utiliza siete herramientas para avanzar en cada llamada. Cada herramienta se implementa como una función de Python decorada con el decorador @tool del SDK de Strands Agents. Nova 2 Sonic decide cuándo invocar cada herramienta en función de lo que dice el paciente. Por ejemplo, cuando un paciente solicita reprogramar, Nova 2 Sonic llama a find_available_slots para consultar DynamoDB, presenta las opciones por voz y luego llama a book_appointment_slot para finalizar el cambio.

Este diseño basado en herramientas significa que puede intercambiar o ampliar herramientas individuales sin tener que reescribir el resto del agente. Para agregar una nueva capacidad (por ejemplo, recopilar información de seguros), escriba una nueva función @tool y actualice el mensaje del sistema.

Herramienta Qué hace Cómo funciona authenticate_patient Verifica la identidad utilizando el nombre, el apellido y los últimos cuatro dígitos del SSN. Consulta la tabla de pacientes de DynamoDB a través de un índice secundario global (GSI). Aplica un límite de tres intentos por combinación de nombres. Si tiene éxito, devuelve los detalles del paciente y las próximas citas. confirm_appointment Confirma una cita existente. Actualiza el estado de la cita de Programada o Reprogramada a Confirmada en DynamoDB. Incluye controles idempotentes para evitar la doble confirmación. cancel_appointment Cancela una cita con un motivo opcional. Actualiza el estado a Cancelado con una nota con marca de tiempo. Solo opera en citas Programadas, Confirmadas o Reprogramadas. find_available_slots Consulta franjas horarias abiertas para reprogramación. Busca el proveedor en el registro de citas y consulta la tabla AvailableSlots a través de ProviderDateIndex GSI. Devuelve hasta tres opciones para mantener la conversación de voz concisa. book_appointment_slot Reserva una franja horaria seleccionada. Utiliza escrituras condicionales de DynamoDB para marcar atómicamente el espacio como ocupado, lo que evita la doble reserva en solicitudes simultáneas. Actualiza la cita con la nueva fecha y hora. record_health_update Captura información de salud previa a la visita. Agrega notas con marca de tiempo al registro de la cita. Recoge cuatro ítems (condiciones médicas, alergias, acompañamiento, inquietudes específicas); cada uno preguntó uno a la vez. escalate_to_agent Marca la llamada para devolución de llamada humana. Genera un número de referencia de seis dígitos, actualiza el estado de la cita a Escalada y publica un mensaje de Amazon SNS con información del paciente y el motivo de la escalación.

Cómo maneja el agente una llamada

Cuando el agente se conecta con un paciente, BidiAgent gestiona la conversación completa a través de cuatro fases. El flujo de conversación se define en el mensaje del sistema del agente, que puede personalizar según su caso de uso. A continuación se muestra un extracto del flujo de reprogramación, que muestra cómo el mensaje impulsa la orquestación de múltiples herramientas:

## REPROGRAMAR FLUJO Si el paciente desea reprogramar: 1. Pregunte sobre su horario preferido (mañana/tarde, días específicos) 2. Utilice la herramienta find_available_slots para encontrar espacios disponibles 3. Presente 2-3 opciones y déjeles elegir 4. Después de reprogramar, recopile información de salud (las mismas 4 preguntas como confirmación)

Nova 2 Sonic sigue estas instrucciones para decidir cuándo invocar cada herramienta. Puede agregar nuevos flujos o modificar los existentes editando el mensaje.

Autenticación: Nova 2 Sonic saluda al paciente y le solicita su nombre completo y los últimos cuatro dígitos de su número de seguro social. Antes de verificar, el agente repite lo que escuchó y le pide al paciente que confirme. Esto detecta errores de reconocimiento de voz en nombres o dígitos. La herramienta authenticate_patient consulta a DynamoDB para verificar la identidad. Si la verificación falla después de tres intentos, el agente deriva a un humano por motivos de seguridad. Gestión de citas: después de la verificación, Nova 2 Sonic presenta los detalles de la próxima cita, incluido el nombre, la fecha y la hora del proveedor. El paciente elige confirmar, cancelar o reprogramar. Si reprograman, el agente recopila preferencias (mañana o tarde, fechas preferidas), consulta los horarios disponibles, presenta hasta tres opciones y reserva el nuevo horario. Recopilación de información de salud: para citas confirmadas o reprogramadas, el agente recopila información de salud previa a la visita. Pregunta sobre condiciones médicas existentes, alergias, si alguien acompañará al paciente y cualquier inquietud específica para la visita. Cada pregunta se hace una a la vez para que la conversación fluya de forma natural. Escalamiento: en cualquier momento, si el paciente solicita hablar con un humano, el agente captura el motivo, genera un número de referencia de seis dígitos y publica una notificación de Amazon SNS para que el personal pueda devolver la llamada al paciente dentro de las 24 horas.

Implementando el agente

El código fuente completo está disponible en el repositorio de GitHub. Siga estos pasos para implementar el agente en su cuenta de AWS.

Requisitos previos

Antes de comenzar, asegúrese de tener lo siguiente:

Paso 1: clonar el repositorio

git clone https://github.com/aws-samples/sample-Nova-Sonic-AgentCore-Healthcare-Call-Center.git cd sample-Nova-Sonic-AgentCore-Healthcare-Call-Center

Paso 2: implementar la infraestructura

La pila de AWS CDK aprovisiona todos los recursos que necesita: grupos de identidades y usuarios de Cognito, tablas de DynamoDB, un tema de Amazon SNS y AgentCore Runtime con su agente en contenedores.

cd infraestructura python3 -m venv .venv fuente .venv/bin/activate pip install -r requisitos.txt cdk implementar –require-approval nunca

Cuando finalice la implementación, tenga en cuenta los resultados de AWS CloudFormation. Necesita el ID del grupo de usuarios de Cognito, el ID del cliente, el ID del grupo de identidades y el ARN del tiempo de ejecución de AgentCore para configurar la interfaz.

Paso 3: crea un usuario de prueba

Cree un usuario de Cognito para realizar pruebas. Reemplace con el valor de su salida CDK:

aws cognito-idp admin-create-user –user-pool-id –username testuser –temporary-password TempPass123! aws cognito-idp admin-set-user-password –user-pool-id –username testuser –password –permanent

Paso 4: configurar y ejecutar la interfaz

Copie la plantilla de entorno y complete los valores de su salida de CDK:

cd ../frontend npm install cp .env.example .env # Edite .env con los valores de salida de su CDK npm run dev

Abra http://localhost:5173 en su navegador, inicie sesión con su usuario de prueba, elija un paciente del menú y elija Iniciar llamada para iniciar una conversación de voz.

Paso 5: datos de demostración de semillas

La pila CDK genera registros de pacientes de muestra automáticamente durante la implementación. Si necesita volver a inicializar o personalizar los datos, ejecute:

scripts de python3/seed_data.py

Para realizar pruebas, utilice cualquiera de estos pacientes preconfigurados:

Nombre del paciente SSN últimos 4 John Smith 1234 Jane Doe 5678 Michael Johnson 9012

Conversación de muestra

La siguiente transcripción proviene de una implementación de prueba. Muestra una interacción de reprogramación completa en la que el agente autentica al paciente, encuentra un nuevo horario, lo reserva y recopila detalles de salud previos a la visita.

Interfaz de asistente de voz para atención médica durante una llamada de paciente en vivo

Figura 2: La interfaz Healthcare Voice Assistant durante una llamada de paciente en vivo

Vea la demostración completa en YouTube.

Agente: "Hola, soy Nova de Acme Healthcare. Le llamo acerca de su próxima cita. Para verificación, ¿puedo darme su nombre completo y los últimos cuatro dígitos de su número de Seguro Social?"

Paciente: "John Smith, 1234".

Agente: "Déjeme confirmar. Escuché a John Smith, uno, dos, tres, cuatro. ¿Es correcto?"

Paciente: “Sí, es cierto”.

Agente: "Gracias por verificar. Le llamo acerca de su chequeo anual con el Dr. Johnson programado para el 14 de junio a las 4:30 p. m.. ¿Le gustaría confirmar esta cita?"

Paciente: "En realidad, necesito reprogramar".

Agente: "Estaré encantado de ayudar. ¿Prefieres mañana o tarde?"

Paciente: "La mañana funciona mejor".

Agente: "Encontré estos horarios matutinos con el Dr. Johnson: el martes 1 de julio a las 9:00 a. m. o el jueves 3 de julio a las 10:30 a. m. ¿Cuál le conviene?"

Paciente: “Martes a las 9 a. m.”.

Agente: "He reprogramado su cita. Antes de terminar, me gustaría recopilar información para ayudar al Dr. Johnson a prepararse. ¿Tiene alguna afección médica existente que debamos conocer?"

Paciente: "Tengo presión arterial alta".

Agente: "Gracias. ¿Tiene alguna alergia?"

Paciente: "Soy alérgico a la penicilina".

Agente: "Tomado nota. ¿Alguna inquietud específica sobre esta visita?"

Paciente: "He tenido algo de dolor en la rodilla".

Agente: "He documentado todo para el Dr. Johnson. Su cita está confirmada para el martes 1 de julio a las 9:00 a. m. ¡Que tenga un gran día!"

Soporte multilingüe

Nova 2 Sonic detecta y cambia al idioma preferido del paciente en mitad de la conversación sin ningún cambio de configuración de su parte. Puedes encontrar demostraciones en español e hindi en el repositorio de GitHub.

Consideraciones importantes

Este ejemplo es una implementación de referencia con fines de demostración. Amazon Nova Sonic no está diseñado para brindar opiniones o consejos, incluidos consejos médicos, legales o financieros, y no debe utilizarse como sustituto del juicio clínico. Las implementaciones de producción que manejan información de salud protegida (PHI) requieren una revisión de cumplimiento de HIPAA, un Anexo de socio comercial (BAA) ejecutado con AWS y revisiones clínicas y de seguridad apropiadas para su caso de uso.

Limpiar

Para evitar cargos continuos, elimine los recursos cuando termine la prueba:

cd infraestructura cdk destruir –fuerza

Es posible que el comando cdk destroy no elimine todos los grupos de registros de Amazon CloudWatch. Verifique en la consola de CloudWatch los grupos de registros restantes creados por esta implementación y elimínelos manualmente.

Conclusión

En esta publicación, aprendió cómo crear un agente de voz que maneje conversaciones de recordatorio de citas usando Nova 2 Sonic y Amazon Bedrock AgentCore. Esta arquitectura también puede adaptarse a otras industrias que manejan un gran volumen de llamadas de clientes, como el comercio minorista o la hotelería, reemplazando las herramientas de atención médica con la lógica de su dominio.

Próximos pasos

Clone el repositorio e implemente el agente en su cuenta de AWS siguiendo los pasos de esta publicación. El archivo README cubre consideraciones de personalización, preparación para la producción y cumplimiento.

Sobre los autores

Jimin Kim

Jimin Kim

Jimin es arquitecto senior de creación de prototipos en el equipo de ingeniería de clientes de IA (PACE) y creación de prototipos de AWS. Crea prototipos que ayudan a los clientes empresariales a explorar las posibilidades de AWS. Más allá del lanzamiento de los servidores AWS MCP iniciales, orienta a las empresas en la adopción de prácticas de desarrollo impulsadas por la IA. Fuera del trabajo, le gusta tejer, tocar el piano y entrenar con pesas rusas.

Shree Krishnamurthi

Shree Krishnamurthi

Shree es gerente de programas técnicos del equipo de ingeniería de clientes de IA (PACE) y prototipos de AWS en AWS, donde lidera iniciativas estratégicas de creación de prototipos en inteligencia artificial y tecnologías emergentes. Con su experiencia que abarca el desarrollo de software, soluciones empresariales y transformación de la nube, se especializa en convertir conceptos tecnológicos de vanguardia en soluciones comerciales prácticas.