Giskard - Estrutura de Testes para ML e LLM
Giskard - Estrutura de Testes para ML e LLM
Giskard é uma estrutura de testes open-source para aplicações de ML e LLM. Sua característica assinatura é um scan automatizado que investiga um modelo em busca de vulnerabilidades — alucinação, injeção de prompt, conteúdo prejudicial, falhas de robustez, viés, e vazamento de dados — e produz um relatório que você pode converter diretamente em um conjunto de testes reutilizável. Esse fluxo de work scan-then-testify é o que o distingue: você não precisa saber o que testar antecipadamente.
Instalação
| Método | Comando |
|---|---|
| pip | pip install giskard |
| LLM extras | pip install "giskard[llm]" |
| Chave de modelo | export OPENAI_API_KEY=... (usado para detectores baseados em LLM) |
| Verificar | python -c "import giskard; print(giskard.__version__)" |
Encapsulando uma App LLM
import giskard
import pandas as pd
def predict(df: pd.DataFrame):
return [my_llm_app(q) for q in df["question"]]
model = giskard.Model(
model=predict,
model_type="text_generation",
name="Support Assistant",
description="Answers customer questions using our docs",
feature_names=["question"],
)
dataset = giskard.Dataset(
pd.DataFrame({"question": ["How do I reset my password?"]}),
target=None,
)
| Campo | Por que é importante |
|---|---|
description | Giskard usa para gerar investigações relevantes |
model_type | text_generation, classification, regression |
feature_names | Colunas de entrada |
A description não é cosmética — o scanner gera entradas adversariais específicas do domínio a partir dela.
Scanning
report = giskard.scan(model, dataset)
report.to_html("scan_report.html")
| Detector | Encontra |
|---|---|
| Alucinação | Reivindicações insustentadas ou incoerentes |
| Injeção de prompt | Sobreposição de instrução |
| Prejudicialidade | Geração de conteúdo inseguro |
| Robustez | Sensibilidade a mudanças triviais de entrada |
| Divulgação sensível | Vazamento de segredos/PII |
| Estereótipos | Viés nas saídas |
| Viés de desempenho | Acurácia desigual entre slices (tabular/NLP) |
# Escaneie apenas grupos de detector específicos
report = giskard.scan(model, dataset, only=["hallucination", "jailbreak"])
Scan → Conjunto de Testes
suite = report.generate_test_suite("Support Assistant tests")
suite.run()
Este é o fluxo de work chave: achados se tornam testes de regressão, então um problema corrigido permanece corrigido e pode ser incluído em CI.
Testes Customizados
from giskard import test, TestResult
@test(name="No refund promises")
def no_refund_promise(model, dataset):
outputs = model.predict(dataset).prediction
bad = [o for o in outputs if "guaranteed refund" in o.lower()]
return TestResult(passed=len(bad) == 0, metric=len(bad))
suite.add_test(no_refund_promise).run()
Avaliação de RAG (RAGET)
Giskard inclui um kit de avaliação de RAG que gera um conjunto de perguntas a partir de sua base de conhecimento e pontuam cada componente do pipeline.
| Componente pontuado | Diz a você |
|---|---|
| Generator | A resposta do LLM é boa dado o contexto? |
| Retriever | A recuperação surfou os chunks certos? |
| Rewriter | A reescrita de query está ajudando? |
| Router | A query foi roteada corretamente? |
| Base de conhecimento | O material de origem é adequado? |
Pontuação em nível de componente é mais acionável que um único número end-to-end — diz a você qual estágio corrigir.
Giskard vs Ferramentas Relacionadas
| Aspecto | Giskard | DeepEval | garak |
|---|---|---|---|
| Ideia central | Auto-scan → conjunto de testes | Métricas de estilo unit-test | Scanner de investigação de modelo |
| Escopo | ML + LLM + RAG | Evals de app LLM | Vulnerabilidades de modelo LLM |
| Relatório | Relatório de scan HTML rico | Saída de CI/dashboard | Relatório CLI |
| Melhor para | Descobrir problemas desconhecidos | Portão de métricas conhecidas | Investigação ampla de modelo |
Pareia com DeepEval para portão de métricas e Ragas para pontuação de RAG; vantagem de Giskard é encontrar problemas que você não pensou em testar.