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:
- Lista de códigos do CID-10, que usaremos como contexto da nossa aplicação RAG para buscar diagnósticos dentro dos textos livres.
- Um modelo treinado que vetorize os textos em que vamos buscar as equivalências dos códigos CID-10.
- As livrarias Python necessárias para a ingestão e vetorização dos códigos CID-10 e seus textos.
- Um front-end amigável que admita textos sobre os quais busquemos possíveis diagnósticos.
- Orquestração das solicitações recebidas do front-end.
O que o IRIS nos proporciona para cobrir as necessidades anteriores?
- Importação de CSV, seja usando a funcionalidade de RecordMapper ou diretamente usando Embedded Python.
- Embedded Python nos permite implementar o código Python necessário para gerar os vetores usando o modelo selecionado.
- Publicação de APIs REST que serão chamadas pelo front-end.
- 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
.png)
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:
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:
.png)
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:
.png)
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:
.png)
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:
.png)
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.