Por Ricardo Costa Val do Rosário auxiliado por Microsoft CoPilot 365
1. Definição de um pipeline RAG no contexto médico
O pipeline RAG consiste em um fluxo estruturado no qual o modelo de linguagem atua
com base em informações fundamentadas, evitando a geração autônoma de respostas
sem respaldo documental:
1. Recepção da pergunta do usuário (por exemplo: “Qual é o manejo inicial da insuficiência
cardíaca em idosos com dispneia aguda?”).
2. Busca por documentos relevantes em bases confiáveis, como guidelines, protocolos,
consensos e fluxogramas médicos.
3 Recuperação de trechos específicos (como passagens de texto, tabelas ou algoritmos)
pertinentes à questão.
4. Geração da resposta utilizando esses trechos como contexto, redigindo explicações,
resumos ou estruturas em formatos úteis (exemplo: fluxograma, checklist ou síntese).
- No cenário de um fluxograma médico para insuficiência cardíaca em idosos, o pipeline pode:
1. Consultar guidelines (como SBC, ESC, ACC/AHA).
2. Recuperar informações relacionadas ao diagnóstico, estratificação de risco, manejo inicial,
contraindicações em idosos e comorbidades.
3. Elaborar um fluxograma textual ou uma descrição sequencial das etapas, que poderá ser
posteriormente convertida em um diagrama visual.
2. Exemplo de pipeline RAG para fluxograma de insuficiência cardíaca em idosos
Em Python, baseado em frameworks como o LangChain, para demonstrar a lógica de
funcionamento.
# Etapas principais do pipeline:
1. Ingestão de dados: carregar PDFs, diretrizes, protocolos locais.
2. Criação de embeddings: transformar textos em vetores.
3. Armazenamento vetorial: usar um vector store (FAISS, Chroma, etc.).
Exemplo:
Python + LangChain
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import PyPDFLoader
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
Carregar diretrizes de insuficiência cardíaca em idosos
loader = PyPDFLoader("diretriz_insuficiencia_cardiaca_idosos.pdf")
docs = loader.load()
Quebrar em chunks
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
docs_chunks = splitter.split_documents(docs)
Criar embeddings e vector store
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectordb = Chroma.from_documents(docs_chunks, embedding=embeddings)
retriever = vectordb.as_retriever(search_kwargs={"k": 5})
Definir o LLM
llm = ChatOpenAI(model_name="gpt-4o", temperature=0.1)
Criar a chain de RAG
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=retriever,
chain_type="stuff" # simples: junta os trechos e passa para o modelo
)
Pergunta focada em fluxograma
pergunta = """
Você é um especialista em cardiologia geriátrica.
Com base APENAS nas diretrizes fornecidas, descreva um fluxograma textual
para avaliação e manejo inicial da insuficiência cardíaca aguda em idosos
com dispneia, incluindo:
• avaliação clínica inicial
• exames prioritários
• estratificação de gravidade
• decisões de internação
• cuidados especiais em idosos (fragilidade, função renal, polifarmácia).
• Não invente informações fora das diretrizes.
"""
resposta = qa_chain.run(pergunta)
print(resposta)
- A abordagem pode ser estruturada da seguinte forma:
Passo 1: Realizar avaliação dos sinais vitais, saturação de oxigênio e outros parâmetros
relevantes.
Passo 2: Classificar o perfil hemodinâmico do paciente (quente/frio, seco/congesto).
Passo 3: Solicitar exames complementares como BNP, ecocardiograma e radiografia de tórax.
Passo 4: Definir critérios para internação em Unidade de Terapia Intensiva versus enfermaria.
Passo 5: Proceder à adequação das doses medicamentosas em pacientes idosos, com atenção
especial à função renal.
- Este fluxograma textual pode posteriormente ser convertido em um diagrama visual utilizando
ferramentas como Mermaid ou draw.io.