Dataset de avaliação para Large Language Models (LLMs) em Português do Brasil na área da saúde
O HealthBench-BR é um benchmark especializado para avaliar a performance de modelos de linguagem em questões médicas e de saúde em português brasileiro. Utiliza um conjunto de perguntas Verdadeiro/Falso cuidadosamente elaboradas para testar o conhecimento e raciocínio dos modelos em contextos médicos.
- Arquitetura Modular: Sistema componentizado com suporte a múltiplos provedores LLM
- Integração LangChain: Utiliza LangChain para abstração e padronização
- Multi-Provider: Suporte para OpenAI, Maritaca/Sabiá, Ollama e AWS Bedrock
- Avaliação Assíncrona: Processamento paralelo para maior eficiência
- Relatórios Detalhados: Exportação em CSV e JSON com métricas completas
Aqui estão dois exemplos de perguntas do benchmark, com suas respostas esperadas:
Pergunta 1: A aspirina é um anti-inflamatório não esteroide.
Resposta esperada: Verdadeiro
Pergunta 2: O diabetes tipo 1 é causado por obesidade.
Resposta esperada: Falso
Abaixo estão os resultados de avaliação dos principais modelos LLM no HealthBench-BR, utilizando o dataset completo (1000 perguntas):
| Provider | Tipo | Modelo | Total | Acertos | Acurácia | Tempo (s) |
|---|---|---|---|---|---|---|
| GPT-4.1 | openai | gpt-4.1 | 1000 | 739 | 73.90% | 275.9 |
| GPT-5 | openai | gpt-5 | 1000 | 809 | 80.90% | 1482.6 |
| Maritaca-Sabiazinho-3 | maritaca | sabiazinho-3 | 1000 | 621 | 62.10% | 92.3 |
| Maritaca-Sabia-3.1 | maritaca | sabia-3.1 | 1000 | 668 | 66.80% | 131.7 |
🏆 Melhor desempenho: GPT-5 com 80.90% de acurácia.
Resultados preliminares (50 perguntas)
| Provider | Tipo | Modelo | Total | Acertos | Acurácia | Tempo (s) |
|---|---|---|---|---|---|---|
| GPT-4.1 | openai | gpt-4.1 | 50 | 35 | 70.00% | 55.7 |
| GPT-5 | openai | gpt-5 | 50 | 42 | 84.00% | 398.0 |
| Maritaca-Sabiazinho-3 | maritaca | sabiazinho-3 | 50 | 30 | 60.00% | 13.3 |
| Maritaca-Sabia-3.1 | maritaca | sabia-3.1 | 50 | 36 | 72.00% | 37.1 |
Resultados preliminares adicionais (50 perguntas)
Dataset testado: Primeiras 50 perguntas do HealthBench-BR
Data/Hora: 2025-10-04 16:58:36
| Provider | Acurácia | Acertos/Total |
|---|---|---|
| Claude-Sonnet-4-Bedrock | 74.00% | 37/50 |
| Maritaca-Sabiazinho-3 | 62.00% | 31/50 |
| MedGemma-27B-Q8 | 58.00% | 29/50 |
Acurácia média: 64.67%
healthbench-br/
├── src/
│ ├── providers/ # Implementações dos provedores LLM
│ │ ├── base.py # Classe base abstrata
│ │ ├── maritaca.py # Provider Maritaca/Sabiá
│ │ ├── openai_provider.py # Provider OpenAI
│ │ ├── ollama.py # Provider Ollama
│ │ └── bedrock.py # Provider AWS Bedrock
│ ├── dataset/ # Carregamento e parsing de dados
│ │ └── loader.py # DatasetLoader e ResponseParser
│ ├── evaluation/ # Lógica de avaliação
│ │ └── evaluator.py # Classe Evaluator principal
│ └── reports/ # Geração de relatórios
│ └── generator.py # ReportGenerator
├── evaluate_batch.py # Avaliação em lote (múltiplos LLMs)
├── evaluate.py # Avaliação individual (um LLM)
├── requirements.txt # Dependências do projeto
└── benchmark_perguntas_unificado.json # Dataset de perguntas
- Python 3.8+
- pip
pip install -r requirements.txtlangchain- Framework principal para LLMslangchain-openai- Integração com OpenAI e compatíveislangchain-community- Provedores da comunidade (Ollama)langchain-aws- Integração com AWS Bedrockopenai- Cliente OpenAIboto3- SDK AWS (para Bedrock)tqdm- Barras de progressoaiohttp- Cliente HTTP assíncrono
O dataset deve estar em formato JSON com a seguinte estrutura:
benchmark_perguntas_unificado.json
[
{
"arquivo": "nome_do_arquivo.txt",
"titulo": "Título do Conjunto de Perguntas",
"perguntas": [
"Pergunta que deve ser respondida como Verdadeiro",
"Pergunta que deve ser respondida como Falso",
"Outra pergunta Verdadeiro",
"Outra pergunta Falso"
]
}
]Importante: As perguntas devem estar em pares sequenciais:
- Posição par (0, 2, 4...) = Verdadeiro
- Posição ímpar (1, 3, 5...) = Falso
O HealthBench-BR oferece duas ferramentas de avaliação:
Para avaliar múltiplos LLMs simultaneamente usando configuração centralizada:
python evaluate_batch.py [opções]--config: Arquivo de configuração (padrão:providers.json)--dataset: Dataset a usar (padrão:benchmark_perguntas_unificado.json)--providers: Lista de providers específicos para avaliar--limit: Limitar número de perguntas por provider--output-dir: Diretório de saída (padrão:evaluation_results)--no-progress: Desabilitar barras de progresso
Avaliar todos os providers ativos:
python evaluate_batch.pyAvaliar providers específicos:
python evaluate_batch.py --providers "MedGemma-27B-Q8" "Claude-Sonnet-4-Bedrock"Com limite de perguntas:
python evaluate_batch.py --limit 50 --output-dir my_resultsPré-requisito: Configure o arquivo providers.json com os LLMs desejados. Exemplo:
{
"providers": [
{
"name": "Claude-Sonnet-4-Bedrock",
"type": "aws_bedrock",
"model": "global.anthropic.claude-sonnet-4-20250514-v1:0",
"region": "us-east-1",
"aws_bearer_token": "${AWS_BEARER_TOKEN_BEDROCK}",
"temperature": 0.0,
"max_tokens": 12000,
"active": true
}
],
"default_settings": {
"parallelism": 10,
"timeout": 120
}
}Para avaliar um único LLM por vez:
python evaluate.py --provider PROVIDER --model MODEL [opções]--provider: Provedor LLM (maritaca,openai,ollama,bedrock)--model: Nome do modelo a usar
--temperature: Temperatura da inferência (padrão: 0.0)--max_tokens: Máximo de tokens por resposta (padrão: 12000)--timeout: Timeout em segundos (padrão: 120)
--api_key: Chave de API (obrigatório para OpenAI/Maritaca)--base_url: URL base customizada (opcional)
--aws_access_key_id: AWS Access Key ID--aws_secret_access_key: AWS Secret Access Key--aws_session_token: AWS Session Token (opcional)--aws_region: Região AWS (padrão: us-east-1)
--dataset_path: Caminho para o arquivo JSON (padrão: benchmark_perguntas_unificado.json)--limit: Limitar número de perguntas a avaliar--parallelism: Número de chamadas paralelas (padrão: 10)
--csv_out: Nome do arquivo CSV de saída (padrão: resultados_avaliacao.csv)--detailed_report: Gerar relatório detalhado em JSON--no_progress: Desabilitar barra de progresso
python evaluate.py \
--provider openai \
--model gpt-4 \
--api_key sk-... \
--temperature 0.1 \
--parallelism 5python evaluate.py \
--provider maritaca \
--model sabia-3 \
--api_key sua_chave_maritaca \
--base_url https://api.maritaca.ai/v1 \
--limit 100python evaluate.py \
--provider ollama \
--model llama3.2:3b \
--base_url http://localhost:11434 \
--parallelism 20python evaluate.py \
--provider bedrock \
--model claude-3-sonnet \
--aws_access_key_id AKIAIOSFODNN7EXAMPLE \
--aws_secret_access_key wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY \
--aws_region us-east-1 \
--detailed_reportpython evaluate.py \
--provider openai \
--model gpt-3.5-turbo \
--api_key sk-... \
--dataset_path meu_dataset.json \
--csv_out resultados_gpt35.csv \
--detailed_report \
--limit 50 \
--parallelism 10O modelo deve responder seguindo o formato:
[Explicação opcional do modelo]
Resposta: Verdadeiro
ou
[Explicação opcional do modelo]
Resposta: Falso
O sistema extrai automaticamente a última ocorrência de "Verdadeiro" ou "Falso" na resposta.
- Progresso em tempo real com barra de progresso
- Acurácia parcial durante execução
- Resumo final com métricas completas
Contém as seguintes colunas:
arquivo: Nome do arquivo fontetitulo: Título do conjuntoidx_local: Índice da perguntapergunta: Texto da perguntaesperado: Resposta corretapred: Predição do modelocorreta: 1 se acertou, 0 se errouresposta_bruta: Resposta completa do modelo
Quando usar --detailed_report, gera arquivo JSON com:
- Timestamp da avaliação
- Métricas agregadas
- Métricas por arquivo
- Métricas por título
- Resultados completos de cada pergunta
Ajuste --parallelism baseado no provider:
- OpenAI/Maritaca: 5-10 (respeitar rate limits)
- Ollama (local): 20-50 (depende do hardware)
- AWS Bedrock: 10-20 (verificar cotas da região)
Ajuste --timeout para modelos mais lentos ou prompts complexos
ImportError: No module named 'langchain'Solução: Instalar dependências
pip install -r requirements.txtErro: --api_key é obrigatório para o provider openaiSolução: Fornecer a chave de API apropriada
Solução: Aumentar o timeout
--timeout 300 # 5 minutosSolução: Reduzir paralelismo
--parallelism 3Para contribuir com o projeto:
- Adicionar novos providers em
src/providers/ - Estender a classe
BaseLLMProvider - Implementar o método
initialize() - Atualizar
evaluate.pypara incluir o novo provider - Adicionar dependências em
requirements.txt - Documentar uso no README
Este projeto está sob a licença especificada no arquivo LICENSE.
Se você estava usando o script evaluate_py.py anterior, migre para o novo sistema:
Antes (antigo):
python evaluate_py.py \
--model sabia3.1 \
--base_url https://api.maritaca.ai/v1 \
--api_key KEYAgora (novo):
python evaluate.py \
--provider maritaca \
--model sabia3.1 \
--api_key KEY- ✅ Suporte a múltiplos providers
- ✅ Arquitetura modular e extensível
- ✅ Integração com LangChain
- ✅ Melhor tratamento de erros
- ✅ Relatórios mais detalhados
- ✅ Código mais limpo e manutenível
Desenvolvido para avaliação de LLMs em português brasileiro no contexto médico e de saúde.