* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
24 KiB
Evaluations (Evals) (Ελληνικά)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Πηγή αλήθειας:
src/lib/evals/,src/lib/db/evals.ts,src/app/api/evals/Τελευταία ενημέρωση: 2026-06-28 — v3.8.40
Το OmniRoute παρέχει ένα γενικό πλαίσιο αξιολόγησης που μπορείτε να χρησιμοποιήσετε για τη συγκριτική αξιολόγηση διαμορφώσεων δρομολόγησης, μεμονωμένων παρόχων/μοντέλων ή των ενσωματωμένων σουιτών "golden set". Χρησιμοποιήστε το για να επαληθεύετε αλλαγές στη δρομολόγηση, να επικυρώνετε νέους παρόχους και να θέτετε κριτήρια αποδοχής για τις εκδόσεις πριν τις προωθήσετε στην κίνηση παραγωγής.
Το πλαίσιο υλοποιείται ως εξής:
- Ένας αμιγής εκτελεστής (
src/lib/evals/evalRunner.ts) που καταχωρίζει στη μνήμη τις ενσωματωμένες σουίτες, αξιολογεί τα αποτελέσματα βάσει των αναμενόμενων κριτηρίων και συγκεντρώνει πίνακες βαθμολογίας. - Ένα επίπεδο διατήρησης δεδομένων (
src/lib/db/evals.ts) για προσαρμοσμένες (καθορισμένες από τον χρήστη) σουίτες και ιστορικές εκτελέσεις στο SQLite. - Ένα επίπεδο ενορχήστρωσης (
src/lib/evals/runtime.ts) που εκτελεί κάθε περίπτωση αποστέλλοντας πραγματικές κλήσεις στοPOST /v1/chat/completions, καταγράφει την καθυστέρηση και τα αποτελέσματα και αποθηκεύει την εκτέλεση. - Τελικά σημεία REST στη διαδρομή
/api/evals/*(μόνο με έλεγχο ταυτότητας διαχείρισης). - Μια επιφάνεια στον πίνακα ελέγχου στη διαδρομή
Πίνακας ελέγχου → Χρήση → Αξιολογήσεις(EvalsTab.tsx).
Έννοιες
Σουίτα
Μια σουίτα είναι μια επώνυμη συλλογή περιπτώσεων δοκιμής με μια description και μία ή
περισσότερες περιπτώσεις. Οι σουίτες προέρχονται από δύο πηγές:
| Πηγή | Πού ορίζεται | Μεταβλητή κατά τον χρόνο εκτέλεσης; |
|---|---|---|
built-in |
Καταχωρίζεται μέσω registerSuite() κατά την εκκίνηση |
Όχι (ορίζεται στον κώδικα) |
custom |
Αποθηκεύεται στα eval_suites + eval_cases του SQLite |
Ναι (μέσω API/UI) |
Οι τρέχουσες ενσωματωμένες σουίτες (βλ. src/lib/evals/evalRunner.ts):
golden-set— 10 βασικές περιπτώσεις που καλύπτουν χαιρετισμούς/μαθηματικά/μετάφραση/ασφάλειαcoding-proficiency— Python/JS/SQL/TS/εντοπισμός σφαλμάτωνreasoning-logic— συλλογισμοί, λεκτικά προβλήματα, αναγνώριση μοτίβωνmultilingual— μετάφραση και αναγνώριση γλώσσαςsafety-guardrails— PII, jailbreak, άρνηση, επίγνωση μεροληψίαςinstruction-following— αποκλειστικά JSON, αριθμημένες λίστες, γλωσσικοί περιορισμοίcodex-comparison— άμεσες συγκριτικές εργασίες προγραμματισμού που προορίζονται για τη λειτουργία σύγκρισης
Περίπτωση
Κάθε περίπτωση περιλαμβάνει:
| Πεδίο | Περιγραφή |
|---|---|
id |
Σταθερό αναγνωριστικό (χρησιμοποιείται ως κλειδί για αποτελέσματα και μετρικές) |
name |
Ετικέτα αναγνώσιμη από τον άνθρωπο |
model |
Προεπιλεγμένο μοντέλο όταν η εκτέλεση χρησιμοποιεί στόχευση suite-default |
input |
{ messages, max_tokens? } — αποστέλλεται στο /v1/chat/completions |
expected |
{ strategy, value } — κριτήριο βαθμολόγησης (βλ. παρακάτω) |
tags |
Προαιρετικές ετικέτες (π.χ. safety, pii, jailbreak) |
Στόχος
Η ίδια σουίτα μπορεί να εκτελεστεί έναντι διαφορετικών στόχων. Το σχήμα στόχου είναι το
evalTargetSchema στο src/shared/validation/schemas.ts:
| Τύπος στόχου | id |
Συμπεριφορά |
|---|---|---|
suite-default |
null |
Κάθε περίπτωση χρησιμοποιεί το ενσωματωμένο πεδίο model της |
model |
όνομα μοντέλου | Επιβάλλει τη διέλευση κάθε περίπτωσης από ένα άμεσο μοντέλο (π.χ. gpt-4o) |
combo |
όνομα combo | Εκτελεί κάθε περίπτωση μέσω ενός combo (δοκιμάζει τη μηχανή δρομολόγησης) |
Για τα model και combo, το πεδίο id είναι υποχρεωτικό (επιβάλλεται από το Zod
superRefine). Όταν παρέχεται το compareTarget, οι δύο στόχοι πρέπει να διαφέρουν —
ο εκτελεστής αποθηκεύει και τις δύο εκτελέσεις κάτω από το ίδιο runGroupId για σύγκριση A/B.
Κριτήρια βαθμολόγησης
Υλοποιούνται στη evaluateCase() (evalRunner.ts):
| Στρατηγική | Επιτυχία όταν… |
|---|---|
exact |
actualOutput === expected.value |
contains |
actualOutput.toLowerCase().includes(expected.value.toLowerCase()) |
regex |
new RegExp(expected.value).test(actualOutput) είναι αληθές |
custom |
expected.fn(actualOutput, evalCase) επιστρέφει αληθές (μόνο ενσωματωμένη) |
Σημείωση: Η βαθμολόγηση με προσαρμοσμένη συνάρτηση προορίζεται αποκλειστικά για σουίτες που ορίζονται στον κώδικα (ενσωματωμένες),
επειδή οι συναρτήσεις δεν μπορούν να σειριοποιηθούν μέσω του API. Το
evalCaseBuilderSchema δέχεται μόνο contains | exact | regex για
σουίτες που δημιουργούνται από χρήστες.
Προς το παρόν, δεν υπάρχει βαθμολογητής LLM-as-judge ή ομοιότητας βάσει embeddings — η προσθήκη του
θα μπορούσε να γίνει εύκολα ως σημείο επέκτασης στη evaluateCase().
Σχήμα βάσης δεδομένων
Τρεις πίνακες (μετεγκαταστάσεις 030_create_eval_runs.sql και
031_create_eval_suites.sql):
| Πίνακας | Σκοπός |
|---|---|
eval_suites |
Μεταδεδομένα προσαρμοσμένων σουιτών (id, name, description) |
eval_cases |
Περιπτώσεις ανά σουίτα — input_json, expected_*, tags_json |
eval_runs |
Ιστορικές εκτελέσεις — pass_rate, total, passed, failed, avg_latency_ms, summary_json, results_json, outputs_json |
Οι ενσωματωμένες σουίτες δεν αποθηκεύονται στη βάση δεδομένων. Παραμένουν στη μνήμη και
καταχωρίζονται ξανά κάθε φορά που εισάγεται το evalRunner.ts.
REST API
Όλα τα endpoints απαιτούν έλεγχο ταυτότητας διαχείρισης (requireManagementAuth) — δεν
αποτελούν μέρος της δημόσιας επιφάνειας proxy.
| Endpoint | Μέθοδος | Περιγραφή |
|---|---|---|
/api/evals |
GET |
Παραθέτει σουίτες + πρόσφατες εκτελέσεις + πίνακα βαθμολογίας + στόχους + κλειδιά |
/api/evals |
POST |
Εκτελεί μια σουίτα (μεμονωμένα ή συγκριτικά) — σχήμα evalRunSuiteSchema |
/api/evals/{suiteId} |
GET |
Ανακτά μία σουίτα (ενσωματωμένη ή προσαρμοσμένη) |
/api/evals/suites |
POST |
Δημιουργεί μια προσαρμοσμένη σουίτα — σχήμα evalSuiteSaveSchema |
/api/evals/suites/{suiteId} |
GET |
Ανακτά μια προσαρμοσμένη σουίτα |
/api/evals/suites/{suiteId} |
PUT |
Αντικαθιστά μια προσαρμοσμένη σουίτα (οι περιπτώσεις εισάγονται ξανά) |
/api/evals/suites/{suiteId} |
DELETE |
Διαγράφει μια προσαρμοσμένη σουίτα και τις περιπτώσεις της |
Εκτέλεση μιας σουίτας
curl -X POST http://localhost:20128/api/evals \
-H "Cookie: auth_token=..." \
-H "Content-Type: application/json" \
-d '{
"suiteId": "golden-set",
"target": { "type": "combo", "id": "my-combo" },
"apiKeyId": "optional-api-key-uuid"
}'
Προαιρετικά πεδία:
outputs—Record<caseId, string>με προϋπολογισμένες εξόδους. Όταν παρέχεται, το πρόγραμμα εκτέλεσης παραλείπει την αποστολή και βαθμολογεί μόνο τις αποθηκευμένες εξόδους (χρήσιμο για αξιολόγηση εκτός σύνδεσης).compareTarget— δεύτερος στόχος για παράλληλη εκτέλεση· και οι δύο εκτελέσεις μοιράζονται ένα παραγόμενοrunGroupIdγια προβολή άμεσης σύγκρισης.apiKeyId— εσωτερικό κλειδί API που χρησιμοποιείται για τον έλεγχο ταυτότητας των απεσταλμένων κλήσεων/v1/chat/completions. Απαιτείται όταν είναι ενεργοποιημένο τοREQUIRE_API_KEY.
Δημιουργία μιας προσαρμοσμένης σουίτας
curl -X POST http://localhost:20128/api/evals/suites \
-H "Cookie: auth_token=..." \
-H "Content-Type: application/json" \
-d '{
"name": "Production smoke",
"description": "Quick sanity check before deploy",
"cases": [
{
"name": "JSON shape",
"model": "gpt-4o",
"input": { "messages": [{ "role": "user", "content": "Reply with {\"ok\": true}" }] },
"expected": { "strategy": "regex", "value": "\"ok\"\\s*:\\s*true" }
}
]
}'
Διοχέτευση εκτέλεσης
runEvalSuiteAgainstTarget() (src/lib/evals/runtime.ts):
- Επιλύει τη σουίτα (ενσωματωμένη ή προσαρμοσμένη).
- Για κάθε περίπτωση, δημιουργεί ένα
Requestπρος το/v1/chat/completionsμε ταmessagesτης περίπτωσης, το επιλυμένοmodel,stream: falseκαιmax_tokens: 512(ή την παράκαμψη που ορίζεται στην περίπτωση). - Καλεί απευθείας τον χειριστή συνομιλίας (εντός της διεργασίας — χωρίς επιπλέον μετάβαση HTTP).
- Καταγράφει την καθυστέρηση και εξάγει κείμενο είτε από το
choices[0].message.contentείτε από το ωφέλιμο φορτίοoutput[]του Responses API. - Βαθμολογεί όλες τις εξόδους μέσω του
runSuite()και κατόπιν τις αποθηκεύει μέσω τουsaveEvalRun().
Οι περιπτώσεις εκτελούνται διαδοχικά. Προς το παρόν δεν υπάρχει σημαία ταυτόχρονης εκτέλεσης.
Πίνακας ελέγχου
Το περιβάλλον εργασίας βρίσκεται στο Dashboard → Usage → Evals
(src/app/(dashboard)/dashboard/usage/components/EvalsTab.tsx). Από εκεί μπορείτε:
- Να περιηγηθείτε σε ενσωματωμένες και προσαρμοσμένες σουίτες, με προεπισκόπηση κάθε περίπτωσης.
- Να δημιουργήσετε/επεξεργαστείτε/διαγράψετε προσαρμοσμένες σουίτες μέσω του εργαλείου δημιουργίας περιπτώσεων.
- Να επιλέξετε έναν στόχο (προεπιλογές σουίτας / μοντέλο / συνδυασμός), προαιρετικά έναν δεύτερο
compareTarget, προαιρετικά ένα κλειδί API, και έπειτα να εκτελέσετε τη σουίτα κατ’ απαίτηση. - Να επιθεωρήσετε το ιστορικό εκτελέσεων, την επιτυχία/αποτυχία ανά περίπτωση, την καθυστέρηση και τις καταγεγραμμένες εξόδους.
- Να δείτε τον κυλιόμενο πίνακα αποτελεσμάτων που συγκεντρώνεται από την πιο πρόσφατη εκτέλεση ανά
πεδίο
(suite, target).
Σχέση με το RFC αυτόματης αξιολόγησης
Ένα ξεχωριστό, πιο περιορισμένο υποσύστημα αξιολόγησης βρίσκεται στο src/domain/assessment/
(δείτε επίσης το AUTO-COMBO.md για τη μηχανή βαθμολόγησης σε πραγματικό χρόνο).
Αυτό το υποσύστημα στοχεύει τη μηχανή Auto Combo — βαθμολογεί αυτόματα παρόχους και
μοντέλα, ώστε οι συνδυασμοί να μπορούν να αυτοεπιδιορθώνονται όταν αποτυγχάνουν συστήματα ανωτέρου επιπέδου. Χρησιμοποιεί το δικό του πρόγραμμα εκτέλεσης,
τη δική του κατηγοριοποίηση και τη δική του λογική βαθμολόγησης.
Το πλαίσιο Evals που τεκμηριώνεται εδώ είναι η ευρύτερη επιφάνεια δοκιμών γενικού σκοπού. Προτιμήστε το για αυθαίρετες σουίτες δοκιμών παλινδρόμησης, συγκρίσεις A/B και δοκιμές καπνού ανά έκδοση. Χρησιμοποιήστε το υποσύστημα αυτόματης αξιολόγησης όταν χρειάζεστε η κατάσταση των παρόχων σε πραγματικό χρόνο να επηρεάζει τις αποφάσεις δρομολόγησης.
Ενσωμάτωση CI
Προς το παρόν δεν υπάρχει ειδικό npm script eval:ci. Υπάρχουν δύο διαδρομές, εάν θέλετε να
εξαρτάτε τις εκδόσεις από τα αποτελέσματα αξιολόγησης:
- Διαδρομή HTTP: εκκινήστε τον διακομιστή, καλέστε το
POST /api/evalsμε γνωστάsuiteId+targetκαι επαληθεύστε ότι ισχύειruns[].summary.passRate >= Nστην απόκριση. - Διαδρομή εντός διεργασίας: εισαγάγετε το
runEvalSuiteAgainstTarget()από το@/lib/evals/runtimeσε ένα script, εκτελέστε το σε μια δοκιμαστική βάση δεδομένων και ελέγξτε το επιστρεφόμενοPersistedEvalRun.summary.
Οι δοκιμές που καλύπτουν τη διαδρομή και το ιστορικό βρίσκονται στα
tests/unit/evals-route.test.ts και tests/unit/evals-history.test.ts.
Σημεία επέκτασης
Συνήθεις αλλαγές και πού πρέπει να γίνουν:
- Νέα στρατηγική βαθμολόγησης — επεκτείνετε το μπλοκ
switch (evalCase.expected.strategy)στοevaluateCase()(evalRunner.ts) και διευρύνετε τοEvalCaseStrategyστοsrc/lib/db/evals.ts, καθώς και τοevalCaseBuilderSchemaστοschemas.ts. - Νέα ενσωματωμένη σουίτα — ορίστε ένα αντικείμενο σουίτας και καλέστε το
registerSuite()στο τέλος τουevalRunner.ts. Θα εντοπιστεί αυτόματα από τοlistSuites(). - Εκτέλεση με ταυτόχρονη επεξεργασία — αλλάξτε τον διαδοχικό βρόχο
forστοrunEvalSuiteAgainstTarget()σε ένα οριοθετημένοPromise.all(προς το παρόν δεν υπάρχει έλεγχος ταυτόχρονης εκτέλεσης). - Περιπτώσεις ροής/κλήσης εργαλείων — αυτή τη στιγμή το πρόγραμμα εκτέλεσης επιβάλλει
stream: false. Η αξιολόγηση με επίγνωση ροής ή εργαλείων θα απαιτούσε αλλαγές στοruntime.ts(καταγραφή και συγκέντρωση των τμημάτων SSE πριν από τη βαθμολόγηση).
Δείτε επίσης
- USER_GUIDE.md — γενική περιήγηση στο προϊόν
- ARCHITECTURE.md — αναφορά για τη διοχέτευση αιτημάτων
- AUTO-COMBO.md — μηχανή βαθμολόγησης Auto Combo (σε πραγματικό χρόνο εκτέλεσης)
- Πηγαίος κώδικας:
src/lib/evals/,src/lib/db/evals.ts,src/app/api/evals/ - Διεπαφή χρήστη:
src/app/(dashboard)/dashboard/usage/components/EvalsTab.tsx