Rechercher

Article
· Jul 29, 2024 4m read

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.

Discussion (0)2
Log in or sign up to continue
Question
· Jul 29, 2024

Task FeatureTracker

Does anyone know what this task does exactly? And what problems would I have if I didn't use an SSL certificate?

I got the error: "SSL/TLS error in SSL_connect(), SSL_ERROR_SSL: protocol error, error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed"

Has anyone encountered this problem before?

4 Comments
Discussion (4)2
Log in or sign up to continue
Article
· Jul 29, 2024 9m read

Indices fonctionnels pour des requêtes ultrarapides sur les tables de relations de plusieurs à plusieurs

Supposons que vous ayez une application qui permette aux utilisateurs d'écrire des articles et de les commenter. (Attendez... ça me dit quelque chose...)

L'objectif est de répertorier, pour un utilisateur donné, tous les messages publiés avec lesquels il a interagi, c'est-à-dire dont il est l'auteur ou qu'il a commentés. Comment faites-vous cela aussi vite que possible?

Voici à quoi pourraient ressembler les définitions de notre classe %Persistent comme point de départ (les définitions de stockage sont importantes, mais omises par souci de concision):

Discussion (0)2
Log in or sign up to continue
Question
· Jul 29, 2024

Check if DTL variable is an empty object

I have a DTL that calls a custom function that returns an object.  How do I code the IF statement to check if the object is empty.  e.g. IF tObject={}

3 Comments
Discussion (3)2
Log in or sign up to continue
Announcement
· Jul 29, 2024

Developer Meetup in Cambridge [AI, LLM, Python] August 28, 2024

Hi Community, 
We invite you to join our next Meetup in Cambridge, MA on August 28, 5:30-7:30 pm.
>> RSVP here <<
 

⏱ Day and Time: August 28, 5:30 p.m. to 7:30 p.m.
📍CIC Venture Café in Cambridge, Massachusetts

Talks:

1️⃣ A Vision for the Future: Scaling Python without Workarounds
Abstract: In this session, we will introduce and demonstrate Exaloop's platform for data teams, which is a newly developed platform, compatible with Python, helping data teams to achieve 10x-100x execution performance improvement, take advantage of multi-processing capabilities, and GPU acceleration without the need to rewrite code in other languages or dependency on software engineering.
Presenter: Ariya Shajii, CTO of Exaloop [ GitHub | Website ]

Bio: Ariya Shajii is co-founder and CTO of Exaloop. Ariya co-founded Exaloop in late 2021 after completing his PhD in MIT’s Computer Science and AI Lab (CSAIL), focusing on the intersection between high-performance computing and computational genomics. He also holds a Master’s degree in computer science from MIT and a Bachelor of Science in computer engineering from Boston University.

2️⃣ Failure Trapping in Large Language Models: AI and statistical approaches
Abstract: This talk will discuss rudimentary and advanced techniques to capture generation failures, misalignment, and harmful prompts in AI.
Presenter: Nicholai Mitchko, Manager, Solution Partner Sales Engineering, InterSystems

Bio: Nicholai [LinkedIn] runs a team of 10 solution engineers at InterSystems that help healthcare companies design, develop, and deliver solutions at enormous scale. In his free time, Nicholai works on large language models, including developing his own models which appear on the Huggingface OpenLLM leaderboard.

Food, beverages, and networking opportunities will be provided as always.
Join our Discord channel to connect with developers from the InterSystems developer ecosystem.

Discussion (0)1
Log in or sign up to continue