Skip to main content

🔍 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.

Metadata

Release files for llm-eval-unb 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for llm-eval-unb 0.1.0
File Size Uploaded Provenance Actions
llm_eval_unb-0.1.0.tar.gz 95.7 kB With provenance Details for llm_eval_unb-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for llm-eval-unb 0.1.0
File Interpreter ABI Platform Actions
llm_eval_unb-0.1.0-py3-none-any.whl Python 3 none any Details for llm_eval_unb-0.1.0-py3-none-any.whl

Total release size: 166.1 kB

Release files / llm_eval_unb-0.1.0.tar.gz

Download URL llm_eval_unb-0.1.0.tar.gz
Size 95.7 kB
Tags Source
SHA-256 checksum
How to use checksums
42c46839f037ce67322737e31fc14d0c73ea897c836bb1ec4eeea9729dc9234b
BLAKE2b-256 checksum
How to use checksums
59e3c2d101ffd78e35741817cdaf46c5367103733c45b2d3f6ad08b857bb1a7a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 10, 2026.

Transparency log

Release files / llm_eval_unb-0.1.0-py3-none-any.whl

Download URL llm_eval_unb-0.1.0-py3-none-any.whl
Size 70.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
982f216c746019807634fe8569a729d28d36283bde20ee5439ef722d522f83da
BLAKE2b-256 checksum
How to use checksums
8d379d4fbb485804f963ed9abb70c98c20e5e227672a694cfea5006a59edaa3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 10, 2026.

Transparency log

Security for llm-eval-unb 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for llm_eval_unb-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 10, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page