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_id1MUSTΣταθερό αναγνωριστικό της ίδιας της εγγραφής, αρκετά σύντομο ώστε να γράφεται στο χέρι.0,0% → 100,0% (CMB)
valid_from1MUSTΗ ημερομηνία από την οποία η δήλωση ίσχυε. Όχι η ημερομηνία καταγραφής.0,0% → 100,0% (PDB)
valid_to1MUSTΗ ημερομηνία μετά την οποία έπαψε να ισχύει. Το πεδίο πρέπει να υπάρχει· null σημαίνει ότι ισχύει ακόμη.20,0% → 100,0% (PDB)
source2MUSTΑπό πού προήλθε η δήλωση, ως αναγνωριστικό που μπορεί να ακολουθηθεί.33,3% → 100,0% (PDB)
concept_owner2MUSTΤο μοναδικό μέρος που ευθύνεται για το τι σημαίνει η έννοια. Ένα ανά έννοια.80,0% → 100,0% (CMB)
owner_role2SHOULDΟ υπεύθυνος ρόλος μέσα σε αυτό το μέρος, ώστε ένα αίτημα να φτάνει σε άνθρωπο.68,8% → 100,0% (CMB)
conflict_policy2MUSTΈνας κανόνας, δηλωμένος μία φορά ανά αποθήκη, για την επιλογή ανάμεσα σε εγγραφές που καλύπτουν την ίδια ημερομηνία και διαφωνούν.33,3% → 100,0% (CMB)
applies_to2MUST σε κάθε εγγραφή που διατυπώνει κανόναΟι κατηγορίες ερωτημάτων που διέπει ο κανόνας. Ένας κανόνας χωρίς δηλωμένη εμβέλεια διέπει σιωπηλά περισσότερα από όσα εννοούσε ο συντάκτης του.58,3% → 70,8% (SGB)
does_not_apply_to2MUST σε κάθε εγγραφή που διατυπώνει κανόναΟι κατηγορίες ερωτημάτων που ο κανόνας ρητά δεν διέπει. Γράφεται χωριστά επειδή ο αναγνώστης δεν μπορεί να συναγάγει την άρνηση από την κατάφαση.79,2% → 83,3% (SGB)
release_to3MUST αν έστω μία εγγραφή είναι περιορισμένηΤα μέρη που επιτρέπεται να διαβάσουν αυτή την εγγραφή. Η απουσία του πεδίου δεν είναι άδεια.59,1% → 100,0%; κρίσιμες υπερ-αποκαλύψεις 2 → 0 (CMB)
supersedes3SHOULDΤο αναγνωριστικό της εγγραφής που αυτή αντικαθιστά, ώστε μια ενημέρωση να μη χρειάζεται ποτέ να εκφραστεί με επεξεργασία του ιστορικού.0,0% → 66,7% (PDB)
expected_concepts-ΠΕΙΡΑΜΑΤΙΚΟΜητρώο των εννοιών που η αποθήκη οφείλει να περιέχει, ώστε μια έννοια που λείπει εντελώς να γίνεται ανιχνεύσιμη. Αδοκίμαστο.33,3% → 100,0% (R5)

Τρία επίπεδα

Τα επίπεδα διατάσσονται κατά το τι ξεκλειδώνει καθένα, ώστε μια αποθήκη να υιοθετεί το προφίλ σταδιακά και να ξέρει τι κέρδισε σε κάθε βήμα.

Επίπεδο 1 - χρόνος και ταυτότητα
Απαντά ερωτήματα για οποιαδήποτε ημερομηνία και επιτρέπει σε μια ενημέρωση να ονομάσει τι αντικαθιστά.
Επίπεδο 2 - προέλευση και αρμοδιότητα
Λύνει τη διαφωνία με κανόνα αντί για εικασία και δρομολογεί ένα αίτημα αλλαγής στο μέρος που ευθύνεται.
Επίπεδο 3 - αποκάλυψη
Αποφασίζει τι επιτρέπεται να περάσει ένα σύνορο χωρίς διαρροή και χωρίς υπερβολική άρνηση.

