Artículo
· 16 hr atrás Lectura de 4 min

d[IA]gnosis: desarrollando aplicaciones RAG con IRIS for Health

Con la introducción de los tipos de datos vectoriales y la funcionalidad de Vector Search en IRIS se nos abre todo un mundo de posibilidades para el desarrollo de aplicaciones y un ejemplo de estas aplicaciones es la que vi reciéntemente publicada un concurso público de la Consejería de Sanidad de Valencia en la que solicitaban una herramienta para ayudar en la codificación CIE-10 utilizando modelos de IA.

¿Cómo podríamos implementar una aplicación similar a la solicitada? Veamos que necesitaríamos:

  1. Listado de códigos CIE-10, que usaremos como contexto de nuestra aplicación RAG para buscar diagnósticos dentro de los textos libres.
  2. Un modelo entrenado que nos vectorice los textos en los que vamos a buscar equivalencias en los códigos CIE-10.
  3. Las librerías Python necesarias para la ingesta y vectorización de los códigos CIE-10 y los textos.
  4. Un front-end amigable que admita textos sobre los que busquemos posibles diagnósticos.
  5. Orquestación de las solicitudes recibidas desde el front-end.

¿Qué nos proporciona IRIS para cubrir las necesidades anteriores?

  1. Importación de CSV, ya sea usando la funcionalidad de RecordMapper o directamente usando Embedded Python.
  2. Embedded Python nos permite implementar el código Python necesario para generar los vectores haciendo uso del modelo seleccionado.
  3. Publicación de APIs REST a las que se invocará desde la aplicación de front-end.
  4. Producciones de interoperabilidad que permiten el seguimiento de la información dentro de IRIS.

Pues sólo nos queda ver el ejemplo desarrollado:

d[IA]gnosis

Asociado a este artículo tenéis el acceso a la aplicación desarrollada, en los próximos artículos veremos en detalle como implementamos cada una de las funcionalidades, desde la utilización del modelo, el almacenamiento de los vectores y la utilización de las búsquedas vectoriales.

Revisemos la aplicación:

Importando códigos CIE-10

Desde la pantalla de configuración se nos indica el formato que debe seguir el archivo CSV con los códigos CIE-10 que vamos a importar, el proceso de carga y vectorización consume bastante tiempo y recursos, por ello el despliegue del contenedor Docker configura no sólo la memoria RAM utilizable por Docker sino que también la memoria de disco en caso de que los requerimientos superen la RAM asignada:

  # iris
  iris:
    init: true
    container_name: iris
    build:
      context: .
      dockerfile: iris/Dockerfile
    ports:
      - 52774:52773
      - 51774:1972
    volumes:
    - ./shared:/shared
    environment:
    - ISC_DATA_DIRECTORY=/shared/durable
    command: --check-caps false --ISCAgent false
    mem_limit: 30G
    memswap_limit: 32G

El archivo con los códigos CIE-10 está disponible en la ruta del proyecto /shared/cie10/cie10.csv, una vez alcanzado el 100% la aplicación estará lista para ser utilizada.

En nuestra aplicación hemos definido dos funcionalidades distintas para la codificación de diagnósticos, una a partir de los mensajes HL7 recibidos en el sistema y otra basada en textos libres.

Captura de diagnósticos mediante HL7

El proyecto contiene una serie de mensajes de HL7 preparados para realizar pruebas, sólo es necesario copiar el archivo /shared/hl7/messagesa01.hl7 a la carpeta /shared/HL7In y la producción asociada se encargará de extraer el diagnóstico del mismo para mostrarlo en la aplicación web:

Desde la pantalla de solicitudes de diagnóstico podremos ver todos los diagnósticos recibidos vía mensajería HL7, para su codificación a CIE-10 sólo necesitamos pulsar en lupa para mostrar un listado de aquellos códigos CIE-10 más próximo al diagnóstico recibido:

Una vez seleccionado veremos en el listado el diagnóstico y su código CIE-10 asociado, pulsando en el botón con el icono del sobre se generará un mensaje usando el original e incluyendo dentro del segmento del diagnóstico el nuevo seleccionado:

MSH|^~\&|HIS|HULP|EMPI||||ADT^A08|592956|P|2.5.1
EVN|A01|
PID|||1556655212^^^SERMAS^SN~922210^^^HULP^PI||GARCÍA PÉREZ^JUAN^^^||20150403|M|||PASEO PEDRO ÁLVAREZ 195 1 CENTRO^^LEGANÉS^MADRID^28379^SPAIN||555283055^PRN^^JUAN.GARCIA@YAHOO.COM|||||||||||||||||N|
PV1||N
DG1|1||O16.9^Hipertensión materna no especificada, trimestre no especificado^CIE10-ES|Hipertensión gestacional||A||

Dicho mensaje se podrá encontrar en la ruta /shared/HL7Out

Capturas de diagnósticos en texto libre

Desde la opción de Analizador de texto el usuario podrá incluir un texto libre sobre el que se realizará un proceso de análisis. La aplicación buscará en tuplas de 3 palabras lematizadas (eliminando artículos, pronombres y demás palabras poco relavantes). Una vez analizadas el sistema nos mostrará el texto relevante subrayado y los posibles diagnósticos localizados:

Una vez realizado el análisis este podrá ser consultado en cualquier momento desde el histórico de análisis.

Histórico de análisis

Todos los análisis realizados quedan registrados y podrán ser consultados en cualquier momento, pudiendo visualizar todos los posibles códigos CIE-10 disponibles:

En el próximo artículo...

Veremos como mediante Embedded Python utilizamos un modelo LLM específico para la vectorización tanto de los códigos CIE-10 que usaremos como contexto como de los textos libres.

Si tenéis cualquier pregunta o sugerencia no dudéis en escribir un comentario en el artículo.

Comentarios (0)1
Inicie sesión o regístrese para continuar