Skip to main content

Framework open-source para avaliação de confiabilidade de chatbots baseados em LLMs

Project description

🔍 llm-eval

Framework open-source para avaliação sistemática da confiabilidade de chatbots baseados em LLMs.

CI Docs Python 3.11+ License: MIT Status

📚 Documentação completa: https://mateuspy.github.io/TCC2-llmEval/


Sobre

O llm-eval é um pacote Python que permite avaliar a confiabilidade de qualquer chatbot baseado em LLM de forma automatizada e reprodutível. Ele envia cenários de teste ao chatbot, coleta as respostas, avalia usando a estratégia LLM-as-a-Judge combinada com métricas computacionais como BERTScore, e gera relatórios estruturados.

O framework avalia três dimensões de confiabilidade:

Dimensão O que avalia Como avalia
Precisão Factual O chatbot responde corretamente? Compara respostas com ground truth verificável
Consistência Semântica O chatbot dá a mesma resposta para a mesma pergunta feita de formas diferentes? Envia reformulações e compara respostas entre si
Robustez O chatbot mantém a qualidade diante de ruído, typos e inputs adversariais? Envia variações com erros e compara com a resposta original

O projeto nasceu como parte de um Trabalho de Conclusão de Curso em Engenharia de Software na Universidade de Brasília (UnB), com o objetivo de preencher uma lacuna prática: embora a literatura proponha métricas e critérios para avaliar LLMs, faltam ferramentas acessíveis que permitam aplicá-los de forma sistemática.


Instalação

pip install llm-eval-unb

O pacote é distribuído como llm-eval-unb (o nome llm-eval já estava ocupado no PyPI). O import segue import llm_eval e o comando segue llm-eval.

Requer Python 3.11+. Guia completo (extras de dev, chaves por variável de ambiente): Instalação.


Quick Start

1. Crie um arquivo de configuração

# config.yaml

# Chatbot a ser avaliado
provider:
  type: gemini
  api_key: ${GEMINI_API_KEY}
  model: gemini-2.0-flash
  temperature: 0.0
  max_tokens: 1024

# LLM usado como juiz (avaliador)
judge:
  enabled: true
  provider:
    type: gemini
    api_key: ${GEMINI_API_KEY}
    model: gemini-2.0-flash
    temperature: 0.0
    max_tokens: 2048

# Dimensões a avaliar
dimensions:
  - factual
  - consistency
  - robustness

repetitions: 1
output_dir: ./results
output_format:
  - json
  - markdown

2. Defina sua API key

export GEMINI_API_KEY="sua-api-key-aqui"

3. Execute a avaliação

llm-eval run --config config.yaml

Os resultados são salvos em ./results/report.json (programático) e report.md (leitura humana). Passo a passo detalhado em Guia rápido.

Uso como biblioteca Python

from llm_eval import Config, Runner, ReportGenerator

config = Config.from_yaml("config.yaml")
result = Runner(config).run()

report = ReportGenerator(result)
report.to_json("results/report.json")
report.to_markdown("results/report.md")

Documentação

A referência completa fica no site de documentação:

  • Instalação — requisitos, extras e chaves por variável de ambiente.
  • Guia rápido — do zero a um relatório em três passos.
  • Configuração — referência de todos os campos do config.yaml.
  • Providers — Gemini, Mistral e o provider HTTP genérico (custom).
  • Banco de cenários — formato dos cenários e como usar um banco próprio via scenarios_path.
  • Avaliação — LLM-as-a-Judge (rubrica 1–5) e métricas como BERTScore.
  • Quality gate em CI — rode o mesmo comando como portão de qualidade em PRs.
  • Validação humana — concordância humano × juiz e templates de anotação.

O exemplo vivo de um chatbot avaliado em CI está em examples/demo-chatbot/.


CLI — comandos disponíveis

# Executar avaliação completa
llm-eval run --config config.yaml

# Validar configuração sem executar
llm-eval validate --config config.yaml

# Listar cenários disponíveis
llm-eval scenarios --list
llm-eval scenarios --dimension factual

# Validar o juiz contra um golden set
llm-eval validate-judge --provider gemini

# Regenerar relatório a partir de resultados salvos
llm-eval report --input results/run_result.json --format markdown --output report.md

# Ver versão
llm-eval --version