Πού πηγαίνει κάθε πεδίο

Πέντε μορφές-στόχοι συν η εγγενής. Κελί σε κεχριμπαρένιο χρώμα σημαίνει πεδίο για το οποίο ο στόχος δεν έχει θέση, και το κελί λέει πώς προστίθεται. Όλα τα υπόλοιπα υπάρχουν ήδη εκεί με άλλο όνομα.

ΠεδίοΔιτεμπορικός γράφοςΔιανυσματική μνήμηΚατάλογος δεδομένωνWiki ή έγγραφαΣχεσιακός πίνακαςΔιάσταση Vercy
record_idedge uuidmemory idterm or asset identifiera short tag written in the line, for example [D-102]primary keyid
valid_fromvalid_atadd: metadata field, distinct from the created-at timestampadd: usually only the asset has versions, the statement does notstated in the sentencedate columnvalid_from
valid_toinvalid_atadd: metadata fieldadd: samestated in the sentencenullable date columnvalid_to
sourcethe episodic node the edge was extracted frommetadata fieldlineage link to the source assetnamed in the sentenceforeign key to a source tablesource
concept_owneradd: OWNED_BY edge from the entity to a party nodeadd: metadata fieldowner field, nativea page listing who owns whatforeign key to a party tableconcept_owner
owner_roleadd: role attribute on that OWNED_BY edgeadd: metadata fieldsteward or accountable role, nativethe role named on that pagecolumn on the party tableowner_role
conflict_policyadd: one graph-level property, or a single policy nodeadd: one pinned memory, or application configurationadd: a policy document linked from the glossarya page stating how disagreements are settledone row in a policy table, referenced by the storeconflict_policy
applies_toadd: attribute on the rule edge, or SCOPES edges to entity classesadd: metadata list on the memory holding the rulepolicy scope, native in most cataloguesthe sentence says which questions the rule governsjoin table of rule to question classapplies_to
does_not_apply_toadd: EXCLUDES edges from the rule edgeadd: metadata list, kept separate from applies_toadd: catalogues usually state inclusion onlya second sentence saying what it does not governthe same join table with an excluded flagdoes_not_apply_to
release_toadd: VISIBLE_TO edges, or a list attribute on the fact edgeadd: metadata list, applied as a retrieval filterclassification and purpose policies, nativestated in the line that holds the restricted statementjoin table of record to partyrelease_to
supersedesadd: SUPERSEDES edge between fact edgesadd: metadata field holding the prior memory idterm version history, nativethe tag of the superseded line, named in the new lineself-referencing foreign keysupersedes
expected_conceptsadd: entity nodes marked as expected but unpopulatedadd: a separate register, not a memoryadd: a list of required termsa checklist pagea table of required conceptsnot yet in the specification

Τα κελιά χρησιμοποιούν το λεξιλόγιο κάθε συστήματος-στόχου και μένουν στα αγγλικά σε όλες τις γλώσσες, ώστε αυτός ο πίνακας, το profile.yaml και το mappings.csv να λένε το ίδιο. Η στήλη του wiki δεν είναι λύση ανάγκης: στο συνεργατικό benchmark ένα wiki που έφερε αυτά τα πεδία σε συνηθισμένες προτάσεις σημείωσε 96,8%, το υψηλότερο από κάθε αναπαράσταση που δοκιμάστηκε.

Τέσσερα πράγματα που λαθεύουν στην υλοποίηση

Σε τι στηρίζεται αυτό

Τρία 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.86069,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: κανένας κάτοχος έννοιας και καμία πολιτική σύγκρουσης.

profile.yamlmappings.csvcheck.pyαποθήκη αναφοράςτο πείραμα του μητρώουΟι μελέτες πίσω από αυτόΗ προδιαγραφή