agno-metrics-rag
agno-metrics-rag é uma biblioteca de avaliação de qualidade e observabilidade contínua de RAG para o ecossistema Agno. Inspirada nas métricas do RAGAS, ela provê:
- 🗄️ Auto-provisionamento de Tabelas: Criação idempotente de tabelas PostgreSQL compatíveis com o Agno (
PostgresDb/PgVector). - 📁 MetricsRagArchive: Consultas avançadas, pesquisas filtradas com paginação, cruzamentos relacionais de sessões/usuários e relatórios detalhados de custos de LLM e Embeddings.
- 🧠 Geração de Datasets Sintéticos: Síntese de trios
(pergunta, ground_truth, contextos)extraídos diretamente dos chunks gravados no seuKnowledge/PgVectorusando qualquer LLM suportado pelo Agno. - 📊 Família Completa de Métricas RAG (RAGAS-compliant):
- Generation:
FaithfulnessMetric: Detecção de alucinações vs contexto.AnswerRelevanceMetric: Relevância e completude da resposta vs pergunta.AnswerCorrectnessMetric: F1-score factual (TP/FP/FN) + similaridade semântica com o Ground Truth.AnswerSemanticSimilarityMetric: Grau de preservação do significado e intenção.
- Retrieval:
ContextPrecisionMetric: Avaliação de Mean Average Precision (chunks relevantes no topo).ContextRecallMetric: Cobertura dos fatos do Ground Truth no contexto.ContextRelevanceMetric/ Noise Ratio: Proporção de informação útil vs ruído nos chunks.ContextEntityRecallMetric: Cobertura e fidelidade de entidades nomeadas (nomes, IDs, valores, datas).
- Safety & Quality:
AspectCritiqueMetric: Auditoria de critérios (harmfulness, toxicity, conciseness, politeness, regras customizadas).
- Agentic RAG:
ToolCallAccuracyMetric: Acurácia da seleção de tools e precisão dos argumentos gerados.
- Generation:
- ⚡ Tool Hook de Runtime (Síncrono ou em Background): Intercepta chamadas de busca (
search_knowledgeou tool customizada) e computa a qualidade sem bloquear a resposta do agente ao usuário final.
📦 Instalação
pip install agno-metrics-rag
🚀 Guia de Uso Rápido
1. Inicializando o Banco de Métricas
from agno_metrics_rag import RagMetricsDb
db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"
metrics_db = RagMetricsDb(db_url=db_url)
2. Gerando um Dataset Sintético a partir do Knowledge
from agno.models.openai import OpenAIChat
from agno.vectordb.pgvector import PgVector
from agno_metrics_rag import RagTestsetGenerator
judge_model = OpenAIChat(id="gpt-4o-mini")
vector_db = PgVector(table_name="minha_tabela_de_vetores", db_url=db_url)
generator = RagTestsetGenerator(
model=judge_model,
db=metrics_db,
vector_db=vector_db,
)
# Gera perguntas e ground-truths baseados nos chunks reais gravados no banco
testset = generator.generate_testset(
name="Dataset de Qualidade RAG",
num_samples=10,
persist=True,
)
3. Rodando um Ciclo de Testes e Avaliação
from agno_metrics_rag import RagEvaluator
evaluator = RagEvaluator(
judge_model=judge_model,
db=metrics_db,
)
# Executa a bateria de testes contra o Agente
report = evaluator.run_suite(
agent=meu_agente_agno,
testset=testset,
)
print("Resumo:", report.metrics_summary)
# Exemplo de saída:
# {
# 'avg_faithfulness': 0.94,
# 'avg_answer_relevance': 0.89,
# 'avg_context_precision': 0.92,
# 'avg_context_recall': 0.85
# }
4. Monitoramento Contínuo em Produção (Tool Hook em Background)
from agno.agent import Agent
from agno_metrics_rag import RagMetricsHook, HookMode
metrics_hook = RagMetricsHook(
db=metrics_db,
judge_model=judge_model,
mode=HookMode.ASYNC_BACKGROUND, # Executa em background thread, zero impacto na latência
target_tool_names=["search_knowledge"],
)
agent = Agent(
model=OpenAIChat(id="gpt-4o-mini"),
knowledge=knowledge,
search_knowledge=True,
tool_hooks=[metrics_hook],
)
agent.print_response("Quais as receitas disponíveis?")
5. Consultas Avançadas, Cruzamento de Dados e Relatório de Custos
from agno_metrics_rag import MetricsRagArchive
archive = MetricsRagArchive(db=metrics_db)
# Buscas filtradas e paginadas
runs = archive.search_eval_runs(user_id="user-1", status="completed", limit=10)
runtime_calls = archive.search_runtime_metrics(tool_name="search_knowledge", limit=20)
# Cruzamento de dados de um ciclo de avaliação completo
run_details = archive.get_eval_run_details(run_id="run-123")
# Visão consolidada da sessão ou do usuário
session_view = archive.get_session_overview(session_id="sess-456")
user_view = archive.get_user_overview(user_id="user-1")
# Relatório de custos de LLM e Embeddings
cost_list = archive.list_costs(user_id="user-1")
cost_summary = archive.get_cost_summary(user_id="user-1")
print("Custo Total:", cost_summary["total_cost"])
print("Consumo por Modelo:", cost_summary["by_model"])
🛠️ Publicação no PyPI
Você pode utilizar o script de automação para incrementar a versão e publicar no PyPI:
# Subversão (Minor) - Padrão (ex: 0.1.4 -> 0.2.0)
python scripts/publish.py
# Versão Principal (Major) (ex: 0.1.4 -> 1.0.0)
python scripts/publish.py --major
📄 Licença
Distribuído sob a licença MIT.
Metadata
Release files for agno-metrics-rag 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| agno_metrics_rag-0.2.0.tar.gz | 123.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agno_metrics_rag-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 164.8 kB
Release files / agno_metrics_rag-0.2.0.tar.gz
| Download URL | agno_metrics_rag-0.2.0.tar.gz |
|---|---|
| Size | 123.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3fb90b226f3b13fdd57ab0e864f00db5e6e47c4428a821713f9e65f1884499b9
|
|
BLAKE2b-256 checksum How to use checksums |
de31e9a836d05413c107fee02184de0ba2366c773460ed627a47381064d8619e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / agno_metrics_rag-0.2.0-py3-none-any.whl
| Download URL | agno_metrics_rag-0.2.0-py3-none-any.whl |
|---|---|
| Size | 41.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6cf82991f12b8b0b941e1282082a932cab2a00d19b3810a9e8a72bb44d07c194
|
|
BLAKE2b-256 checksum How to use checksums |
faa99fb41b49d2ee00ffcf195b5d5ebda1920a4af326010613c5bc3e2f0ad24a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Security for agno-metrics-rag 0.2.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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.