* 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.
48 KiB
Compression Engines (Ελληνικά)
🌐 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
Η συμπίεση του OmniRoute βασίζεται σε συμβόλαια μηχανών. Μια λειτουργία μπορεί να εκτελεί απευθείας μία μηχανή
(caveman ή rtk) ή μια ντετερμινιστική διαδοχική διοχέτευση που εκτελεί πολλές μηχανές με τη σειρά.
Λειτουργίες
| Λειτουργία | Διαδρομή μηχανών | Προβλεπόμενη είσοδος |
|---|---|---|
off |
καμία | Ακριβής διατήρηση της προτροπής |
lite |
Βοηθητικά εργαλεία Caveman lite | Εκκαθάριση χαμηλού κινδύνου, πάντα ενεργή |
standard |
Caveman | Σύμπτυξη προτροπών φυσικής γλώσσας |
aggressive |
Caveman + συνοψιστές ιστορικού/εργαλείων | Μακροχρόνιες συνεδρίες συνομιλίας |
ultra |
Caveman + βοηθητικά εργαλεία περικοπής | Ανάκαμψη από το όριο περιβάλλοντος |
rtk |
RTK | Έξοδος τερματικού, κελύφους, δόμησης, δοκιμών και git |
omniglyph |
OmniGlyph | Περιβάλλον ως εικόνα στην εγγενή σύνδεση του παρόχου |
stacked |
Διοχέτευση, προεπιλογή rtk -> caveman |
Μικτά αρχεία καταγραφής εργαλείων και κείμενο, μέγιστη εξοικονόμηση |
Προφίλ συμπίεσης OmniGlyph
Η μηχανή omniglyph (πακέτο omniglyph, 1.4.0+) δέχεται ένα επώνυμο σημασιολογικό προφίλ, το οποίο ορίζεται
καθολικά μέσω του omniglyph.profile στις ρυθμίσεις συμπίεσης ή ανά βήμα μέσω της
διαμόρφωσης βημάτων της διαδοχικής διοχέτευσης:
| Προφίλ | Όριο |
|---|---|
aggressive |
Προεπιλογή. Η πολιτική που μετρήθηκε στις δημοσιευμένες καταγραφές — απεικονίζει το σύστημα, την τεκμηρίωση εργαλείων και το πυκνό ιστορικό |
balanced |
Διατηρεί την ενεργή κατάσταση στην εγγενή μορφή, προστατεύει τους τελευταίους 8 γύρους και συμπτύσσει το παλαιότερο κλειστό ιστορικό |
coding-safe |
Διατηρεί την εξουσιοδότηση, τα σχήματα εργαλείων και την ενεργή έξοδο εργαλείων στην εγγενή μορφή, προστατεύει τους τελευταίους 12 γύρους |
passthrough |
Δρομολογεί χωρίς μετασχηματισμό· η μηχανή παραλείπεται |
Το προφίλ είναι ανώτατο όριο, όχι κατώτατο: το mergeCompressionProfileOptions στο πακέτο
δεν επιτρέπει σε μια παράκαμψη του καλούντος να ανοίξει ξανά μια διοχέτευση με απώλειες την οποία έκλεισε το προφίλ, επομένως μια ρύθμιση ανά βήμα
preserveSystemPrompt: false δεν μπορεί να ενεργοποιήσει ξανά τη συμπίεση συστήματος υπό το coding-safe.
Μετρήσεις σε αυτή τη βάση κώδικα: τα coding-safe και balanced αυξάνουν το minCompressChars στο
μέγιστο και διατηρούν το σύστημα, τα σχήματα εργαλείων και τα αποτελέσματα εργαλείων στην εγγενή μορφή, επομένως μια συνεδρία που δεν έχει
συσσωρεύσει ακόμη ιστορικό σταματά στο below_min_chars και η μηχανή δεν μετασχηματίζει τίποτα. Αυτός
είναι ο λόγος που η προεπιλογή είναι aggressive αντί για το ασφαλέστερο προφίλ.
Το πακέτο επιλύει το δικό του πεδίο μοντέλων και προφίλ από τη διαμόρφωση περιβάλλοντός του. Το OmniRoute δεν εκχωρεί ποτέ την απόφαση: ο προσαρμογέας καθηλώνει την πύλη μοντέλων στο πιο περιοριστικό πεδίο του πακέτου, ώστε οι ρυθμίσεις περιβάλλοντος του κεντρικού συστήματος να μπορούν μόνο να περιορίσουν τη λίστα επιτρεπόμενων επιλογών και ποτέ να μην τη διευρύνουν πέρα από τις μετρημένες καταγραφές του OmniRoute.
Μητρώο μηχανών
Το μητρώο βρίσκεται στο open-sse/services/compression/engines/registry.ts. Οι μηχανές εκθέτουν μια κοινή
σύμβαση:
id: σταθερό αναγνωριστικό μηχανής, όπωςcavemanήrtkapply(text, config): παλαιότερη διαδρομή εκτέλεσης που χρησιμοποιείται από στοιβαγμένες διοχετεύσειςcompress(input, config): κύρια διαδρομή εκτέλεσης που επιστρέφει κείμενο + στατιστικάgetConfigSchema(): επιστρέφει τη μορφή έγκυρης ρύθμισης, παρόμοια με JSON SchemavalidateConfig(config): επιστρέφει{ valid, errors[] }
Η εγγραφή χρησιμοποιεί τη registerCompressionEngine(engine) (ή τη registerEngine για προχωρημένες περιπτώσεις),
η οποία καλεί τις assertValidEngine() και validateConfig(defaultConfig) πριν από την αποδοχή.
Χρησιμοποιήστε τη unregisterCompressionEngine(id) για να αφαιρέσετε μια μηχανή κατά τον χρόνο εκτέλεσης.
Το strategySelector.ts εγγράφει τις ενσωματωμένες μηχανές πριν από την εκτέλεση της συμπίεσης. Αυτό επιτρέπει στην προεπισκόπηση,
τη συμπίεση κατά τον χρόνο εκτέλεσης, τη στοιβαγμένη λειτουργία, τις δοκιμές και τις μελλοντικές μηχανές να χρησιμοποιούν την ίδια διαδρομή εκτέλεσης.
Συμπίεση περιγραφών MCP (σχετικό)
Ένα ξεχωριστό μητρώο συμπιέζει τα μεταδεδομένα περιγραφής εργαλείων MCP σε επίπεδο μητρώου — δείτε τα
open-sse/mcp-server/descriptionCompressor.ts και MCP-SERVER.md. Επαναχρησιμοποιεί
τους κανόνες του Caveman, αλλά λειτουργεί σε μεταδεδομένα εργαλείων και όχι σε ωφέλιμα φορτία αιτημάτων.
Πρόσθετες ενσωματωμένες μηχανές
Πέρα από τις Caveman, RTK και LLMLingua-2, το μητρώο παρέχει αρκετές εξειδικευμένες μηχανές χωρίς απώλειες / δομικές μηχανές (που χρησιμοποιούνται από στοιβαγμένες διοχετεύσεις, την περιοχή δοκιμών και τις δοκιμές):
| Μηχανή | Id | Τι κάνει |
|---|---|---|
| CCR | ccr |
Συμπίεση-Ανάκτηση Περιεχομένου (H4): αντικαθιστά μεγάλα συνεχόμενα μπλοκ κειμένου με αναφορές βάσει περιεχομένου, ώστε τα επαναλαμβανόμενα/μεγάλα μπλοκ να αποστέλλονται μία φορά και στη συνέχεια να γίνεται αναφορά σε αυτά. |
| headroom | headroom |
SmartCrusher (H3 + N5): πινακοειδής συμπύκνωση χωρίς απώλειες ομοιογενών ωφέλιμων φορτίων πινάκων JSON σε μια στηλοειδή μορφή [N rows]. |
| ionizer | ionizer |
Δειγματοληψία γραμμών κεφαλής/μέσης/ουράς για πολύ μεγάλα ομοιογενή μπλοκ, με αποθήκευση του παραλειπόμενου μεσαίου τμήματος ως αναφορά CCR βάσει περιεχομένου. |
| session-dedup | session-dedup |
Απαλοιφή διπλοτύπων μεταξύ εναλλαγών βάσει περιεχομένου (εμπνευσμένη από το TokenMizer): παραλείπει κείμενο που έχει ήδη εμφανιστεί σε προηγούμενες εναλλαγές της ίδιας συνεδρίας. |
Οδηγία πρωτοκόλλου ανάκτησης CCR (#8033): την πρώτη φορά που το CCR αντικαθιστά ≥1 μπλοκ σε ένα
αίτημα, η μηχανή προσθέτει στην αρχή ένα μοναδικό, ταυτοδύναμο μήνυμα system (που ξεκινά με τον
φρουρό [CCR protocol]), το οποίο διδάσκει στον καλούντα τη σύμβαση δείκτη → εργαλείου: τι σημαίνει ένας
δείκτης [CCR retrieve hash=<24hex> chars=N], ότι η τιμή κατακερματισμού πρέπει να αντιγραφεί κατά λέξη
(και οι 24 δεκαεξαδικοί χαρακτήρες — οι λανθασμένα αντιγραμμένες τιμές κατακερματισμού είναι η πιθανή αιτία
των αστοχιών "το μπλοκ δεν βρέθηκε") και ότι ένας δείκτης [dedup:ref sha=...] σημαίνει "ανατρέξτε στο ιστορικό",
όχι "καλέστε το εργαλείο". Η σημείωση εισάγεται μόνο όταν τα δηλωμένα tools[] του καλούντος αποδεικνύουν ότι μπορεί
πράγματι να προσπελάσει το omniroute_ccr_retrieve (callerSupportsCcrRetrieve() στο
open-sse/services/compression/engines/ccr/protocolInstruction.ts) — ένας απλός καλών συμβατός με το
OpenAI χωρίς αυτό το εργαλείο δεν λαμβάνει ποτέ οδηγία να καλέσει κάτι που δεν μπορεί να προσπελάσει.
Η ταυτοδυναμία επιβάλλεται με σάρωση του ιστορικού μηνυμάτων για τον φρουρό πριν από την εισαγωγή, ώστε τα
αιτήματα πολλαπλών εναλλαγών (τα οποία επαναλαμβάνουν προηγούμενα μηνύματα) να μη συσσωρεύουν τη
σημείωση μία φορά ανά εναλλαγή.
Caveman
Η λειτουργία Caveman εστιάζει στη σημασιολογική συμπύκνωση του κανονικού πεζού λόγου:
- διατηρεί μπλοκ κώδικα, URLs, JSON, διαδρομές και δομημένα δεδομένα
- αφαιρεί περιττό κείμενο, επιφυλάξεις, επαναλαμβανόμενα συμφραζόμενα και φλύαρες συνδετικές διατυπώσεις
- υποστηρίζει πακέτα κανόνων αρχείων ανά γλώσσα στο
open-sse/services/compression/rules/ - παραμένει διαθέσιμη μέσω των παλαιότερων λειτουργιών
standard,aggressiveκαιultra
Η σχετική ενότητα στον πίνακα ελέγχου είναι Dashboard -> Context & Cache -> Caveman.
Το upstream του Caveman αναφέρει ~75% λιγότερα token εξόδου, 65% μέση εξοικονόμηση εξόδου σε συγκριτικές δοκιμές
με εύρος 22-87%, καθώς και ένα εργαλείο συμπίεσης εισόδου ~46%. Το OmniRoute χρησιμοποιεί την τιμή του Caveman για την πλευρά εισόδου
κατά την τεκμηρίωση συνδυαστικών εξοικονομήσεων prompt/συμφραζομένων· η λειτουργία εξόδου του Caveman παραμένει ξεχωριστή
δυνατότητα συμπεριφοράς απόκρισης.
RTK
Η λειτουργία RTK εστιάζει στην έξοδο εντολών και εργαλείων:
- ανιχνεύει κατηγορίες εξόδου όπως
git status,git branch,git diff, Vitest/Jest/Pytest, δοκιμές Cargo/Go, builds TypeScript/Vite/Webpack, ESLint, ελέγχους/εγκαταστάσεις npm, αρχεία καταγραφής Docker,find/grepκελύφους, ίχνη στοίβας και γενικά αρχεία καταγραφής - εφαρμόζει 49 φίλτρα JSON από το
open-sse/services/compression/engines/rtk/filters/ - υποστηρίζει τη δηλωτική διοχέτευση τύπου RTK: αφαίρεση ANSI, αντικατάσταση, βραχυκύκλωση match-output, αφαίρεση/διατήρηση γραμμών, περικοπή ανά γραμμή, περικοπή head/tail/μέγιστου αριθμού γραμμών και εφεδρική συμπεριφορά για κενό αποτέλεσμα
- υποστηρίζει φίλτρα έργου ελεγχόμενα βάσει εμπιστοσύνης στο
.rtk/filters.jsonκαι καθολικά φίλτρα στοDATA_DIR/rtk/filters.json - αφαιρεί ακολουθίες ANSI, θόρυβο προόδου, επαναλαμβανόμενες γραμμές και μη χρήσιμο τυποποιημένο κείμενο
- διατηρεί αξιοποιήσιμες αποτυχίες, προειδοποιήσεις, περιλήψεις, τροποποιημένα αρχεία και τα συμφραζόμενα του τέλους
- μπορεί προαιρετικά να διατηρεί αποχαρακτηρισμένη ανεπεξέργαστη έξοδο για ανάκτηση/εντοπισμό σφαλμάτων μέσω πιστοποιημένων διαδρομών διαχείρισης
Η σχετική ενότητα στον πίνακα ελέγχου είναι Dashboard -> Context & Cache -> RTK.
Οι λειτουργικές λεπτομέρειες για προσαρμοσμένα φίλτρα, εμπιστοσύνη, επαλήθευση και ανάκτηση ανεπεξέργαστης εξόδου βρίσκονται στο
RTK_COMPRESSION.md.
Το upstream του RTK αναφέρει εξοικονόμηση 60-90% για τη συμπίεση εξόδου εντολών. Το παράδειγμα του README παρουσιάζει μια
συνεδρία Claude Code διάρκειας 30 λεπτών να μειώνεται από ~118,000 token σε ~23,900, δηλαδή εξοικονόμηση 79.7%.
LLMLingua-2 (Σημασιολογικό κλάδεμα)
Η λειτουργία LLMLingua-2 εκτελεί σημασιολογικό κλάδεμα token σε πεζό λόγο, χρησιμοποιώντας έναν μικρό ταξινομητή token ONNX, συμπληρώνοντας τις μηχανές Caveman και RTK που βασίζονται σε κανόνες:
- συμπιέζει πεζό λόγο μόνο σε μηνύματα που δεν είναι συστήματος· τα περιφραγμένα μπλοκ κώδικα και άλλες διατηρούμενες δομές δεν τροποποιούνται ποτέ
- εκτελεί το backend
@atjsh/llmlingua-2(ONNX μέσω@huggingface/transformers) σε ένα νήμα worker, ώστε η εξαγωγή συμπερασμάτων του μοντέλου να μην αποκλείει ποτέ τον βρόχο συμβάντων του αιτήματος - είναι συνδυάσιμη (
stackPriority35): σε μια συνδυαστική διοχέτευση εκτελείται μετά τις δομικές μηχανές (CCR, session-dedup, headroom, Caveman), αλλά πριν από τοultra, καθώς το σημασιολογικό κλάδεμα είναι πιο αποτελεσματικό σε κείμενο που έχει ήδη συμπιεστεί δομικά — π.χ.rtk -> caveman -> llmlingua - συνεχίζει χωρίς αποτυχία σε οποιοδήποτε σφάλμα (απουσία προαιρετικών εξαρτήσεων, εκκίνηση worker, φόρτωση μοντέλου, εξαγωγή συμπερασμάτων ή λήξη χρονικού ορίου) → επιστρέφεται το αρχικό κείμενο χωρίς αλλαγές, ποτέ σφάλμα
Τοποθεσία μηχανής: open-sse/services/compression/engines/llmlingua/. Η σχετική ενότητα στον πίνακα ελέγχου
είναι Dashboard -> Context & Cache -> LLMLingua.
Μοντέλα
Το προεπιλεγμένο μοντέλο είναι το TinyBERT (atjsh/llmlingua-2-js-tinybert-meetingbank, ~57 MB,
γρήγορο). Ένα μοντέλο BERT-base υψηλότερης ακρίβειας (Arcoldd/llmlingua4j-bert-base-onnx,
~710 MB) είναι διαθέσιμο μέσω του πεδίου model στη διαμόρφωση της μηχανής. Το @huggingface/transformers
πραγματοποιεί οκνηρή λήψη του επιλεγμένου μοντέλου από το HuggingFace Hub στο
${DATA_DIR}/models/llmlingua κατά την πρώτη κλήση (modelStore.ts)· μια παράκαμψη διαμόρφωσης modelPath
το κατευθύνει σε ένα τοπικό αντίγραφο (για εγκαταστάσεις εκτός σύνδεσης / απομονωμένες από το δίκτυο).
Προαιρετικές εξαρτήσεις και εγκατάσταση κατ’ απαίτηση
Η στοίβα peer του αφαιρούμενου runtime LLMLingua είναι προαιρετική. Δύο πακέτα δηλώνονται ως
optionalDependencies στο package.json και διατηρούνται εξωτερικά από το build παραγωγής
(το scripts/build/prepublish.ts δεν τα ενσωματώνει):
| Πακέτο | Έκδοση (καρφιτσωμένη) | Σημειώσεις |
|---|---|---|
@atjsh/llmlingua-2 |
2.0.5 |
Πακέτο εισόδου· δηλώνει τα υπόλοιπα ως peers |
js-tiktoken |
^1.0.20 |
Tokenizer |
Το @huggingface/transformers είναι καρφιτσωμένο στην έκδοση ^4.2.0 (κοινόχρηστο με την τοπική διαδρομή embeddings και
επίσης ανιχνευόμενο μέσα στο αυτόνομο bundle)· το @atjsh/llmlingua-2@2.0.5 το δηλώνει ως peer με
"^3.5.2 || ^4.0.0", επομένως υποστηρίζονται τόσο το Transformers.js v3 όσο και το v4. Από την έκδοση 2.0.4,
το @atjsh/llmlingua-2 δεν απαιτεί πλέον το @tensorflow/tfjs, γεγονός που αφαίρεσε τον μεγαλύτερο μεμονωμένο
παράγοντα επιβάρυνσης (TensorFlow.js) από τη στοίβα SLM. Μόνο τα δύο παραπάνω πακέτα είναι αφαιρούμενα SLM
peers. Μια τυπική εκτέλεση του npm install (dev) εγκαθιστά αυτόματα την προαιρετική στοίβα, εκτός αν παραλειφθούν οι προαιρετικές
εξαρτήσεις.
Γιατί κατ’ απαίτηση: το πακέτο που δημοσιεύεται στο npm, το αυτόνομο bundle και η εικόνα Docker
διανέμονται χωρίς αυτές τις εξαρτήσεις, ώστε να παραμένουν μικρά. Όταν απουσιάζουν, η πύλη εξαρτήσεων
του worker (ένας έλεγχος επίλυσης του @atjsh/llmlingua-2 στο worker.ts) αποτυγχάνει και η μηχανή
συνεχίζει αθόρυβα χωρίς αποτυχία — η επιλογή του LLMLingua δεν έχει καμία επίδραση (το κείμενο επιστρέφεται χωρίς αλλαγές και δεν
καταγράφεται κανένα σφάλμα). Για να το ενεργοποιήσετε σε ένα περιβάλλον με αφαιρεμένες εξαρτήσεις, εγκαταστήστε την προαιρετική στοίβα:
# καρφιτσώστε στις εκδόσεις που δηλώνονται στο package.json optionalDependencies
npm install @atjsh/llmlingua-2@2.0.5 js-tiktoken
Η αφαίρεση του @tensorflow/tfjs (2.0.4+) εξαλείφει τον προηγουμένως κυρίαρχο παράγοντα επιβάρυνσης των ~800 MB
— το εναπομείναν αποτύπωμα αποτελείται από τα runtimes transformers.js + onnxruntime-node,
καθώς και από το μοντέλο TinyBERT (~57 MB) που λαμβάνεται κατά την πρώτη χρήση (όχι μέσω npm).
Ανά περιβάλλον:
- Ανάπτυξη /
npm install— εγκαθίσταται αυτόματα, εκτός αν χρησιμοποιήσατε την επιλογή--omit=optional(ή--no-optional). Δεν απαιτείται καμία ενέργεια. - Καθολικό npm (
npm i -g omniroute) / αυτόνομη εγκατάσταση — εκτελέστε την παραπάνω εντολή εγκατάστασης μέσα στον κατάλογο του εγκατεστημένου πακέτου ή επανεγκαταστήστε χωρίς να παραλείψετε τις προαιρετικές εξαρτήσεις. - Docker — προσθέστε την εντολή εγκατάστασης σε ένα παράγωγο επίπεδο εικόνας· η δημοσιευμένη εικόνα παρέχεται σκόπιμα σε λιτή μορφή.
- VPS (PM2) — εγκαταστήστε στο
node_modulesτης εφαρμογής και, στη συνέχεια, επανεκκινήστε τη διεργασία ώστε ο worker να ελέγξει ξανά την πύλη. - Ακατέργαστο αυτόνομο Next (
npm run build→.build/next/standalone/server.js) — το αυτόνομο trace δεν περιλαμβάνει ΟΥΤΕ τον worker ΟΥΤΕ τις προαιρετικές εξαρτήσεις, επομένως η μηχανή μεταπίπτει σιωπηρά σε κατάσταση ανοικτής αποτυχίας. Τοscripts/build/colocate-standalone.mjsεφαρμόζει ξανά και τα δύο (worker esbuild + κλείσιμο προαιρετικών εξαρτήσεων στο αυτόνομο δέντρο)· εκτελείται αυτόματα μέσω του npm hookpostbuildμετά από κάθε build. Ιδιοδύναμο, με ήπια αποτυχία όταν απουσιάζουν εξαρτήσεις.
Επαληθεύστε ότι είναι ενεργό: με επιλεγμένο το LLMLingua, το πραγματικό πεζό κείμενο όντως συρρικνώνεται (η μηχανή
παύει να μεταπίπτει σε κατάσταση ανοικτής αποτυχίας) και το πρώτο αίτημα ενεργοποιεί τη λήψη του μοντέλου στο
${DATA_DIR}/models/llmlingua. Η πύλη ελέγχει σκόπιμα μόνο το @atjsh/llmlingua-2 —
τα υπόλοιπα peer dependencies είναι αποκλειστικά ESM και το require.resolve προκαλεί εξαίρεση για αυτά ακόμη και όταν υπάρχουν — επομένως
ο worker εξακολουθεί να μεταπίπτει σε κατάσταση ανοικτής αποτυχίας αν οποιοδήποτε peer dependency λείπει πράγματι κατά την εκτέλεση του import().
Διαδοχικές διοχετεύσεις
Η διαδοχική λειτουργία εκτελεί τα βήματα της διοχέτευσης με τη σειρά. Η προεπιλογή είναι:
rtk -> caveman
Χρησιμοποιήστε την για συνεδρίες πρακτόρων προγραμματισμού όπου μια προτροπή συνδυάζει έξοδο εντολών με κείμενο γραμμένο από άνθρωπο ή βοηθό. Το RTK μειώνει πρώτα τα περιττά αρχεία καταγραφής εργαλείων και, στη συνέχεια, το Caveman συμπιέζει την υπόλοιπη φυσική γλώσσα.
Τα βήματα της διοχέτευσης διαμορφώνονται μέσω του stackedPipeline στις ρυθμίσεις συμπίεσης ή μέσω συνδυασμών συμπίεσης.
Όταν και οι δύο μηχανές μειώνουν το ίδιο επιλέξιμο ωφέλιμο φορτίο, η εξοικονόμηση συνδυάζεται πολλαπλασιαστικά:
combined = 1 - (1 - RTK savings) * (1 - Caveman input savings)
average = 1 - (1 - 0.80) * (1 - 0.46) = 89.2%
range = 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6%
Φίλτρο δέντρου προσβασιμότητας MCP
Το έξυπνο φίλτρο δέντρου προσβασιμότητας MCP είναι ένα επίπεδο συμπίεσης μετά την εκτέλεση, το οποίο εφαρμόζεται στα αποτελέσματα εργαλείων MCP και όχι σε προτροπές ή συμφραζόμενα. Στοχεύει στα αναλυτικά ωφέλιμα φορτία δέντρων προσβασιμότητας και στιγμιοτύπων προγράμματος περιήγησης που επιστρέφονται από εργαλεία όπως τα Playwright, computer-use και διακομιστές MCP αυτοματοποίησης προγράμματος περιήγησης.
Τι κάνει
- Αφαίρεση θορύβου — αφαιρεί κενές γενικές καταχωρίσεις ή καταχωρίσεις κειμένου (
- generic:,- text: "") - Σύμπτυξη ομοειδών στοιχείων — όταν ≥
collapseThreshold(προεπιλογή 30) διαδοχικές γραμμές αποτελούν δομικές επαναλήψεις, τις συμπτύσσει στις πρώτεςcollapseKeepHead(προεπιλογή 10) γραμμές + μια σύνοψη πλήθους + τις τελευταίεςcollapseKeepTail(προεπιλογή 5) γραμμές - Διατήρηση παραπομπών — οι άγκυρες
[ref=eXX]που απαιτούνται από τα Playwright/computer-use δεν τροποποιούνται ποτέ - Αυστηρή περικοπή — εάν το κείμενο μετά τη σύμπτυξη εξακολουθεί να υπερβαίνει το
maxTextChars(προεπιλογή 50.000), περικόπτεται με μια υπόδειξη πλοήγησης, ώστε ο πράκτορας να μπορεί να συνεχίσει την εργασία
Θέση της μηχανής
open-sse/services/compression/engines/mcpAccessibility/
index.ts ← σημείο εισόδου smartFilterText()
collapseRepeated.ts ← αλγόριθμος σύμπτυξης ομοειδών στοιχείων
constants.ts ← DEFAULT_MCP_ACCESSIBILITY_CONFIG
Διαμόρφωση
Ελέγχεται από το compression.mcpAccessibility στις καθολικές ρυθμίσεις (μετεγκατάσταση 056). Προεπιλεγμένη διαμόρφωση:
{
"enabled": true,
"maxTextChars": 50000,
"collapseThreshold": 30,
"collapseKeepHead": 10,
"collapseKeepTail": 5,
"minLengthToProcess": 2000
}
Το φίλτρο εφαρμόζεται μόνο σε ωφέλιμα φορτία αποτελεσμάτων εργαλείων των οποίων το type είναι "text" και το μήκος τους υπερβαίνει το minLengthToProcess. Δεν επηρεάζει τη συμπίεση προτροπών ή τα ωφέλιμα φορτία αιτημάτων.
Αναμενόμενη εξοικονόμηση
60–80% στα αποτελέσματα εργαλείων στιγμιοτύπων προγράμματος περιήγησης, ανάλογα με την πολυπλοκότητα της σελίδας. Ο αλγόριθμος σύμπτυξης είναι O(n) ως προς το πλήθος των γραμμών και προσθέτει αμελητέα καθυστέρηση.
Σύγκριση αυτού του φίλτρου με τις παραπάνω μηχανές συμπίεσης
| Πτυχή | Caveman / RTK / Stacked | Φίλτρο προσβασιμότητας MCP |
|---|---|---|
| Στόχος | Προτροπές αιτημάτων / συμφραζόμενα | Αποτελέσματα εργαλείων MCP |
| Ενεργοποίηση | Ρύθμιση λειτουργίας συμπίεσης | compression.mcpAccessibility.enabled |
| Εμβέλεια | Όλα τα μηνύματα SSE | Μόνο αποτελέσματα εργαλείων |
| Άγκυρες παραπομπών | Δ/Ε | Διατηρούνται άνευ όρων |
Συνδυασμοί συμπίεσης
Οι συνδυασμοί συμπίεσης είναι επώνυμα προφίλ συμπίεσης που μπορούν να αντιστοιχιστούν σε συνδυασμούς δρομολόγησης:
compression_combos: αποθηκεύει τη λειτουργία, τη διοχέτευση, τη ρύθμιση παραμέτρων RTK, τη ρύθμιση παραμέτρων γλώσσας και τον δείκτη προεπιλογήςcompression_combo_assignments: αντιστοιχίζει έναν συνδυασμό συμπίεσης σε έναν συνδυασμό δρομολόγησης- η ενσωμάτωση κατά την εκτέλεση επιλύει έναν αντιστοιχισμένο συνδυασμό συμπίεσης πριν από τις γενικές παρακάμψεις συνδυασμών
- τα αναλυτικά στοιχεία περιλαμβάνουν τα
compression_combo_idκαιengine
Θέση στον πίνακα ελέγχου: Dashboard -> Context & Cache -> Compression Combos.
Επιφάνεια API
| Διαδρομή | Σκοπός |
|---|---|
/api/settings/compression |
Καθολικές ρυθμίσεις συμπίεσης (περιλαμβάνει τη ρύθμιση mcpAccessibility) |
/api/compression/preview |
Προεπισκόπηση οποιασδήποτε λειτουργίας συμπίεσης |
/api/compression/language-packs |
Λίστα διαθέσιμων πακέτων γλώσσας Caveman |
/api/context/caveman/config |
Ψευδώνυμο ρυθμίσεων Caveman |
/api/context/rtk/config |
Προεπιλογές και ρυθμίσεις RTK |
/api/context/rtk/filters |
Κατάλογος φίλτρων RTK |
/api/context/rtk/test |
Τελικό σημείο προεπισκόπησης/δοκιμής RTK |
/api/context/rtk/raw-output/[id] |
Ανάκτηση αποχαρακτηρισμένης ανεπεξέργαστης εξόδου με έλεγχο ταυτότητας |
/api/context/combos |
CRUD συνδυασμών συμπίεσης |
/api/context/combos/[id]/assignments |
CRUD αντιστοιχίσεων συνδυασμών δρομολόγησης |
/api/context/analytics |
Ψευδώνυμο αναλυτικών στοιχείων συμπίεσης |
Οι διαδρομές διαχείρισης απαιτούν έλεγχο ταυτότητας διαχείρισης ή ελέγχους πολιτικής κλειδιού API.
Εργαλεία MCP
Η συμπίεση παρέχει πέντε εργαλεία MCP:
| Εργαλείο | Πεδίο | Σκοπός |
|---|---|---|
omniroute_compression_status |
read:compression |
Ρυθμίσεις, αναλυτικά στοιχεία, στατιστικά cache |
omniroute_compression_configure |
write:compression |
Ενημέρωση καθολικών ρυθμίσεων |
omniroute_set_compression_engine |
write:compression |
Ορισμός λειτουργίας και προαιρετικής διοχέτευσης |
omniroute_list_compression_combos |
read:compression |
Λίστα συνδυασμών συμπίεσης |
omniroute_compression_combo_stats |
read:compression |
Ανάγνωση αναλυτικών στοιχείων συνδυασμού/μηχανής |
Πεδίο εφαρμογής και εξαιρέσεις
Τα embeddings δεν συμπιέζονται ποτέ. Το open-sse/handlers/embeddings.ts δεν καλεί ποτέ καμία
μηχανή συμπίεσης — τα σώματα αιτήματος/απόκρισης μεταβιβάζονται απευθείας στον εκτελεστή χωρίς τροποποίηση.
Αυτό είναι δομικό επί του παρόντος (τα embeddings και οι ολοκληρώσεις συνομιλίας έχουν ξεχωριστούς χειριστές), όχι
έλεγχος κατά την εκτέλεση, αλλά σημαίνει ότι η ανησυχία περί παραμόρφωσης διανυσμάτων στο #8034 δεν έχει επιφάνεια έκθεσης
στη διαδρομή των embeddings.
Φίλτρο εξαίρεσης ανά μοντέλο/τελικό σημείο (#8034). Για τις ολοκληρώσεις συνομιλίας, ένας διαχειριστής μπορεί να ορίσει
αναγνωριστικά μοντέλων / προορισμούς provider/model που δεν πρέπει ποτέ να συμπιέζονται — ένα προστατευτικό μέτρο χρήσιμο εάν
η συμπίεση συνδεθεί ποτέ πιο κοντά σε μια διαδρομή σχετιζόμενη με embeddings αργότερα, και γενικά χρήσιμο
για οποιοδήποτε μοντέλο όπου έχει σημασία η ακριβής, byte προς byte, προτροπή (ντετερμινιστικές αξιολογήσεις, προθέματα
ευαίσθητα στην cache κ.λπ.).
- Πεδίο ρυθμίσεων:
exclusions?: string[]στην καθολική ρύθμιση παραμέτρων συμπίεσης (GET/PUT /api/settings/compression), που διατηρείται μέσω του υπάρχοντος χώρου ονομάτων συμπίεσηςkey_value(src/lib/db/compression.ts) — χωρίς νέο πίνακα. - Καρτέλα πίνακα ελέγχου: Dashboard → Compression → Exclusions
(
/dashboard/compression/exclusions). - Σύνταξη μοτίβων: το
*είναι ο μόνος χαρακτήρας μπαλαντέρ. Κάθε άλλος μεταχαρακτήρας κανονικής έκφρασης σε ένα μοτίβο διαφεύγει πριν από την αντιστοίχιση, επομένως τοgpt-5.6αντιστοιχεί μόνο στην κυριολεκτική συμβολοσειρά και ποτέ στοgpt-5x6(ασφαλές έναντι ReDoS, οριοθετημένο, χωρίς ένθετους ποσοδείκτες). Τα μοτίβα αντιστοιχίζονται χωρίς διάκριση πεζών-κεφαλαίων τόσο με το μεμονωμένο αναγνωριστικό μοντέλου όσο και με τη σύνθεσηprovider/model— ταgpt-5-6,openai/gpt-5-6καιopenai/*λειτουργούν όλα, ενώ το*από μόνο του εξαιρεί κάθε μοντέλο. - Αντιστοίχιση:
isCompressionExcluded()/normalizeCompressionExclusions()στοopen-sse/services/compression/exclusions.ts. ΤοchatCore.tsελέγχει τον εξαιρούμενο προορισμό αμέσως μετά την επίλυση των ρυθμίσεων συμπίεσης, πριν εκτελεστεί οποιαδήποτε μηχανή, και αντιμετωπίζει μια αντιστοίχιση ακριβώς όπως την καθολική απενεργοποίηση της συμπίεσης — το σώμα του αιτήματος είναι αποδεδειγμένα πανομοιότυπο σε επίπεδο byte. Η παράλειψη καταγράφεται μέσω τουwriteCompressionSkip(..., "excluded")για ορατότητα στα αναλυτικά στοιχεία. - Προεπιλογή (κενή/απούσα λίστα): πανομοιότυπη με τη συμπεριφορά πριν από το #8034 — τίποτα δεν εξαιρείται.
Γνωστοί περιορισμοί
- Το LLMLingua-2 (SLM) απαιτεί τα προαιρετικά deps να βρίσκονται στην ίδια τοποθεσία. Ο worker εκτελείται σε
production build μόνο όταν το
@atjsh/llmlingua-2και τα peers του έχουν τοποθετηθεί μαζί στοdist/node_modules(βλ.scripts/build/colocateOptionals.mjs, #4286). Χωρίς αυτά, το engine εφαρμόζει fail-open (επιστρέφει το αρχικό κείμενο). Η επίλυση του worker δεν εξαρτάται πλέον από τοimport.meta.url(αποτυγχάνει στο standalone bundle) — βασίζεται στο runtime cwd /argv[1]. - Τα πακέτα γλωσσών Caveman
de/fr/jaείναι μερικά. Περιλαμβάνουν κανόνεςcontext+filler+structural, αλλά όχι πακέταdedup/ultra, επομένως η έντασηultraδεν είναι ισχυρότερη από τηνfullγια αυτές τις γλώσσες (χρησιμοποιούν μόνο τους δικούς τους κανόνες — δεν υπάρχει σιωπηλό fall-back στους αγγλικούς κανόνεςdedup/ultra, οι οποίοι θα αλλοίωναν το ξενόγλωσσο κείμενο). Ταen/es/id/pt-BRείναι πλήρη. Οι συνεισφορές αρχείωνdedup.json+ultra.jsonγια τα μερικά πακέτα είναι ευπρόσδεκτες. - Η διαδοχική τηλεμετρία παραθέτει μόνο τα engines που πραγματοποίησαν συμπίεση. Ένα βήμα διαδοχικού pipeline, του οποίου
το engine εκτελέστηκε αλλά παρήγαγε εξοικονόμηση 0 %, επιστρέφει
stats:nullκαι επομένως δεν εμφανίζεται στοengineBreakdown— δεν διακρίνεται από ένα βήμα που παραλείφθηκε. Η διάκριση μεταξύ «εκτελέστηκε, 0 %» και «παραλείφθηκε» θα απαιτούσε αλλαγή στο μοντέλο ανάλυσης και έχει αναβληθεί.
Επικύρωση
Οι στοχευμένοι έλεγχοι για αυτήν την περιοχή είναι:
node --import tsx/esm --test tests/unit/compression/rtk-*.test.ts tests/unit/compression/pipeline-integration.test.ts tests/unit/compression/context-compression-api.test.ts
node --import tsx/esm --test tests/unit/compression/*.test.ts tests/golden-set/*.test.ts tests/integration/compression-pipeline.test.ts tests/unit/api/compression/compression-api.test.ts
node --import tsx/esm --test tests/unit/compression/mcpAccessibility*.test.ts
npm run typecheck:core