# 🗜️ Prompt Compression Guide — OmniRoute (Ελληνικά) 🌐 **Languages:** 🇺🇸 [English](../../../../compression/COMPRESSION_GUIDE.md) · 🇪🇹 [am](../../../am/docs/compression/COMPRESSION_GUIDE.md) · 🇸🇦 [ar](../../../ar/docs/compression/COMPRESSION_GUIDE.md) · 🇦🇿 [az](../../../az/docs/compression/COMPRESSION_GUIDE.md) · 🇧🇬 [bg](../../../bg/docs/compression/COMPRESSION_GUIDE.md) · 🇧🇩 [bn](../../../bn/docs/compression/COMPRESSION_GUIDE.md) · 🇧🇦 [bs](../../../bs/docs/compression/COMPRESSION_GUIDE.md) · 🇨🇿 [cs](../../../cs/docs/compression/COMPRESSION_GUIDE.md) · 🇩🇰 [da](../../../da/docs/compression/COMPRESSION_GUIDE.md) · 🇩🇪 [de](../../../de/docs/compression/COMPRESSION_GUIDE.md) · 🇪🇸 [es](../../../es/docs/compression/COMPRESSION_GUIDE.md) · 🇪🇪 [et](../../../et/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇷 [fa](../../../fa/docs/compression/COMPRESSION_GUIDE.md) · 🇫🇮 [fi](../../../fi/docs/compression/COMPRESSION_GUIDE.md) · 🇫🇷 [fr](../../../fr/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇪 [ga](../../../ga/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇳 [gu](../../../gu/docs/compression/COMPRESSION_GUIDE.md) · 🇳🇬 [ha](../../../ha/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇱 [he](../../../he/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇳 [hi](../../../hi/docs/compression/COMPRESSION_GUIDE.md) · 🇭🇷 [hr](../../../hr/docs/compression/COMPRESSION_GUIDE.md) · 🇭🇺 [hu](../../../hu/docs/compression/COMPRESSION_GUIDE.md) · 🇦🇲 [hy](../../../hy/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇩 [id](../../../id/docs/compression/COMPRESSION_GUIDE.md) · 🇳🇬 [ig](../../../ig/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇹 [it](../../../it/docs/compression/COMPRESSION_GUIDE.md) · 🇯🇵 [ja](../../../ja/docs/compression/COMPRESSION_GUIDE.md) · 🇬🇪 [ka](../../../ka/docs/compression/COMPRESSION_GUIDE.md) · 🇰🇭 [km](../../../km/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇳 [kn](../../../kn/docs/compression/COMPRESSION_GUIDE.md) · 🇰🇷 [ko](../../../ko/docs/compression/COMPRESSION_GUIDE.md) · 🇱🇹 [lt](../../../lt/docs/compression/COMPRESSION_GUIDE.md) · 🇱🇻 [lv](../../../lv/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇳 [ml](../../../ml/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇳 [mr](../../../mr/docs/compression/COMPRESSION_GUIDE.md) · 🇲🇾 [ms](../../../ms/docs/compression/COMPRESSION_GUIDE.md) · 🇲🇹 [mt](../../../mt/docs/compression/COMPRESSION_GUIDE.md) · 🇲🇲 [my](../../../my/docs/compression/COMPRESSION_GUIDE.md) · 🇳🇵 [ne](../../../ne/docs/compression/COMPRESSION_GUIDE.md) · 🇳🇱 [nl](../../../nl/docs/compression/COMPRESSION_GUIDE.md) · 🇳🇴 [no](../../../no/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇳 [or](../../../or/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇳 [pa](../../../pa/docs/compression/COMPRESSION_GUIDE.md) · 🇵🇭 [phi](../../../phi/docs/compression/COMPRESSION_GUIDE.md) · 🇵🇱 [pl](../../../pl/docs/compression/COMPRESSION_GUIDE.md) · 🇵🇹 [pt](../../../pt/docs/compression/COMPRESSION_GUIDE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/compression/COMPRESSION_GUIDE.md) · 🇷🇴 [ro](../../../ro/docs/compression/COMPRESSION_GUIDE.md) · 🇷🇺 [ru](../../../ru/docs/compression/COMPRESSION_GUIDE.md) · 🇱🇰 [si](../../../si/docs/compression/COMPRESSION_GUIDE.md) · 🇸🇰 [sk](../../../sk/docs/compression/COMPRESSION_GUIDE.md) · 🇸🇮 [sl](../../../sl/docs/compression/COMPRESSION_GUIDE.md) · 🇷🇸 [sr](../../../sr/docs/compression/COMPRESSION_GUIDE.md) · 🇸🇪 [sv](../../../sv/docs/compression/COMPRESSION_GUIDE.md) · 🇰🇪 [sw](../../../sw/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇳 [ta](../../../ta/docs/compression/COMPRESSION_GUIDE.md) · 🇮🇳 [te](../../../te/docs/compression/COMPRESSION_GUIDE.md) · 🇹🇭 [th](../../../th/docs/compression/COMPRESSION_GUIDE.md) · 🇹🇷 [tr](../../../tr/docs/compression/COMPRESSION_GUIDE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/compression/COMPRESSION_GUIDE.md) · 🇵🇰 [ur](../../../ur/docs/compression/COMPRESSION_GUIDE.md) · 🇺🇿 [uz](../../../uz/docs/compression/COMPRESSION_GUIDE.md) · 🇻🇳 [vi](../../../vi/docs/compression/COMPRESSION_GUIDE.md) · 🇳🇬 [yo](../../../yo/docs/compression/COMPRESSION_GUIDE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/compression/COMPRESSION_GUIDE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/compression/COMPRESSION_GUIDE.md) --- > Εξοικονομήστε αυτόματα 15-95% στο επιλέξιμο περιεχόμενο. Για μια γρήγορη επισκόπηση, δείτε την [ενότητα συμπίεσης του README](../README.md#%EF%B8%8F-prompt-compression--save-15-95-eligible-tokens-automatically). ## Επισκόπηση Το OmniRoute υλοποιεί μια αρθρωτή διοχέτευση συμπίεσης προτροπών, η οποία εκτελείται **προληπτικά** πριν τα αιτήματα φτάσουν στους ανάντη παρόχους. Αυτό σημαίνει ότι η εξοικονόμηση διακριτικών γίνεται με διαφανή τρόπο — δεν απαιτούνται αλλαγές στη ροή εργασίας σας. ``` Αίτημα πελάτη → Επιλογέας στρατηγικής συμπίεσης → Παράκαμψη συνδυασμού; → Χρήση ρύθμισης συνδυασμού → Όριο αυτόματης ενεργοποίησης; → Χρήση αυτόματης λειτουργίας → Προεπιλεγμένη λειτουργία; → Χρήση καθολικής ρύθμισης → Ανενεργή; → Παράλειψη συμπίεσης → Επιλεγμένη λειτουργία συμπίεσης → Ανενεργή: Χωρίς συμπίεση → Ελαφριά: Ασφαλής εκκαθάριση κενών διαστημάτων/μορφοποίησης (~15%) → Τυπική: Αφαίρεση περιττών λέξεων με τηλεγραφικό ύφος (~30%) → Επιθετική: Παλαίωση ιστορικού + σύνοψη (~50%) → Υπέρτατη: Ευρετική περικοπή + αραίωση μπλοκ κώδικα (~75%) → RTK: Φιλτράρισμα τερματικού/εξόδου εργαλείων με επίγνωση εντολών (ανάντη εύρος 60-90%) → Στοιβαγμένη: Διατεταγμένη διοχέτευση πολλαπλών μηχανών, συνήθως RTK και έπειτα Caveman (εύρος 78-95% για επιλέξιμο περιεχόμενο) → Συμπιεσμένο αίτημα → Πάροχος ``` --- ## Λειτουργίες συμπίεσης ### Ανενεργή Δεν εφαρμόζεται συμπίεση. Όλα τα μηνύματα διέρχονται χωρίς αλλαγές. ### Ελαφριά λειτουργία (~15% εξοικονόμηση, καθυστέρηση <1ms) Η ασφαλέστερη λειτουργία — μηδενική σημασιολογική αλλαγή, μόνο εκκαθάριση μορφοποίησης: | Τεχνική | Περιγραφή | | ------------------------ | --------------------------------------------------------------- | | `collapseWhitespace` | Συγχώνευση διαδοχικών κενών γραμμών και κενών στο τέλος γραμμής | | `dedupSystemPrompt` | Αφαίρεση διπλότυπων μηνυμάτων συστήματος | | `compressToolResults` | Συμπίεση αναλυτικών εξόδων εργαλείων/συναρτήσεων | | `removeRedundantContent` | Αφαίρεση επαναλαμβανόμενων οδηγιών | | `replaceImageUrls` | Συντόμευση URI δεδομένων εικόνων base64 | **Ιδανική για:** Μόνιμη χρήση, ροές εργασίας κρίσιμες για την ασφάλεια. ### Τυπική λειτουργία (~30% εξοικονόμηση) Εμπνευσμένη από το [Caveman](https://github.com/JuliusBrussee/caveman) — αφαιρεί περιττές λέξεις και φλύαρες διατυπώσεις, διατηρώντας παράλληλα το νόημα: - Αφαιρεί περιττές λέξεις ("παρακαλώ", "νομίζω", "βασικά", "στην πραγματικότητα") - Συμπτύσσει φλύαρες φράσεις ("με σκοπό να" → "για να", "ως αποτέλεσμα του" → "επειδή") - Αφαιρεί ευγενικές επιφυλάξεις ("Θα σας πείραζε...", "Αν θα μπορούσατε ενδεχομένως...") - 30+ κανόνες regex ρυθμισμένοι για προτροπές προγραμματισμού **Ιδανική για:** Καθημερινές ροές εργασίας προγραμματισμού, ομάδες που δίνουν έμφαση στο κόστος. ### Επιθετική λειτουργία (~50% εξοικονόμηση) Έξυπνη διαχείριση ιστορικού για μακροχρόνιες συνεδρίες: - **Παλαίωση μηνυμάτων** — τα παλαιότερα μηνύματα συμπιέζονται προοδευτικά - **Σύνοψη αποτελεσμάτων εργαλείων** — οι εκτενείς έξοδοι εργαλείων αντικαθίστανται με συνόψεις - **Δικλίδες δομικής ακεραιότητας** — διασφαλίζουν ότι τα ζεύγη `tool_use` + `tool_result` παραμένουν συνεπή - **Επίγνωση παραθύρου περιεχομένου** — τηρεί τα όρια διακριτικών ανά μοντέλο **Ιδανική για:** Εκτεταμένες συνεδρίες αποσφαλμάτωσης, μεγάλες βάσεις κώδικα. ### Υπέρτατη λειτουργία (~75% εξοικονόμηση) Μέγιστη συμπίεση για σενάρια όπου τα διακριτικά είναι κρίσιμα: - **Ευρετική περικοπή** — αφαιρεί μηνύματα κάτω από το όριο συνάφειας - **Αραίωση μπλοκ κώδικα** — συμπιέζει επαναλαμβανόμενα παραδείγματα κώδικα - **Περικοπή με δυαδική αναζήτηση** — βρίσκει το βέλτιστο σημείο αποκοπής για το παράθυρο περιεχομένου - Περιλαμβάνονται όλες οι δυνατότητες της Επιθετικής λειτουργίας **Ιδανική για:** Περιπτώσεις όπου φτάνετε επανειλημμένα στα όρια περιεχομένου. ### Λειτουργία RTK (ανάντη εύρος 60-90%) Η λειτουργία RTK είναι βελτιστοποιημένη για εκτενείς εξόδους εργαλείων που εμφανίζονται σε συνεδρίες πρακτόρων προγραμματισμού: - Ανιχνεύει κλάσεις εντολών/εξόδων, όπως `git status`, `git diff`, `git log`, προγράμματα εκτέλεσης δοκιμών, δομές TypeScript/Vite/Webpack, ESLint/Biome/Prettier, ελέγχους/εγκαταστάσεις npm, αρχεία καταγραφής Docker, έξοδο υποδομής και γενική έξοδο κελύφους - Εφαρμόζει πακέτα φίλτρων JSON από το `open-sse/services/compression/engines/rtk/filters/` - Εισάγει φίλτρα σχήματος RTK TOML v1 από αρχεία `filters.toml` έργου ή καθολικά αρχεία, με επικύρωση ενσωματωμένων δοκιμών και πύλη εμπιστοσύνης για αρχεία έργου - Παρέχει 49 ενσωματωμένα φίλτρα με ενσωματωμένα δείγματα επαλήθευσης - Αφαιρεί ακολουθίες ελέγχου ANSI, γραμμές προόδου, επαναλαμβανόμενες γραμμές και μη αξιοποιήσιμο θόρυβο - Διατηρεί αποτυχίες, σφάλματα, προειδοποιήσεις, τροποποιημένα αρχεία, συνόψεις και το τέλος εκτενών εξόδων - Υποστηρίζει φίλτρα έργου με πύλη εμπιστοσύνης, καθολικά φίλτρα και προαιρετική ανάκτηση ανεπεξέργαστης εξόδου με απόκρυψη ευαίσθητων δεδομένων **Ιδανική για:** Συνεδρίες πρακτόρων με κελύφη, δομές, δοκιμές, git, grep και μεταγραφές εξόδων αρχείων. ### Στοιβαγμένη λειτουργία (εύρος 78-95% για επιλέξιμο περιεχόμενο) Η Στοιβαγμένη λειτουργία εκτελεί πολλαπλές μηχανές συμπίεσης με ντετερμινιστική σειρά. Η προεπιλεγμένη διοχέτευση είναι: ```txt RTK -> Caveman ``` Αυτή η σειρά συμπτύσσει πρώτα την έξοδο τερματικού/εργαλείων και, στη συνέχεια, εφαρμόζει τη σημασιολογική σύμπτυξη του Caveman στην υπόλοιπη προτροπή φυσικής γλώσσας. Οι στοιβαγμένες διοχετεύσεις μπορούν να διαμορφωθούν καθολικά ή μέσω συνδυασμών συμπίεσης που έχουν αντιστοιχιστεί σε συνδυασμούς δρομολόγησης. **Ιδανική για:** Μικτό περιεχόμενο με μεγάλα αρχεία καταγραφής εργαλείων, μαζί με ανθρώπινες οδηγίες ή συνόψεις βοηθού. --- ## Μαθηματικός υπολογισμός εξοικονόμησης ανάντη Το OmniRoute τεκμηριώνει την εξοικονόμηση μέσω συμπίεσης από δύο πηγές: τα benchmarks των ανάντη έργων και τη σύνθεση των μηχανών του ίδιου του OmniRoute. | Πηγή | Αριθμός από το ανάντη README που χρησιμοποιείται εδώ | | ------- | -------------------------------------------------------------------------------------------------------------------------------------- | | Caveman | `~75%` λιγότερα διακριτικά εξόδου, `65%` μέση εξοικονόμηση εξόδου στα benchmarks, εύρος `22-87%` και εργαλείο συμπίεσης εισόδου `~46%` | | RTK | Εξοικονόμηση `60-90%` στην έξοδο εντολών· ενδεικτική συνεδρία `~118,000 -> ~23,900` διακριτικά ή εξοικονόμηση `79.7%` (`~80%`) | Για επικαλυπτόμενα ωφέλιμα φορτία εργαλείων/περιβάλλοντος, ο προεπιλεγμένος συνδυασμός του OmniRoute στοιβάζει τις μηχανές: ```txt RTK -> Caveman ``` Η συνδυασμένη εξοικονόμηση είναι πολλαπλασιαστική, όχι αθροιστική: ```txt 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% ``` Αυτό το ποσοστό `78-95%` ισχύει όταν τόσο το RTK όσο και το Caveman μπορούν να μειώσουν το ίδιο ωφέλιμο φορτίο εισόδου/περιβάλλοντος. Η λειτουργία εξόδου αποκρίσεων του Caveman είναι ξεχωριστή: όταν είναι ενεργοποιημένη, χρησιμοποιήστε την εξοικονόμηση εξόδου του ίδιου του Caveman (`65%` κατά μέσο όρο, `~75%` ως κύρια αναφορά, εύρος `22-87%`). Η συνολική εξοικονόμηση χρέωσης εξαρτάται από την αναλογία προτροπών/εξόδου. ### Τι σημαίνει πραγματικά «κατάλληλο» Το αναφερόμενο εύρος 15-95% είναι πραγματικό, αλλά ισχύει μόνο για **πλεονάζον ή φλύαρο** περιεχόμενο — επαναλαμβανόμενες γραμμές σφαλμάτων, ένα αρχείο καταγραφής μεταγλώττισης που κατακλύζει την έξοδο με την ίδια προειδοποίηση, μια υπερμεγέθης έξοδο `grep`/ανάγνωσης αρχείου. Αυτό **δεν** σημαίνει ότι κάθε αίτημα εξοικονομεί τόσο πολύ. Επαληθεύτηκε εμπειρικά (`tests/unit/compression/stacked-compression-tool-result-savings.test.ts`): μια εκτέλεση `stacked` (RTK + Caveman) σε ένα μπλοκ `tool_result` μορφής Anthropic, το οποίο περιείχε 300 πανομοιότυπες γραμμές σφαλμάτων, παρήγαγε **95.93% εξοικονόμηση διακριτικών / 96.26% εξοικονόμηση χαρακτήρων** — ακριβώς εντός του διαφημιζόμενου εύρους. Ωστόσο, η ίδια διοχέτευση, όταν εκτελείται σε κανονική, μη πλεονάζουσα έξοδο εργαλείων (μια καθαρή λίστα αντιστοιχιών `grep`, μια σύντομη ανάγνωση αρχείου, συνηθισμένο κείμενο συνομιλίας), παράγει σωστά **σχεδόν μηδενική εξοικονόμηση**, επειδή δεν υπάρχει τίποτα επαναλαμβανόμενο προς αφαίρεση και η `validateCompression()` (`validation.ts`) αρνείται να αποστείλει μια αναδιατύπωση που θα αφαιρούσε ή θα τροποποιούσε μπλοκ κώδικα, URLs, επικεφαλίδες, εκδόσεις ή αναγνωριστικά σταθερών γραμμένα ΕΞ ΟΛΟΚΛΗΡΟΥ ΜΕ ΚΕΦΑΛΑΙΑ. Αυτή είναι αναμενόμενη και ασφαλής συμπεριφορά, όχι σφάλμα: μια συνεδρία προγραμματισμού που κυρίως διαβάζει/αναζητά με `grep` καθαρά αρχεία θα παρουσιάζει περιορισμένη συνολική εξοικονόμηση, ακόμη και με πλήρως ενεργοποιημένη τη συμπίεση, ενώ μια συνεδρία που συναντά έναν αποτυχημένο βρόχο ή ένα φλύαρο linter θα παρουσιάζει το πλήρες εύρος 78-95% σε αυτή την κίνηση. Μη χρησιμοποιείτε το χαμηλό συνολικό ποσοστό εξοικονόμησης μίας μόνο συνεδρίας ως απόδειξη ότι η συμπίεση δεν έχει ρυθμιστεί σωστά — ελέγξτε πρώτα αν η υποκείμενη έξοδος του εργαλείου ήταν πράγματι πλεονάζουσα. --- ## Απεικόνιση εξοικονόμησης διακριτικών ``` Χωρίς συμπίεση: 47K διακριτικά αποστέλλονται στο LLM Με Lite: 40K διακριτικά αποστέλλονται (15% εξοικονόμηση — ασφαλές, πάντα ενεργό) Με Standard: 33K διακριτικά αποστέλλονται (30% εξοικονόμηση — κανόνες ομιλίας caveman) Με Aggressive: 24K διακριτικά αποστέλλονται (50% εξοικονόμηση — παλαίωση + σύνοψη) Με Ultra: 12K διακριτικά αποστέλλονται (75% εξοικονόμηση — ευρετική περικοπή) Με RTK: 19K-5K διακριτικά αποστέλλονται (60-90% εξοικονόμηση στην έξοδο εντολών/εργαλείων) Με Stacked: 10K-2.5K διακριτικά αποστέλλονται (εύρος 78-95% για κατάλληλο περιεχόμενο RTK+Caveman) ``` --- ## Διαμόρφωση ### Πίνακας ελέγχου Μεταβείτε στο `Πίνακας ελέγχου → Περιβάλλον & προσωρινή μνήμη`: - **Caveman** — επιλογή λειτουργίας, πακέτα γλωσσών, προεπισκόπηση και καθολικές προεπιλογές - **RTK** — προεπισκόπηση φίλτρων εντολών, ρυθμίσεις ασφαλείας RTK και κατάλογος φίλτρων - **Συνδυασμοί συμπίεσης** — επώνυμες διοχετεύσεις μηχανών που αντιστοιχίζονται σε συνδυασμούς δρομολόγησης - **Όριο αυτόματης ενεργοποίησης** — αυτόματη ενεργοποίηση της συμπίεσης όταν ο αριθμός token υπερβαίνει το όριο ### Παράκαμψη ανά συνδυασμό Στο `Πίνακας ελέγχου → Περιβάλλον & προσωρινή μνήμη → Συνδυασμοί συμπίεσης`, αντιστοιχίστε έναν συνδυασμό συμπίεσης σε έναν συνδυασμό δρομολόγησης: ```txt Συνδυασμός: "free-tier-fallback" Συνδυασμός συμπίεσης: "coding-agent-stack" Διοχέτευση: RTK -> Caveman Προορισμοί: 1. if/kimi-k2.7-code 2. if/qwen3.8-max-preview ``` Αυτό σας επιτρέπει να χρησιμοποιείτε διαδοχική συμπίεση σε δωρεάν παρόχους ή παρόχους προγραμματισμού, διατηρώντας παράλληλα την ελαφριά λειτουργία στις συνδρομές επί πληρωμή. Αυτή η αντιστοίχιση «Παράκαμψη ανά συνδυασμό» αποτελεί διαφορετικό στοιχείο ελέγχου από την παράκαμψη της **λειτουργίας συμπίεσης συνδυασμού δρομολόγησης** (Προεπιλογή/Απενεργοποίηση/Ελαφριά/Τυπική/Επιθετική/Ultra) — αυτή η παράκαμψη δεν επιλέγει μια επώνυμη διοχέτευση συνδυασμού συμπίεσης· απλώς ορίζει το πεδίο `compressionMode` που λαμβάνεται υπόψη από τη `resolveCompressionPlan`. Μπορεί να οριστεί είτε στην κάρτα συνδυασμού (`Πίνακας ελέγχου → Συνδυασμοί`) είτε, από την #6760 και μετά, ανά συνδυασμό δρομολόγησης στη λίστα «Αντιστοίχιση σε δρομολόγηση» στη διαδρομή `Πίνακας ελέγχου → Περιβάλλον & προσωρινή μνήμη → Συνδυασμοί συμπίεσης`, ακριβώς δίπλα στο πλαίσιο ελέγχου αντιστοίχισης διοχέτευσης που τεκμηριώνεται παραπάνω. Και οι δύο διεπαφές αποθηκεύουν τις αλλαγές μέσω του ίδιου τελικού σημείου `PUT /api/combos/{id}`. ### Παράκαμψη ανά αίτημα Στείλτε την κεφαλίδα αιτήματος `x-omniroute-compression` για να παρακάμψετε το πλάνο συμπίεσης για ένα μεμονωμένο αίτημα. Έχει την υψηλότερη προτεραιότητα — υπερισχύει της παράκαμψης συνδυασμού δρομολόγησης, του ενεργού προφίλ, της αυτόματης ενεργοποίησης και της Προεπιλογής του πίνακα. Οι άγνωστες τιμές αγνοούνται (το αίτημα δεν απορρίπτεται ποτέ) και ο καθολικός κύριος διακόπτης εξακολουθεί να ελέγχει τα πάντα: όταν η συμπίεση είναι καθολικά απενεργοποιημένη, η κεφαλίδα δεν μπορεί να την ενεργοποιήσει. Τιμές: | Τιμή | Αποτέλεσμα | | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | `off` | Καμία συμπίεση για αυτό το αίτημα. | | `default` | Το Προεπιλεγμένο προφίλ που προκύπτει από τον πίνακα (αγνοεί το ενεργό προφίλ). Οι απωλεστικές μηχανές παραμένουν απενεργοποιημένες. | | `safe` | Ίδιο με την παράλειψη της κεφαλίδας: μόνο αποδιπλοποίηση και σύμπτυξη κενών διαστημάτων. | | `allow-lossy` | Διατηρεί το πλάνο του χειριστή για αυτό το αίτημα, συμπεριλαμβανομένων των περιλήψεων, των φίλτρων συνάφειας και των αναδιατυπώσεων ύφους. | | `engine:` | Μία μηχανή, όταν είναι ενεργοποιημένη, π.χ. `engine:rtk`. Αυτή είναι η ρητή ενεργοποίηση της συγκεκριμένης μηχανής ανά αίτημα. | | `` | Ένας επώνυμος συνδυασμός, με αντιστοίχιση πρώτα βάσει ονόματος (χωρίς διάκριση πεζών-κεφαλαίων) και έπειτα βάσει id. | Χωρίς `allow-lossy`, `engine:` ή έναν επώνυμο συνδυασμό, οι απωλεστικές μηχανές δεν εφαρμόζονται. Το αίτημα εξακολουθεί να λαμβάνει αποδιπλοποίηση συνεδρίας και σύμπτυξη κενών διαστημάτων όταν η συμπίεση είναι ενεργοποιημένη. Το εφαρμοσμένο πλάνο επιστρέφεται στην κεφαλίδα απόκρισης `X-OmniRoute-Compression: ; source=`, όπου το `` είναι ένα από τα `request-header`, `routing-override`, `active-profile`, `auto-trigger`, `default` ή `off`. ### API ```bash # Λήψη των ρυθμίσεων συμπίεσης curl http://localhost:20128/api/settings/compression # Ενημέρωση των ρυθμίσεων συμπίεσης curl -X PUT http://localhost:20128/api/settings/compression \ -H "Content-Type: application/json" \ -d '{"defaultMode":"stacked","autoTriggerMode":"stacked","autoTriggerTokens":32000}' # Προεπισκόπηση ενός συγκεκριμένου ωφέλιμου φορτίου RTK/stacked curl -X POST http://localhost:20128/api/compression/preview \ -H "Content-Type: application/json" \ -d '{"mode":"rtk","messages":[{"role":"tool","content":"npm test output here"}]}' # Παράθεση των πακέτων φίλτρων RTK curl http://localhost:20128/api/context/rtk/filters # Απευθείας δοκιμή του RTK με προαιρετικά μεταδεδομένα εντολής curl -X POST http://localhost:20128/api/context/rtk/test \ -H "Content-Type: application/json" \ -d '{"command":"npm test","text":"FAIL tests/example.test.ts\nError: boom"}' ``` --- ## Τι προστατεύεται Η μηχανή συμπίεσης **διατηρεί πάντα:** - ✅ Μπλοκ κώδικα (περιφραγμένα και εντός γραμμής) - ✅ URL και διαδρομές αρχείων - ✅ Δομές JSON και δομημένα δεδομένα - ✅ Αναγνωριστικά και προστατευμένα τεχνικά διακριτικά - ✅ Μαθηματικές εκφράσεις - ✅ Ορισμούς κλήσεων εργαλείων/συναρτήσεων - ✅ Προτροπές συστήματος (σε λειτουργία lite) Η ανάκτηση ανεπεξέργαστης εξόδου RTK αποκρύπτει συνηθισμένα κλειδιά API, bearer tokens, Slack tokens, κλειδιά πρόσβασης AWS, κωδικούς πρόσβασης, tokens και μυστικά πριν αποθηκευτεί οτιδήποτε. --- ## Στατιστικά συμπίεσης Κάθε συμπιεσμένο αίτημα περιλαμβάνει στατιστικά στα αρχεία καταγραφής του διακομιστή: ```json { "originalTokens": 47200, "compressedTokens": 40120, "savingsPercent": 15.0, "techniquesUsed": ["collapseWhitespace", "dedupSystemPrompt"], "mode": "lite", "engine": "caveman", "compressionComboId": "coding-agent-stack", "durationMs": 0.8, "rtkRawOutputPointers": [] } ``` --- ## Οδικός Χάρτης Φάσεων | Φάση | Λειτουργίες | Κατάσταση | | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | | Φάση 1 | Απενεργοποιημένο, Lite | ✅ Κυκλοφόρησε | | Φάση 2 | Standard, Aggressive, Ultra | ✅ Κυκλοφόρησε | | Φάση 3 | RTK, Stacked, συνδυασμοί συμπίεσης | ✅ Κυκλοφόρησε | | Φάση 4 | Στυλ εξόδου, Ultra επιπέδου SLM, υποδομή αξιολόγησης | ✅ Κυκλοφόρησε | | Φάση 4C | Προσαρμοζόμενος προϋπολογισμός περιβάλλοντος ("dial") — μηχανή υπολογισμού + API (`contextBudget` στο `PUT /api/settings/compression`) + στοιχεία ελέγχου λειτουργίας/πολιτικής στον πίνακα ελέγχου | ✅ Κυκλοφόρησε | --- ## Ευχαριστίες Οι κανόνες συμπίεσης της λειτουργίας Standard είναι εμπνευσμένοι από το **[Caveman](https://github.com/JuliusBrussee/caveman)** του **[JuliusBrussee](https://github.com/JuliusBrussee)** (⭐ 51K+) — το viral έργο «γιατί να χρησιμοποιείς πολλά token όταν λίγα token κάνουν δουλειά». Το Caveman αναφέρει `~75%` λιγότερα token εξόδου, μέση εξοικονόμηση εξόδου `65%` σε δοκιμές αναφοράς, εύρος εξόδου `22-87%` και ένα εργαλείο συμπίεσης εισόδου `~46%`. Η λειτουργία RTK είναι εμπνευσμένη από το **[RTK - Rust Token Killer](https://github.com/rtk-ai/rtk)** της **[RTK AI](https://github.com/rtk-ai)** — το έργο συμπίεσης εξόδου εντολών υψηλών επιδόσεων για τερματικό, build, δοκιμές, git και φιλτράρισμα εξόδου εργαλείων. Το RTK αναφέρει εξοικονόμηση `60-90%`, ενώ η ενδεικτική συνεδρία στο README του δείχνει εξοικονόμηση `~80%`. --- ## Προηγμένα Συστήματα Συμπίεσης Πέρα από τις 7 τυπικές λειτουργίες, το OmniRoute περιλαμβάνει αρκετά προηγμένα συστήματα συμπίεσης που λειτουργούν αυτόματα ανάλογα με το περιβάλλον. ### Συμπίεση με Επίγνωση της Cache Ορισμένοι πάροχοι (όπως το Anthropic με prompt caching) υποστηρίζουν **prompt caching**, το οποίο τους επιτρέπει να αποθηκεύουν προσωρινά τμήματα του prompt, ώστε να μειώνουν το κόστος και την καθυστέρηση. Όταν το caching είναι ενεργοποιημένο, η επιθετική συμπίεση μπορεί στην πραγματικότητα να **βλάψει** την απόδοση, επειδή αλλάζει τα προσωρινά αποθηκευμένα tokens, ακυρώνοντας την cache. Το module `cachingAware.ts` επιλύει αυτό το πρόβλημα **ανιχνεύοντας το περιβάλλον caching** και **προσαρμόζοντας ανάλογα τη στρατηγική συμπίεσης**. #### Πώς λειτουργεί 1. **Ανίχνευση περιβάλλοντος caching** — Σαρώνει το σώμα του αιτήματος για δείκτες `cache_control` 2. **Αναγνώριση παρόχων caching** — Ελέγχει αν ο πάροχος-στόχος υποστηρίζει caching 3. **Προσαρμογή στρατηγικής** — Υποβαθμίζει τα `aggressive`/`ultra` σε `standard` για παρόχους caching 4. **Παράλειψη system prompt** — Τα system prompts συνήθως αποθηκεύονται στην cache, επομένως δεν συμπιέζονται 5. **Χρήση ντετερμινιστικών μετασχηματισμών** — Χρησιμοποιούνται μόνο μετασχηματισμοί που παράγουν συνεπή έξοδο #### Παράδειγμα κώδικα ```ts import { detectCachingContext, getCacheAwareStrategy, } from "@omniroute/open-sse/services/compression/cachingAware"; const body = { model: "anthropic/claude-sonnet-4.5", messages: [{ role: "user", content: "Hello" }], cache_control: { type: "ephemeral" }, // ← Δείκτης cache }; const ctx = detectCachingContext(body, { provider: "anthropic" }); // → { hasCacheControl: true, provider: "anthropic", isCachingProvider: true } const strategy = getCacheAwareStrategy("aggressive", ctx); // → { strategy: "standard", skipSystemPrompt: true, deterministicOnly: true } ``` #### Πότε χρησιμοποιείται Η συμπίεση με επίγνωση της cache είναι **πάντα ενεργή** — δεν απαιτείται διαμόρφωση. Ενεργοποιείται μόνο όταν: - Το αίτημα έχει δείκτες `cache_control` - Ο πάροχος-στόχος υποστηρίζει prompt caching (Anthropic, OpenAI κ.λπ.) ### Προοδευτική Παλαίωση Οι μακροχρόνιες συνομιλίες συσσωρεύουν πολλούς γύρους μηνυμάτων, αλλά οι παλαιότεροι γύροι γίνονται λιγότερο σχετικοί. Το module `progressiveAging.ts` **υποβαθμίζει τα μηνύματα ανάλογα με την απόστασή τους σε γύρους**: - **Πρόσφατοι γύροι (0-3)**: Διατηρούνται αυτούσιοι (πλήρης λεπτομέρεια) - **Ενδιάμεσοι γύροι (4-8)**: Ελαφριά συμπίεση (εκκαθάριση κενών και μορφοποίησης) - **Παλιοί γύροι (9+)**: Συμπίεση τύπου caveman (αφαίρεση περιττών λέξεων, σύνοψη) - **Πολύ παλιοί γύροι (20+)**: Συνοψίζονται εκτενώς ή απορρίπτονται #### Παράδειγμα κώδικα ```ts import { applyAging } from "@omniroute/open-sse/services/compression/progressiveAging"; const messages = [ { role: "system", content: "You are a helpful assistant" }, { role: "user", content: "What is 2+2?" }, { role: "assistant", content: "4" }, // ... 50 ακόμη γύροι ... ]; const { messages: aged, saved } = applyAging(messages, { verbatim: 3, // Πρώτοι 3 γύροι: αυτούσιοι light: 8, // Γύροι 4-8: ελαφριά συμπίεση moderate: 20, // Γύροι 9-20: συμπίεση τύπου caveman // Γύροι 21+: εκτεταμένη σύνοψη }); // saved = αριθμός tokens που εξοικονομήθηκαν ``` #### Πότε χρησιμοποιείται Η προοδευτική παλαίωση είναι **πάντα ενεργή** για τις λειτουργίες `aggressive` και `ultra`. Είναι ιδιαίτερα αποτελεσματική για: - Μακροχρόνιες συνεδρίες προγραμματισμού - Πολυήμερες συνομιλίες - Ροές εργασίας πρακτόρων με πολλές κλήσεις εργαλείων ### Λειτουργία Εξόδου Caveman Το module `outputMode.ts` εισάγει **οδηγίες system prompt**, ώστε το ίδιο το μοντέλο να παράγει συμπιεσμένη, λακωνική έξοδο (σε ύφος "caveman"). #### Πώς λειτουργεί Αντί να συμπιέζει την είσοδο, αυτή η λειτουργία προσθέτει ένα system prompt όπως: > "Απάντησε με ελάχιστες λέξεις. Παράλειψε τις φιλοφρονήσεις. Χρησιμοποίησε σύντομες προτάσεις." Αυτό λειτουργεί ιδιαίτερα καλά για: - Παραγωγή κώδικα (πιο λακωνική έξοδος = λιγότερα tokens) - Σύντομες ερωταπαντήσεις (δεν χρειάζονται εκτενείς εξηγήσεις) - Μαζική επεξεργασία (μεγιστοποίηση της διεκπεραιωτικής ικανότητας) #### Πότε χρησιμοποιείται Η λειτουργία εξόδου caveman είναι **προαιρετική** — ορίστε την μέσω της συνδυαστικής διαμόρφωσης: ```json { "strategy": "auto", "config": { "auto": { "outputMode": "caveman" } } } ``` ### Στυλ Εξόδου (κατάλογος) Η παραπάνω λειτουργία εξόδου caveman είναι η **παλαιότερη διαδρομή ενός μόνο στυλ**. Η Φάση 4 τη γενίκευσε σε έναν κατάλογο συνδυάσιμων στυλ εξόδου: `OUTPUT_STYLE_CATALOG` στο `open-sse/services/compression/outputStyles/catalog.ts`. Κάθε στυλ αποτελεί μια οδηγία system prompt που κάνει το ίδιο το μοντέλο να παράγει οικονομικότερη έξοδο. Τα στυλ μπορούν να ενεργοποιηθούν ταυτόχρονα και εισάγονται με τη σειρά του καταλόγου. | Στυλ | `id` | Τι κάνει | Γλώσσες οδηγιών | | ------------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | | Λακωνικός λόγος | `terse-prose` | Αφαιρεί περιττές λέξεις/άρθρα/επιφυλάξεις· διατηρεί ακριβές το τεχνικό περιεχόμενο. Ίδιο κείμενο με την παλαιότερη λειτουργία εξόδου Caveman (γίνεται παραπομπή, δεν επαναλαμβάνεται). | en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi | | Λιγότερος κώδικας | `less-code` | Κλιμάκωση YAGNI: η μικρότερη λειτουργική αλλαγή, χωρίς αφαιρέσεις που δεν ζητήθηκαν. | en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi | | Αλογοουρά (τεμπέλης senior προγραμματιστής) | `ponytail` | «Ο καλύτερος κώδικας είναι ο κώδικας που δεν γράφτηκε ποτέ»: επαναχρησιμοποίηση > επανεγγραφή, βασική αιτία > σύμπτωμα, συντομότερο λειτουργικό diff. | en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi | | Έχω ΔΕΠΥ (πρώτα η ενέργεια) | `i-have-adhd` | Πρώτα η ενέργεια (εντολή/διαδρομή/απόσπασμα πριν από το κείμενο), αριθμημένα και οριοθετημένα βήματα, ΕΝΑ συγκεκριμένο επόμενο βήμα, χωρίς εισαγωγή/ανακεφαλαίωση/κατακλείδα. Προσαρμοσμένο από το [ayghri/i-have-adhd](https://github.com/ayghri/i-have-adhd) (MIT). | en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi | | Λακωνικό CJK (文言) | `terse-cjk` | Εξαιρετικά λακωνικό ύφος κλασικών κινεζικών. | zh (περιορισμένο βάσει locale: προσφέρεται μόνο όταν η επιλυμένη γλώσσα είναι `zh`) | Κάθε στυλ διατίθεται σε τρία επίπεδα έντασης — `lite`, `full`, `ultra` — και κάθε επίπεδο καταλήγει στην κοινή ρήτρα ορίων, η οποία διατηρεί αυτούσια τα μπλοκ κώδικα, τις διαδρομές αρχείων, τις εντολές, τα μηνύματα σφάλματος, τα URLs και τα αναγνωριστικά. #### Πώς λειτουργεί η εισαγωγή Η `applyOutputStyles()` (`open-sse/services/compression/outputStyles/apply.ts`) αντιστοιχίζει την επιλογή με τον κατάλογο (άγνωστα ids και στυλ που δεν αντιστοιχούν στο locale απορρίπτονται χωρίς ποτέ να προκαλούν σφάλμα), συνενώνει τις επιλεγμένες οδηγίες με τη σειρά του καταλόγου, προσθέτει τη ρήτρα ορίων **μία φορά** και τοποθετεί το αποτέλεσμα στην αρχή της προτροπής συστήματος, μετά από έναν μοναδικό δείκτη ιδιοδυναμίας (`[OmniRoute Output Styles]`) — η εκ νέου εφαρμογή δεν επιφέρει καμία αλλαγή. Όταν υπάρχει μετάφραση για τη γλώσσα του αιτήματος που εντοπίστηκε, εισάγεται η μεταφρασμένη οδηγία αντί για την αγγλική. #### Πώς ενεργοποιείται Στον πίνακα ελέγχου: **Περιβάλλον → Ρυθμίσεις → Συμπίεση** — μία σειρά ανά στυλ, με διακόπτη ενεργοποίησης/απενεργοποίησης και επιλογέα επιπέδου. Προγραμματιστικά, η ρύθμιση συμπίεσης αποθηκεύει την επιλογή ως: ```json { "outputStyles": [ { "id": "i-have-adhd", "level": "full" }, { "id": "less-code", "level": "lite" } ] } ``` Συμβατότητα προς τα πίσω: η παλαιότερη συνδυαστική ρύθμιση `outputMode: "caveman"` εξακολουθεί να λειτουργεί και αντιστοιχίζεται στο `terse-prose`, πανομοιότυπη σε επίπεδο byte με την παλιά εισαγωγή σε κάθε παλαιότερα υποστηριζόμενη γλώσσα. Επιλογή γλώσσας: όταν το `languageConfig.enabled` είναι ενεργό, το `autoDetect` επιλέγει τη γλώσσα του πιο πρόσφατου μηνύματος χρήστη (ίδιος ανιχνευτής με τις μηχανές εισόδου)· η απενεργοποίηση του `autoDetect` σταθεροποιεί τη `defaultLanguage`. Ανενεργό → Αγγλικά. Ο πίνακας στυλ × γλώσσας κατοχυρώνεται από το `tests/unit/compression/output-styles-i18n-matrix.test.ts`: ένα νέο στυλ δεν μπορεί να διατεθεί χωρίς τουλάχιστον μία μετάφραση pt-BR (ή μια ρητή καταγεγραμμένη εξαίρεση), και ένα υπάρχον στυλ δεν μπορεί να χάσει σιωπηρά ένα locale. Για να προσθέσετε ένα στυλ, ανατρέξτε στο [EXTENDING_COMPRESSION.md](./EXTENDING_COMPRESSION.md#adding-an-output-style). ### Συμπίεση αποτελεσμάτων εργαλείων Η λειτουργική μονάδα `toolResultCompressor.ts` παρέχει **5 εξειδικευμένες στρατηγικές συμπίεσης** για αποτελέσματα εργαλείων (κλήσεις συναρτήσεων, έξοδοι πρακτόρων, αποτελέσματα αναζήτησης κ.λπ.): 1. **Συμπίεση αποτελεσμάτων αναζήτησης** — Αφαιρεί τα πλεονάζοντα αποτελέσματα, διατηρεί τα κορυφαία N 2. **Συμπίεση ανάγνωσης αρχείων** — Περικόπτει μεγάλα αρχεία, διατηρεί κεφαλίδες/imports 3. **Συμπίεση εκτέλεσης κώδικα** — Διατηρεί μόνο τα απαραίτητα stdout/stderr 4. **Συμπίεση ερωτημάτων βάσης δεδομένων** — Περιορίζει τις σειρές, αφαιρεί αναλυτικά μεταδεδομένα 5. **Συμπίεση αποκρίσεων API** — Αφαιρεί πεδία null, συμπτύσσει πίνακες #### Πότε χρησιμοποιείται Η συμπίεση αποτελεσμάτων εργαλείων είναι **πάντα ενεργή** όταν υπάρχουν κλήσεις εργαλείων. Δεν απαιτείται ρύθμιση. ### Διαδοχική διοχέτευση Η διαδοχική λειτουργία εκτελεί **πολλαπλές μηχανές σε σειρά** — συνήθως πρώτα την RTK (εξοικονόμηση 60-90% στην έξοδο εργαλείων) και έπειτα την Caveman (30% επιπλέον εξοικονόμηση στο κείμενο που απομένει). Έτσι επιτυγχάνεται **συνολική εξοικονόμηση 78-95%**. #### Πώς λειτουργεί ``` Είσοδος (1000 tokens) → RTK (φίλτρο με επίγνωση εντολών) → 200 tokens → Caveman (αφαίρεση περιττών λέξεων) → 140 tokens → Έξοδος (140 tokens, εξοικονόμηση 86%) ``` #### Πότε χρησιμοποιείται Χρησιμοποιήστε τη διαδοχική λειτουργία για: - Ροές εργασίας με εκτενή χρήση εργαλείων (πρακτορικός προγραμματισμός, έρευνα) - Μαζική επεξεργασία με έμφαση στο κόστος - Όταν χρειάζεστε τη μέγιστη εξοικονόμηση tokens Ρυθμίστε μέσω συνδυασμού: ```json { "strategy": "auto", "config": { "auto": { "modePack": "stacked" } } } ``` --- ## Παρακάμψεις Συνδυασμών Συμπίεσης Μπορείτε να παρακάμψετε την καθολική λειτουργία συμπίεσης **ανά συνδυασμό**, ώστε να προσαρμόσετε με ακρίβεια τη συμπεριφορά για διαφορετικές περιπτώσεις χρήσης: ```json { "id": "coding-combo", "strategy": "priority", "config": { "auto": { "weights": { "taskFit": 0.5 }, "modePack": "quality-first" } }, "compressionOverride": { "mode": "aggressive", "stackedPipelines": ["rtk", "caveman"], "preserveToolDefinitions": true } } ``` Αυτό είναι χρήσιμο για: - **Συνδυασμούς προγραμματισμού**: Χρησιμοποιήστε τη λειτουργία `aggressive` για μεγάλες συνεδρίες - **Συνδυασμούς γρήγορων ερωταπαντήσεων**: Χρησιμοποιήστε τη λειτουργία `lite` για γρήγορες απαντήσεις - **Συνδυασμούς με εντατική χρήση εργαλείων**: Χρησιμοποιήστε τη λειτουργία `stacked` για μέγιστη εξοικονόμηση - **Συνδυασμούς παραγωγής**: Χρησιμοποιήστε τη λειτουργία `cache-aware` για παρόχους που υποστηρίζουν προσωρινή αποθήκευση --- ## Δείτε επίσης - [Ρύθμιση παραμέτρων περιβάλλοντος](../reference/ENVIRONMENT.md) — Μεταβλητές περιβάλλοντος συμπίεσης - [Οδηγός αρχιτεκτονικής](../architecture/ARCHITECTURE.md) — Εσωτερική λειτουργία της διοχέτευσης συμπίεσης - [Οδηγός χρήστη](../guides/USER_GUIDE.md) — Πρώτα βήματα με τη συμπίεση - [Συμπίεση RTK](./RTK_COMPRESSION.md) — Φίλτρα RTK, μοντέλο εμπιστοσύνης, πύλη επαλήθευσης, ανάκτηση ακατέργαστης εξόδου - [Μηχανές συμπίεσης](./COMPRESSION_ENGINES.md) — Caveman, RTK, στοίβαξη, APIs, MCP, πίνακας εργαλείων - [Μορφή κανόνων συμπίεσης](./COMPRESSION_RULES_FORMAT.md) — Μορφή πακέτου κανόνων JSON - [Πακέτα γλωσσών συμπίεσης](./COMPRESSION_LANGUAGE_PACKS.md) — Κανόνες Caveman ανά γλώσσα