Como funciona

                          ┌─────────────────┐
                          │   config.yaml   │
                          └────────┬────────┘
                                   │
                                   ▼
                          ┌─────────────────┐
                          │     Runner      │
                          └────────┬────────┘
                                   │
                    ┌──────────────┼──────────────┐
                    │              │              │
                    ▼              ▼              ▼
             ┌───────────┐ ┌───────────┐ ┌───────────┐
             │  Factual  │ │Consistency│ │ Robustness│
             │ Scenarios │ │ Scenarios │ │ Scenarios │
             └─────┬─────┘ └─────┬─────┘ └─────┬─────┘
                   │             │             │
                   ▼             ▼             ▼
             ┌─────────────────────────────────────┐
             │            Provider                 │
             │   (Gemini / Mistral / Custom)       │
             └──────────────────┬──────────────────┘
                                │
                                ▼
             ┌─────────────────────────────────────┐
             │           Evaluation                │
             │  ┌──────────┐  ┌─────────────────┐  │
             │  │  Judge   │  │    Metrics       │  │
             │  │(LLM-as-a-│  │  (BERTScore,    │  │
             │  │  Judge)  │  │   Variance)     │  │
             │  └──────────┘  └─────────────────┘  │
             └──────────────────┬──────────────────┘
                                │
                                ▼
             ┌─────────────────────────────────────┐
             │         Report Generator            │
             │     (JSON + Markdown output)        │
             └─────────────────────────────────────┘

Requisitos

  • Python 3.11 ou superior
  • API key de pelo menos um provider (Gemini, Mistral ou endpoint customizado)
  • API key para o LLM-as-a-Judge (pode ser o mesmo provider)

Contribuindo

Contribuições são bem-vindas! Veja o CONTRIBUTING.md para o guia completo — setup do ambiente, padrões de código, testes e fluxo de PR.

Como você não tem permissão de push no repositório principal, comece pelo fork:

# Faça o fork em github.com/MateusPy/TCC2-llmEval e clone o SEU fork
git clone https://github.com/<seu-usuario>/TCC2-llmEval.git
cd TCC2-llmEval

# Ambiente + instalação editável com deps de dev
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

# Rodar testes e linter
pytest
ruff check .

Roadmap

  • Arquitetura e estrutura do pacote
  • Providers (Gemini, Mistral, Custom)
  • Banco de cenários embutido
  • Módulo de avaliação (LLM-as-a-Judge + BERTScore)
  • Runner e relatórios
  • CLI
  • Site de documentação
  • Publicação no PyPI
  • Suporte a mais dimensões (imparcialidade, segurança)
  • Dashboard web para visualização de resultados

Contexto Acadêmico

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso intitulado "Avaliação Sistemática da Confiabilidade de Chatbots baseados LLMs: Um Processo Reprodutível de Verificação da Qualidade", no curso de Engenharia de Software da Universidade de Brasília (UnB).

Autores: Mateus Orlando Medeiros Ribeiro e Johnny Da Ponte Lopes Orientador: Profa. Dra. Elaine Venson


Licença

Este projeto está licenciado sob a MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llm_eval_unb-0.1.0.tar.gz (95.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llm_eval_unb-0.1.0-py3-none-any.whl (70.3 kB view details)

Uploaded Python 3

File details

Details for the file llm_eval_unb-0.1.0.tar.gz.

File metadata

  • Download URL: llm_eval_unb-0.1.0.tar.gz
  • Upload date:
  • Size: 95.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for llm_eval_unb-0.1.0.tar.gz
Algorithm Hash digest
SHA256 42c46839f037ce67322737e31fc14d0c73ea897c836bb1ec4eeea9729dc9234b
MD5 7ad9c1a9ea383953b7d0d5c8abd2712a
BLAKE2b-256 59e3c2d101ffd78e35741817cdaf46c5367103733c45b2d3f6ad08b857bb1a7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for llm_eval_unb-0.1.0.tar.gz:

Publisher: release.yml on MateusPy/TCC2-llmEval

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file llm_eval_unb-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: llm_eval_unb-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 70.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for llm_eval_unb-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 982f216c746019807634fe8569a729d28d36283bde20ee5439ef722d522f83da
MD5 0c5400f6e3b8aecfde1679704b51f8e6
BLAKE2b-256 8d379d4fbb485804f963ed9abb70c98c20e5e227672a694cfea5006a59edaa3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for llm_eval_unb-0.1.0-py3-none-any.whl:

Publisher: release.yml on MateusPy/TCC2-llmEval

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page