Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Zachycení promptu je prokázané, nebo hlášené jako nedostupné

Zachycení promptu je prokázané, nebo hlášené jako nedostupné

majordomus://rule/majordomus.prompt-capture@1aktivní promptyproviderevidence

Zdůvodnění

Od workera nelze chtít, aby zaznamenával vlastní prompty. Nikdy nevidí bajty, které osoba napsala, jen to, co z nich poskytovatel složil, a záznam napsaný modelem postrádá právě ty prompty, na kterých záleželo: první z relace, který přijde dřív, než je přečtena jakákoli instrukce, a každý, při kterém byl model zaneprázdněn plněním toho, oč byl požádán. Instrukce v bootstrap souboru je žádost, ne mechanismus, a neexistuje behaviorální test, který by dokázal, že žádost byla splněna.

Zachytávání proto patří do vlastního hooku providera, pod modelem, kde je deterministické a kde jeho spuštění je důkazem, že funguje. To nechává providerovi dva poctivé stavy — zachytává, nebo není pozorovatelný — a toto pravidlo brání tomu, aby se druhý potichu prezentoval jako první.

Archiv je také nejcitlivější soubor, který nástroj zapisuje. Surové prompty nesou přihlašovací údaje, jména zákazníků a cesty stejně často jako záměr, takže stejné pravidlo, které žádá, aby byl záchyt skutečný, žádá, aby nikdy neopustil stroj přes Git.

Archiv, který nikdo neotevře, nedokládá nic, a záznam utvářený pro stroj není ten, který člověk čte: prompt dorazí escapovaný, na jednom řádku, zabalený do polí, která poskytovatel poslal. Proto se každý prompt uchovává dvakrát pod jedním základem názvu — záznam JSON, což je to, co poskytovatel poslal a z čeho se vše ostatní odvozuje, a vykreslení v Markdownu, které člověk otevře. Zapsat jen jedno z nich je selhání, které toto kryje, v obou směrech, protože archiv, jehož formát závisí na tom, kdy byl prompt náhodou zachycen, nelze přečíst od začátku do konce a nelze věřit, že je úplný.

Požadované chování

Položka vynucování druhu provider-hook platí, jen když konfigurace poskytovatele pojmenovává shim, který nástroj zapsal, shim je spustitelný a syntetický payload jím proveden vytvoří záznam. Repozitář, který nezapojuje nic, hlásí, že nic nezachytává.

Provider se hlásí jako unsupported jen tehdy, když deklarace říká, že má žádnou takovou událost, s citací, ze které to bylo ověřeno; provider, který takovou dokumentuje a tato distribuce pro něj žádný adaptér nedodává, se hlásí jako unadapted. Rozlišení není pedantství: unsupported je výrok o cizím produktu a ztotožnění s „nemáme adaptér“ způsobilo, že tento nástroj řekl nepravdu o dvou z nich v den, kdy dodaly systémy hooků, o kterých nevěděl. Každá buňka schopnosti proto nese svou citaci (project.a-provider-capability-cites-its-evidence).

Pod adresářem archivu není nic sledováno Gitem a hranice ignorování ho pokrývá. Každý záznam začíná identifikátorem schématu a nese uzavřenou sadu polí, kterou zapisovač vydává; pole pojmenovávající odpověď modelu, dokončení nebo přepis je porušení, protože archiv drží polovinu výměny, kterou řekl člověk, a nic víc.

Záznam

Záznam je objekt JSON, jeden člen na řádek, v pořadí, které schéma deklaruje, začínající {, pak "schema": "<id>", a končící }. Je pěkně formátován, protože záznam čtou i lidé a jediný čtyřicetikilobajtový řádek žádný editor ani diff užitečně nezobrazí; odsazení leží mimo úseky řetězců, takže vlastní bajty promptu formátováním projdou nedotčené.

Pole, která může zachycení vyplnit, jsou povinná a vždy přítomná. Vše, co schéma deklaruje navíc, je volitelné v jednom konkrétním smyslu: volitelné znamená, že to zapisovač nemohl vědět, nikdy že to bylo zahozeno. Zachycení běží před vyvoláním modelu, takže v okamžiku zápisu záznamu se tah ještě nestal — čas, kdy skončil, jak dlouho trval, který model odpověděl, s jakým úsilím, co spotřeboval a co vytvořil, z toho hooku pozorovatelné není. Tato pole proto v záznamu chybí, a nejsou přítomna jako null, protože chybějící pole říká „nepozorováno“ a null by tvrdil, že se pozorovalo, že nic není. Renderer řádek nebo sekci vynechá, a netiskne zástupný text.

