Pular para o conteúdo

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étodoComando
pippip install giskard
LLM extraspip install "giskard[llm]"
Chave de modeloexport OPENAI_API_KEY=... (usado para detectores baseados em LLM)
Verificarpython -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,
)
CampoPor que é importante
descriptionGiskard usa para gerar investigações relevantes
model_typetext_generation, classification, regression
feature_namesColunas 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")
DetectorEncontra
AlucinaçãoReivindicações insustentadas ou incoerentes
Injeção de promptSobreposição de instrução
PrejudicialidadeGeração de conteúdo inseguro
RobustezSensibilidade a mudanças triviais de entrada
Divulgação sensívelVazamento de segredos/PII
EstereótiposViés nas saídas
Viés de desempenhoAcurá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 pontuadoDiz a você
GeneratorA resposta do LLM é boa dado o contexto?
RetrieverA recuperação surfou os chunks certos?
RewriterA reescrita de query está ajudando?
RouterA query foi roteada corretamente?
Base de conhecimentoO 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

AspectoGiskardDeepEvalgarak
Ideia centralAuto-scan → conjunto de testesMétricas de estilo unit-testScanner de investigação de modelo
EscopoML + LLM + RAGEvals de app LLMVulnerabilidades de modelo LLM
RelatórioRelatório de scan HTML ricoSaída de CI/dashboardRelatório CLI
Melhor paraDescobrir problemas desconhecidosPortão de métricas conhecidasInvestigaçã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.

Recursos