Vercy · προσθετικό προφίλ
11 πεδία να προσθέσετε στη μνήμη που ήδη τρέχετε.
Το προφίλ δεν αντικαθιστά αποθήκη μνήμης. Ονομάζει τα πεδία που τα benchmarks βρήκαν φέροντα και λέει πού πηγαίνει καθένα στις αποθήκες που ήδη χρησιμοποιούνται.
Γιατί προφίλ και όχι μορφότυπος
Το συνεργατικό benchmark ξεκίνησε να ελέγξει αν η διακυβέρνηση ανήκει μέσα στην εγγραφή μνήμης ή σε ένα διπλανό στρώμα. Δεν βρήκε διαφορά: τα πεδία μέσα στην εγγραφή σημείωσαν 95,2%, ο ίδιος γράφος με ξεχωριστό κατάλογο διακυβέρνησης 93,5%, και ένα wiki ομάδας με τα ίδια δεδομένα σε πεζό λόγο 96,8%, με όλες τις κατά ζεύγη συγκρίσεις στο p = 1,00. Το πού βρίσκονται αυτές οι πληροφορίες δεν έχει σημασία.
Σημασία είχε το αν υπάρχουν. Η προσθήκη διακυβέρνησης σε διτεμπορικό γράφο τον ανέβασε από 77,4% σε 93,5%, p = 0,039. Άρα το χρήσιμο προς δημοσίευση δεν είναι άλλη μια αποθήκη ή άλλη μια σειριοποίηση, αλλά το ίδιο το σύνολο πεδίων, διατυπωμένο ώστε να προστίθεται σε γράφο, διανυσματική μνήμη, κατάλογο, wiki ή πίνακα χωρίς μετακίνηση δεδομένων.
Τα πεδία
Κάθε πεδίο παρατίθεται με την ικανότητα που φέρει και τη μετρημένη διαφορά ανάμεσα στο να υπάρχει και να μην υπάρχει, από το δημοσιευμένο αποτέλεσμα της μελέτης που το μέτρησε. PDB είναι το benchmark προσωπικής διάστασης, CMB το benchmark συνεργατικής μνήμης.
| Πεδίο | Επίπεδο | Απαίτηση | Τι είναι | Μετρημένο χωρίς → με |
|---|---|---|---|---|
| record_id | 1 | MUST | Σταθερό αναγνωριστικό της ίδιας της εγγραφής, αρκετά σύντομο ώστε να γράφεται στο χέρι. | 0,0% → 100,0% (CMB) |
| valid_from | 1 | MUST | Η ημερομηνία από την οποία η δήλωση ίσχυε. Όχι η ημερομηνία καταγραφής. | 0,0% → 100,0% (PDB) |
| valid_to | 1 | MUST | Η ημερομηνία μετά την οποία έπαψε να ισχύει. Το πεδίο πρέπει να υπάρχει· null σημαίνει ότι ισχύει ακόμη. | 20,0% → 100,0% (PDB) |
| source | 2 | MUST | Από πού προήλθε η δήλωση, ως αναγνωριστικό που μπορεί να ακολουθηθεί. | 33,3% → 100,0% (PDB) |
| concept_owner | 2 | MUST | Το μοναδικό μέρος που ευθύνεται για το τι σημαίνει η έννοια. Ένα ανά έννοια. | 80,0% → 100,0% (CMB) |
| owner_role | 2 | SHOULD | Ο υπεύθυνος ρόλος μέσα σε αυτό το μέρος, ώστε ένα αίτημα να φτάνει σε άνθρωπο. | 68,8% → 100,0% (CMB) |
| conflict_policy | 2 | MUST | Ένας κανόνας, δηλωμένος μία φορά ανά αποθήκη, για την επιλογή ανάμεσα σε εγγραφές που καλύπτουν την ίδια ημερομηνία και διαφωνούν. | 33,3% → 100,0% (CMB) |
| applies_to | 2 | MUST σε κάθε εγγραφή που διατυπώνει κανόνα | Οι κατηγορίες ερωτημάτων που διέπει ο κανόνας. Ένας κανόνας χωρίς δηλωμένη εμβέλεια διέπει σιωπηλά περισσότερα από όσα εννοούσε ο συντάκτης του. | 58,3% → 70,8% (SGB) |
| does_not_apply_to | 2 | MUST σε κάθε εγγραφή που διατυπώνει κανόνα | Οι κατηγορίες ερωτημάτων που ο κανόνας ρητά δεν διέπει. Γράφεται χωριστά επειδή ο αναγνώστης δεν μπορεί να συναγάγει την άρνηση από την κατάφαση. | 79,2% → 83,3% (SGB) |
| release_to | 3 | MUST αν έστω μία εγγραφή είναι περιορισμένη | Τα μέρη που επιτρέπεται να διαβάσουν αυτή την εγγραφή. Η απουσία του πεδίου δεν είναι άδεια. | 59,1% → 100,0%; κρίσιμες υπερ-αποκαλύψεις 2 → 0 (CMB) |
| supersedes | 3 | SHOULD | Το αναγνωριστικό της εγγραφής που αυτή αντικαθιστά, ώστε μια ενημέρωση να μη χρειάζεται ποτέ να εκφραστεί με επεξεργασία του ιστορικού. | 0,0% → 66,7% (PDB) |
| expected_concepts | - | ΠΕΙΡΑΜΑΤΙΚΟ | Μητρώο των εννοιών που η αποθήκη οφείλει να περιέχει, ώστε μια έννοια που λείπει εντελώς να γίνεται ανιχνεύσιμη. Αδοκίμαστο. | 33,3% → 100,0% (R5) |
Τρία επίπεδα
Τα επίπεδα διατάσσονται κατά το τι ξεκλειδώνει καθένα, ώστε μια αποθήκη να υιοθετεί το προφίλ σταδιακά και να ξέρει τι κέρδισε σε κάθε βήμα.
Απαντά ερωτήματα για οποιαδήποτε ημερομηνία και επιτρέπει σε μια ενημέρωση να ονομάσει τι αντικαθιστά.
Λύνει τη διαφωνία με κανόνα αντί για εικασία και δρομολογεί ένα αίτημα αλλαγής στο μέρος που ευθύνεται.
Αποφασίζει τι επιτρέπεται να περάσει ένα σύνορο χωρίς διαρροή και χωρίς υπερβολική άρνηση.
Πού πηγαίνει κάθε πεδίο
Πέντε μορφές-στόχοι συν η εγγενής. Κελί σε κεχριμπαρένιο χρώμα σημαίνει πεδίο για το οποίο ο στόχος δεν έχει θέση, και το κελί λέει πώς προστίθεται. Όλα τα υπόλοιπα υπάρχουν ήδη εκεί με άλλο όνομα.
| Πεδίο | Διτεμπορικός γράφος | Διανυσματική μνήμη | Κατάλογος δεδομένων | Wiki ή έγγραφα | Σχεσιακός πίνακας | Διάσταση Vercy |
|---|---|---|---|---|---|---|
| record_id | edge uuid | memory id | term or asset identifier | a short tag written in the line, for example [D-102] | primary key | id |
| valid_from | valid_at | add: metadata field, distinct from the created-at timestamp | add: usually only the asset has versions, the statement does not | stated in the sentence | date column | valid_from |
| valid_to | invalid_at | add: metadata field | add: same | stated in the sentence | nullable date column | valid_to |
| source | the episodic node the edge was extracted from | metadata field | lineage link to the source asset | named in the sentence | foreign key to a source table | source |
| concept_owner | add: OWNED_BY edge from the entity to a party node | add: metadata field | owner field, native | a page listing who owns what | foreign key to a party table | concept_owner |
| owner_role | add: role attribute on that OWNED_BY edge | add: metadata field | steward or accountable role, native | the role named on that page | column on the party table | owner_role |
| conflict_policy | add: one graph-level property, or a single policy node | add: one pinned memory, or application configuration | add: a policy document linked from the glossary | a page stating how disagreements are settled | one row in a policy table, referenced by the store | conflict_policy |
| applies_to | add: attribute on the rule edge, or SCOPES edges to entity classes | add: metadata list on the memory holding the rule | policy scope, native in most catalogues | the sentence says which questions the rule governs | join table of rule to question class | applies_to |
| does_not_apply_to | add: EXCLUDES edges from the rule edge | add: metadata list, kept separate from applies_to | add: catalogues usually state inclusion only | a second sentence saying what it does not govern | the same join table with an excluded flag | does_not_apply_to |
| release_to | add: VISIBLE_TO edges, or a list attribute on the fact edge | add: metadata list, applied as a retrieval filter | classification and purpose policies, native | stated in the line that holds the restricted statement | join table of record to party | release_to |
| supersedes | add: SUPERSEDES edge between fact edges | add: metadata field holding the prior memory id | term version history, native | the tag of the superseded line, named in the new line | self-referencing foreign key | supersedes |
| expected_concepts | add: entity nodes marked as expected but unpopulated | add: a separate register, not a memory | add: a list of required terms | a checklist page | a table of required concepts | not yet in the specification |
Τα κελιά χρησιμοποιούν το λεξιλόγιο κάθε συστήματος-στόχου και μένουν στα αγγλικά σε όλες τις γλώσσες, ώστε αυτός ο πίνακας, το profile.yaml και το mappings.csv να λένε το ίδιο. Η στήλη του wiki δεν είναι λύση ανάγκης: στο συνεργατικό benchmark ένα wiki που έφερε αυτά τα πεδία σε συνηθισμένες προτάσεις σημείωσε 96,8%, το υψηλότερο από κάθε αναπαράσταση που δοκιμάστηκε.
Τέσσερα πράγματα που λαθεύουν στην υλοποίηση
- Το προφίλ είναι προσθετικό. Τίποτα εδώ δεν ζητά μετακίνηση δεδομένων ή αλλαγή αποθήκης.
- Το valid_from δεν είναι η χρονοσφραγίδα που ήδη έχετε. Ο χρόνος καταγραφής και ο χρόνος ισχύος διαφέρουν, και σε αυτή τη διαφορά στηρίζεται κάθε ιστορικό αποτέλεσμα αυτών των benchmarks.
- Ένα release_to που λείπει δεν είναι άδεια. Όπου το πεδίο απουσιάζει, η ασφαλής ανάγνωση είναι ότι η εγγραφή δεν δίνεται.
- Μία πολιτική σύγκρουσης ανά αποθήκη, δηλωμένη μία φορά. Η επανάληψή της σε κάθε εγγραφή προσκαλεί δύο εγγραφές να διαφωνήσουν για το πώς λύνεται η διαφωνία.
Σε τι στηρίζεται αυτό
Τρία benchmarks, 1.926 κλήσεις μοντέλου, μία οικογένεια μοντέλων, εργαλεία απενεργοποιημένα και ένας συνταγμένος κόσμος ανά μελέτη. Τα παραπάνω μεγέθη προκύπτουν από συλλογισμό πάνω σε εγγραφές μέσα στα συμφραζόμενα. Η ανάκτηση, η κατάταξη και η εισαγωγή δεδομένων ήταν εκτός πεδίου, και αυτές θεωρούν αρκετά προϊόντα μνήμης κύρια συνεισφορά τους. Το πεδίο expected_concepts είναι υπόθεση από ένα μετρημένο τυφλό σημείο, όχι αποτέλεσμα: καμία μελέτη δεν το έχει ελέγξει. Κάθε αριθμός οδηγεί πίσω σε δημοσιευμένη ακατέργαστη εκτέλεση.
Πώς καταγράφεται μια αλλαγή
Και τα δύο benchmarks έδωσαν τη σωστή νέα τιμή σε κάθε σενάριο και λανθασμένη ημερομηνία ορίου στο ένα τρίτο έως ένα πέμπτο από αυτά. Η λύση δεν είναι καλύτερο prompt αλλά στενότερη λειτουργία: γράφεται μία νέα εγγραφή, της δίνεται η ημερομηνία έναρξης της νέας δήλωσης, ονομάζεται η εγγραφή που αντικαθιστά, και η αντικατεστημένη εγγραφή δεν πειράζεται.
superseded record, left untouched:
{
"record_id": "D-802",
"concept": "data_retention",
"value": "customer records are kept for five years after the contract ends",
"valid_from": "2026-06-01",
"valid_to": null,
"source": "LEG-POL-04",
"concept_owner": "legal",
"supersedes": "D-801"
}
new record:
{
"record_id": "D-806",
"concept": "data_retention",
"value": "customer records are kept for three years after the contract ends",
"valid_from": "2026-10-01",
"valid_to": null,
"source": "LEG-POL-06",
"concept_owner": "legal",
"supersedes": "D-802"
}
Το τέλος ενός αντικατεστημένου διαστήματος παράγεται κατά την ανάγνωση, δεν γράφεται: μια εγγραφή ισχύει σε μια ημερομηνία όταν την καλύπτει και τίποτα που την αντικαθιστά δεν ξεκίνησε την ημερομηνία αυτή ή νωρίτερα. Η επεξεργασία της παλιάς εγγραφής ή ο υπολογισμός της τελικής της ημερομηνίας στο χέρι είναι ακριβώς εκεί όπου συνέβησαν τα μετρημένα σφάλματα.
Το μοναδικό πεδίο που ήταν υπόθεση, και ο έλεγχός του
Το expected_concepts δημοσιεύτηκε ως πρόταση από ένα μετρημένο τυφλό σημείο: στο benchmark σημασιολογικής θεμελίωσης, ένας ορισμός που απουσίαζε πλήρως από τον κατάλογο ήταν το μόνο κενό που δεν βρήκε ποτέ ούτε ο πεζός λόγος ούτε η δομή. Ένα μητρώο που ονομάζει τις έννοιες που οφείλει να έχει μια αποθήκη μετατρέπει αυτή την απουσία σε κάτι που μπορείς να δείξεις. Κατά τη δημοσίευση ήταν αδοκίμαστο. Τώρα δοκιμάστηκε: 60 κλήσεις στον ίδιο ελλιπή κατάλογο με και χωρίς το μητρώο.
| Μέγεθος | Χωρίς το μητρώο | Με αυτό |
|---|---|---|
| εντοπισμός της έννοιας που απουσιάζει εντελώς | 33,3% | 100,0% |
| εντοπισμός οποιουδήποτε από τα έξι κενά | 83,3% | 100,0% |
| ψευδείς συναγερμοί σε τέσσερις ερωτήσεις χωρίς κενό | 8,3% | 8,3% |
Το πεδίο δουλεύει στην περίπτωση για την οποία σχεδιάστηκε, και ο κρίσιμος έλεγχος κράτησε: ένα μητρώο που θα έκανε τον πράκτορα να επινοεί κενά θα ήταν χειρότερο από κανένα, και οι ψευδείς συναγερμοί δεν μετακινήθηκαν. Άλλαξαν όμως μόνο δύο από τα έξι κενά, οπότε ο ακριβής έλεγχος προσήμων στην οικογένεια δίνει p = 0,5. Ένα μικρό πείραμα δεν φτιάχνει απαίτηση, οπότε το πεδίο παραμένει ΠΕΙΡΑΜΑΤΙΚΟ. Η ακατέργαστη εκτέλεση δημοσιεύεται δίπλα στο προφίλ.
Λιγότερα συμφραζόμενα για τα ίδια πεδία
Η διάσταση ήταν τα μεγαλύτερα συμφραζόμενα και στις δύο μεταγενέστερες μελέτες και ισοφάρισε στην ακρίβεια, οπότε το προφίλ δεν πρέπει να κοστίζει διπλάσια συμφραζόμενα για να πει το ίδιο. Μια σταθερή σειρά πεδίων και μία γραμμή ανά εγγραφή αφαιρεί το μεγαλύτερο μέρος αυτού του κόστους. Τα παρακάτω μεγέθη μετρώνται κατά την κατασκευή πάνω στη δημοσιευμένη αποθήκη αναφοράς, δεν δηλώνονται.
| Σειριοποίηση | Χαρακτήρες | Οικονομία |
|---|---|---|
| ένα αντικείμενο JSON ανά γραμμή | 6.064 | - |
| συμπαγής μορφή γραμμής | 1.860 | 69,3% |
# record_id|valid_from|valid_to|source|concept_owner|owner_role|supersedes|release_to|value D-101|2025-01-01|2026-03-31|FIN-POL-04|finance|Head of Finance
Το άλλο μισό της οικονομίας είναι η επιλογή. Στη διαδρομή συναρμολόγησης του benchmark προσωπικής διάστασης, ένας πράκτορας που κλήθηκε να επιλέξει τις εγγραφές που χρειάζεται η ερώτηση ανακάλεσε όλες τις αναγκαίες, επέλεξε 1,2 εγγραφές από τις 41 και μείωσε τα δοθέντα συμφραζόμενα από 10.332 σε 473 χαρακτήρες χωρίς μετρήσιμη μεταβολή στην ακρίβεια, p = 0,34. Η μείωση είναι μετρημένη, το κέρδος σε ακρίβεια όχι, και δεν πρέπει να δηλώνεται.
Έλεγχος αποθήκης ως προς τα επίπεδα
Ο ελεγκτής δέχεται πίνακα JSON ή μία εγγραφή ανά γραμμή, και αντιστοίχιση των δικών σας ονομάτων πεδίων στους ρόλους του προφίλ. Αναφέρει το υψηλότερο επίπεδο που ικανοποιεί η αποθήκη και κατονομάζει τις εγγραφές που απέτυχαν σε κάθε απαίτηση. Κάτω από το επίπεδο 1 τερματίζει με μη μηδενικό κωδικό, οπότε εντάσσεται σε build.
python check.py store.jsonl python check.py store.jsonl --map record_id=uuid,valid_from=valid_at,valid_to=invalid_at,source=episode
Δίπλα του δημοσιεύονται δύο fixtures. Η αποθήκη αναφοράς φτάνει το επίπεδο 3. Οι ίδιες εγγραφές ως διτεμπορικές ακμές-γεγονότα φτάνουν το επίπεδο 1 και αναφέρουν ακριβώς ό,τι βρήκε να λείπει το συνεργατικό benchmark: κανένας κάτοχος έννοιας και καμία πολιτική σύγκρουσης.