Artigo
· Jul. 29 4min de leitura

d[IA]gnosis: desenvolvendo aplicações RAG com IRIS for Health

Com a introdução dos tipos de dados vetoriais e da funcionalidade de Vector Search em IRIS, se abre todo um mundo de possibilidades para o desenvolvimento de aplicações para nós, e um exemplo delas é a que vi recentemente publicada num concurso do Conselho de Saúde de Valencia, onde solicitavam uma ferramenta para ajudar na codificação CID-10 utilizando modelos de IA.

Como poderíamos implementar uma aplicação similar à solicitada? Vejamos o que seria necessário:

  1. Lista de códigos do CID-10, que usaremos como contexto da nossa aplicação RAG para buscar diagnósticos dentro dos textos livres.
  2. Um modelo treinado que vetorize os textos em que vamos buscar as equivalências dos códigos CID-10.
  3. As livrarias Python necessárias para a ingestão e vetorização dos códigos CID-10 e seus textos.
  4. Um front-end amigável que admita textos sobre os quais busquemos possíveis diagnósticos.
  5. Orquestração das solicitações recebidas do front-end.

O que o IRIS nos proporciona para cobrir as necessidades anteriores?

  1. Importação de CSV, seja usando a funcionalidade de RecordMapper ou diretamente usando Embedded Python.
  2. Embedded Python nos permite implementar o código Python necessário para gerar os vetores usando o modelo selecionado.
  3. Publicação de APIs REST que serão chamadas pelo front-end.
  4. Produções de interoperabilidade que permitem o seguimento da informação dentro do IRIS.

Então, só nos resta ver o exemplo desenvolvido:

d[IA]gnois

Associado a esse artigo, você tem o acesso a aplicação desenvolvida, e nos próximos artigos veremos em detalhe como implementamos cada uma das funcionalidades, desde a utilização do modelo, o armazenamento dos vetores e a utilização das buscas vetoriais.

Revisemos a aplicação:

Importando códigos CID-10

 

A tela de configuração nos indica o formato que se deve seguir o arquivo CSV com os códigos CID=10 que vamos importar. O processo de carga e vetorização consome bastante tempo e recursos, por isso a implantação do container Docker configura não só a memória RAM utilizável por Docker, mas também a memória de disco no caso em que os requerimentos superem a RAM atribuída:

  # 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

O arquivo com os códigos CID-10 está disponível na rota do projeto /shared/cie10/cie10.csv. Uma vez alcançado 100%, a aplicação está pronta para ser utilizada.

Em nossa aplicação, definimos duas funcionalidades diferentes parar a codificação de diagnósticos; uma a partir das mensagens HL7 recebidas no sistema, outra baseada em textos livres.

Captura de diagnósticos usando HL7

O projeto contém uma série de mensagens de HL7 preparados para realizar testes. Só é necessário copiar o arquivo /shared/hl7/messagesa01.hl7 à pasta /shared/HL7In e a produção asssociada se encarregará de extrair o diagnóstico do mesmo para mostrá-lo na aplicação web:

Na tela de solicitações de diagnóstico, poderemos ver todos os diagnósticos recebidos via mensageria HL7. Para sua codificação em CID-10, só precisamos apertar na lupa para mostrar uma lista dos códigos CID-10 mais próximos do diagnóstico recebido:

Uma vez selecionado, veremos na lista o diagnóstico e seu CID-10 associado. Apertando no botão com ícone de envelope, se gerará uma mensagem utilizando a original, incluindo dentro do segmento do diagnóstico o novo selecionado:

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

A dita mensagem poderá ser encontrada na rota /shared/HL7Out

Capturas de diagnósticos en texto livre

Na opção de Analisador de texto, o usuário poderá incluir um texto livre sobre o qual se realizará um processo de análise. A aplicação buscará em tuplas de 3 palavras lematizadas (eliminando artigos, pronomes e demais palavras pouco relevantes). Uma vez analisadas, o sistema nos mostrará o texto relevante e os possíveis diagnósticos localizados:

Uma vez realizada a análise, esta poderá ser consultada a qualquer momento no histórico de análises.

Histórico de análises.

Todas as análises realizadas ficam registradas e poderão ser consultadas a qualquer momento, podendo visualizar todos os possíveis códigos CID-10 disponíveis:

No próximo artigo...

Veremos como podemos usar Embedded Python e um modelo LLM específico para a vetorização tanto dos códigos CID-10 que usaremos como contexto, como dos textos livres.

Se você tem qualquer pergunta ou sugestão, não hesite em escrever um comentário no artigo.

Discussão (0)2
Entre ou crie uma conta para continuar