Consulte dados epidemiológicos do DATASUS usando linguagem natural. Basta digitar sua pergunta — a IA gera a consulta SQL, executa no banco local e devolve a resposta formatada.
DATASUS AI Search é uma aplicação Python que integra dados públicos do DATASUS com modelos de linguagem (LLMs) para permitir consultas epidemiológicas em português simples. Você não precisa saber SQL — basta fazer uma pergunta como faria a um colega especialista.
Exemplos de perguntas:
| Pergunta | Sistema DATASUS |
|---|---|
| "Qual a prevalência de tuberculose em São Paulo em 2018?" | SIM (Mortalidade) |
| "Número de internações por doenças cardiovasculares em 2020" | SIH (Internações) |
| "Quais as 10 principais causas de morte no Brasil em 2019?" | SIM (Mortalidade) |
| "Quantos procedimentos ambulatoriais em Minas Gerais em 2021?" | SIA (Ambulatorial) |
| "Taxa de mortalidade infantil por estado em 2022" | SIM + IBGE |
Pergunta do usuário
│
▼
┌───────────────┐ ┌─────────────────┐ ┌──────────────────┐
│ AIEngine │────▶│ QueryExecutor │────▶│ DuckDB (local) │
│ (LLM / SQL) │◀────│ (executa SQL) │◀────│ dados DATASUS │
└───────────────┘ └─────────────────┘ └──────────────────┘
│
▼
Resposta formatada
O fluxo completo é:
- O usuário faz uma pergunta em linguagem natural.
- O AIEngine envia a pergunta + esquema do banco ao LLM, que gera uma consulta SQL.
- O QueryExecutor valida e executa o SQL no banco DuckDB local.
- Os resultados brutos são enviados de volta ao LLM para formatação da resposta final.
- A resposta é exibida ao usuário na interface web ou no terminal.
Os dados são baixados diretamente dos servidores FTP do DATASUS via biblioteca datasus-db:
| Dataset | Sistema | Conteúdo |
|---|---|---|
sim_do |
SIM | Declarações de Óbito — mortalidade, causas, perfil demográfico |
sih_rd |
SIH | AIH Reduzida — internações hospitalares, diagnósticos, permanência |
sia_pa |
SIA | Produção Ambulatorial — procedimentos, atendimentos |
ibge_pop |
IBGE | Dados populacionais por município, sexo e faixa etária |
- Python 3.11 ou superior
- Chave de API de um LLM compatível com a API da OpenAI (OpenAI, Anthropic via proxy, Ollama, etc.)
git clone https://github.com/fabianofilho/datasus-ai-search.git
cd datasus-ai-searchpython -m venv venv
source venv/bin/activate # Linux/macOS
# venv\Scripts\activate # Windows
pip install -r requirements.txtcp .env.example .env
# Edite o .env com sua chave de APIOPENAI_API_KEY=sk-sua-chave-aqui
# LLM_API_BASE=http://localhost:11434/v1 # Para Ollama local
# LLM_MODEL=gpt-4.1-miniNa primeira execução, os dados do DATASUS precisam ser baixados e importados:
# Via CLI
python src/cli.py --init
# Ou especificando apenas alguns datasets
python src/cli.py --init --datasets sim_do sih_rdAtenção: O download pode levar vários minutos dependendo da sua conexão, pois os arquivos do DATASUS são grandes.
Via interface web (recomendado):
streamlit run src/app.pyAcesse http://localhost:8501 no navegador.
Via linha de comando:
python src/cli.py "Qual o número de internações por doenças cardiovasculares em São Paulo em 2020?"
# Para ver o SQL gerado
python src/cli.py --show-sql "Quantos óbitos por tuberculose em 2018?"A interface Streamlit oferece:
- Campo de texto para a pergunta em linguagem natural
- Seleção de modelo de LLM (GPT-4.1-mini, GPT-4.1-nano, Gemini, etc.)
- Botões de exemplo para perguntas comuns
- Exibição da resposta formatada e do SQL gerado
- Histórico das últimas consultas da sessão
python -m pytest tests/ -v# Instale o Ollama: https://ollama.ai
ollama pull llama3
# Configure o .env
LLM_API_BASE=http://localhost:11434/v1
LLM_MODEL=llama3
OPENAI_API_KEY=ollama # qualquer valor não vazioQualquer provedor que implemente a API da OpenAI pode ser usado. Basta configurar LLM_API_BASE e LLM_MODEL.
datasus-ai-search/
├── src/
│ ├── __init__.py
│ ├── data_manager.py # Download e gestão dos dados do DATASUS
│ ├── ai_engine.py # Integração com LLM (geração de SQL e resposta)
│ ├── query_executor.py # Execução segura de SQL no DuckDB
│ ├── app.py # Interface web (Streamlit)
│ └── cli.py # Interface de linha de comando
├── tests/
│ └── test_query_executor.py
├── data/ # Banco DuckDB (gerado automaticamente, não versionado)
├── .env.example
├── .gitignore
├── requirements.txt
└── README.md
Contribuições são muito bem-vindas! Abra uma issue ou envie um pull request.
- Faça um Fork do projeto
- Crie sua branch (
git checkout -b feature/minha-feature) - Commit suas mudanças (
git commit -m 'feat: adiciona suporte a SINAN') - Push para a branch (
git push origin feature/minha-feature) - Abra um Pull Request
Distribuído sob a Licença MIT. Veja LICENSE para mais informações.
- datasus-db — acesso programático aos dados do DATASUS
- DuckDB — banco de dados analítico local de alta performance
- Streamlit — framework para interfaces de dados em Python
- DATASUS / Ministério da Saúde — pelos dados públicos de saúde