Métriques d'Évaluation
Mesurez la qualité de vos réponses LLM avec des métriques d'évaluation intégrées et personnalisées.
Pourquoi l'Évaluation ?
Les sorties LLM sont non-déterministes et peuvent varier en qualité. Les métriques d'évaluation vous aident à mesurer et suivre la qualité de votre système RAG, détecter les régressions, et comparer différentes configurations. Orka fournit des métriques intégrées et la possibilité de créer les vôtres.
import { createOrka, OpenAIAdapter, MemoryVectorDB } from 'orkajs'; const orka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }), vectorDB: new MemoryVectorDB(),}); // Define your evaluation datasetconst dataset = [ { input: 'What is Orka AI?', expectedOutput: 'A TypeScript framework for building LLM applications.', knowledge: 'docs', // Knowledge base to use for RAG }, { input: 'How do I install Orka?', expectedOutput: 'Run npm install orkajs', knowledge: 'docs', },]; // Run evaluation with multiple metricsconst summary = await orka.evaluate({ dataset, metrics: ['relevance', 'correctness', 'faithfulness', 'hallucination'],}); console.log(summary.metrics);// {// relevance: { average: 0.95, min: 0.9, max: 1.0 },// correctness: { average: 0.88, min: 0.85, max: 0.92 },// faithfulness: { average: 0.92, min: 0.88, max: 0.96 },// hallucination: { average: 0.05, min: 0.0, max: 0.1 },// } console.log(summary.results); // Detailed per-case resultsconsole.log(summary.passed); // true if all thresholds met# Métriques Intégrées
Orka fournit cinq métriques intégrées qui couvrent les aspects les plus importants de la qualité RAG :
relevancePlus haut = mieuxMesure la pertinence de la réponse générée par rapport à la question originale. Utilise LLM-as-judge pour scorer de 0 (complètement non pertinent) à 1 (parfaitement pertinent).
Cible : > 0.8 pour les systèmes en production
correctnessPlus haut = mieuxCompare la réponse générée à la sortie attendue en utilisant la similarité sémantique. Prend en compte les paraphrases et formulations différentes qui transmettent le même sens.
Cible : > 0.7 (permet les paraphrases)
faithfulnessPlus haut = mieuxMesure si la réponse est ancrée dans le contexte récupéré. Une réponse fidèle ne contient que des informations traçables aux documents sources.
Cible : > 0.85 pour les systèmes RAG
hallucinationPlus bas = mieuxDétecte les informations dans la réponse qui ne sont PAS présentes dans le contexte fourni. C'est l'inverse de faithfulness et signale spécifiquement le contenu fabriqué.
Cible : < 0.15 pour les systèmes en production
costInformatifSuit la consommation de tokens par cas d'évaluation. Utile pour surveiller les coûts et optimiser les longueurs de prompts.
# Métriques Personnalisées
Créez des métriques personnalisées pour des vérifications de qualité spécifiques à votre domaine. Une métrique personnalisée est une fonction async qui reçoit le contexte d'évaluation et retourne un score.
import type { MetricFn } from 'orkajs'; // Custom metric: Check professionalism of toneconst toneCheck: MetricFn = async ({ input, output, context, llm }) => { const result = await llm.generate( `Rate the professionalism of this response on a scale of 0.0 to 1.0. Question: ${input} Response: ${output} Reply with ONLY a number.`, { temperature: 0, maxTokens: 10 } ); const score = parseFloat(result.content.trim()); return { name: 'professionalism', score: isNaN(score) ? 0 : Math.min(1, Math.max(0, score)), };}; // Custom metric: Check response lengthconst lengthCheck: MetricFn = async ({ output }) => { const wordCount = output.split(/\s+/).length; // Penalize very short or very long responses const idealLength = 50; const score = Math.max(0, 1 - Math.abs(wordCount - idealLength) / idealLength); return { name: 'length_appropriateness', score };}; // Use alongside built-in metricsconst summary = await orka.evaluate({ dataset: [...], metrics: ['relevance', 'faithfulness', toneCheck, lengthCheck],});- Contexte MetricFn
input: stringLa question/entrée originale du dataset
output: stringLa réponse générée par le LLM
expectedOutput?: stringLa réponse attendue du dataset (si fournie)
context?: ChunkResult[]Chunks récupérés utilisés pour générer la réponse
llm: LLMAdapterAdaptateur LLM pour faire des appels supplémentaires (ex: LLM-as-judge)
# Résultat de l'Évaluation
interface EvaluationSummary { metrics: { [metricName: string]: { average: number; // Average score across all cases min: number; // Minimum score max: number; // Maximum score stdDev: number; // Standard deviation }; }; results: EvaluationResult[]; // Per-case detailed results passed: boolean; // True if all thresholds met totalCases: number; // Number of test cases totalLatencyMs: number; // Total evaluation time totalTokens: number; // Total tokens consumed}💡 Bonnes Pratiques
- Utilisez les quatre métriques pour le RAG : relevance, correctness, faithfulness, hallucination
- Un bon système RAG devrait avoir faithfulness > 0.85 et hallucination < 0.15
- Créez des métriques personnalisées pour des vérifications spécifiques (ton, longueur, format)
- Exécutez les évaluations en CI/CD pour détecter les régressions avant le déploiement
Imports Tree-shakeable
// ✅ Import evaluation typesimport type { MetricFn, EvaluationSummary } from 'orkajs'; // ✅ Import built-in metrics individuallyimport { relevance, correctness, faithfulness, hallucination } from 'orkajs/evaluation';