Záznam může nést meta.parent: název souboru záznamu, z něhož je odvozen, v rámci téhož archivu. Je to název, nikdy cesta, protože záznam může ukazovat jen dovnitř svého vlastního adresáře.

Schéma je cesta

Každý záznam jmenuje své schéma a tento identifikátor je umístění toho, co ho popisuje: <namespace>.<name>/<version> leží na share/schemas/<namespace>/<name>/<version>, takže majordomus.capture/v1 se překládá na share/schemas/majordomus/capture/capture.v1 bez čehokoli mezi tím — žádný registr, žádná vyhledávací tabulka, nic, co by se mohlo rozejít se záznamy, které prý popisuje. Čtenář, který drží záznam, drží i způsob, jak ho číst.

Na tomto základu jsou dva soubory, protože existují dvě projekce a nejsou stejného druhu:

projekcesouborjazyk
záznam<stem>.schema.jsonJSON Schema
dokument<stem>.protoprotobuf

Záznam je JSON, takže ho přímo popisuje JSON Schema a lze proti němu validovat. Dokument je Markdown — tvar, pořadí, sekce, které jsou přítomny nebo chybí — a zpráva s číslovanými poli to vystihuje, aniž by předstírala, že dokument je pytel klíčů. Ani jedno zde není formát přenosu: nic je neserializuje a jsou jediným místem, kde jsou části každé projekce definovány tak, aby se obě nemohly neshodnout v tom, co prompt je.

Identifikátor schématu pojmenovávající soubor, který tam není, je porušení, a oba soubory tam musí být: záznam popisuje obě své poloviny, nebo ani jednu. Přidání verze znamená přidání obou souborů na cestě, kterou už odvozuje identifikátor té verze.

Vykreslení

Každý záznam má vedle sebe Markdown vykreslení se stejným jménem a každé vykreslení má svůj záznam. Vykreslení má jediný tvar a všechna ho sdílejí: pole záznamu jako YAML front matter, tatáž pole jako tabulka pro člověka, poté volitelné sekce ## CONTEXT — co bylo načteno při čtení promptu — a ## OUTPUT — jak tah skončil, každá přítomná právě tehdy, když záznam nese pole, které vykresluje, a nakonec ## PROMPT, vždy přítomný a vždy poslední, dekódovaný a ohraničený řadou zpětných apostrofů delší než nejdelší řada v promptu, aby prompt citující kód nemohl blok předčasně ukončit. Prompt je poslední, protože je jediným polem bez omezení velikosti.

Pole, která se objevují dvakrát, jako front matter i jako tabulka, nejsou duplicita, která by se mohla rozejít: jedna funkce zapisuje obojí z jednoho záznamu jedním průchodem a vykreslení se nikdy neupravuje ručně.

Záznam bez vykreslení se opraví ze záznamu. Vykreslení bez záznamu se opravit nedá a hlásí se k odstranění, protože z odvozeného nelze rekonstruovat, co poslal poskytovatel. Záznam, jehož členy reformátor nedokáže plně vysvětlit, zůstane přesně tak, jak je, a je ohlášen, místo aby byl přepsán na něco, co mlčky zahodí, co nedokázal přečíst.

## OUTPUT vykresluje polovinu výměny patřící modelu, kterou záznam promptu nemusí nést. Vyhovující zapisovač ji uloží do samostatného záznamu po tahu, jehož meta.parent pojmenovává záznam promptu, a vykreslení oba spojí. Dokument má sekci; toto pravidlo říká, kde bajty žijí.

Chování při selhání

Porušení je nález FAIL v kategorii capture a příkaz, který ho našel, skončí s kódem 10. Pod watch se totéž porušení hlásí jako drift a příkaz skončí s kódem 11.

Ověření

mj_validate_prompt_capture rozhoduje invarianty archivu a ověřovač zapojení rozhoduje stav poskytovatele, obojí se spouští z doctor, watch. Ověřovač zapojení provede syntetický payload přes shim a přečte zpět obě poloviny, takže verified znamená, že dvojice vznikla, a ne jen že hook proběhl. Behaviorální případ test/cases/29_prompt_capture.sh je dokazuje a CI tento případ spouští.

Odkud to pochází

kanonický soubor
.ai/repo/rules/vendor/majordomus/rules/prompt-capture.v1.md
identity
majordomus.prompt-capture@1
dostupné také jako
Zdroj MCP majordomus://rule/majordomus.prompt-capture@1 · majordomus entity show rule/majordomus-prompt-capture-1 · GET /api/v1/entity?uri=majordomus://rule/majordomus.prompt-capture@1
v Cockpitu
/cockpit/objects/rule/majordomus-prompt-capture-1

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

Prohledává názvy a popisy všech stránek, které tento web publikuje.