När ett sökresultat handlade om fel sak blev det tydligt att “du måste säga något” är en farlig regel.
En faktaskill kan ibland få ett svar där namnet matchar men personen eller ämnet är fel. Om systemet samtidigt säger att modellen måste producera en rad tvingas Gemma 3 välja mellan att vara tyst och att hitta på.
Jag började därför göra grounding till en riktig gate. Skills som bygger på extern data får stå över om underlaget är tomt eller oanvändbart.
const reason = unusableDataReason(data);
if (requiresGrounding(skill) && reason) {
return {
aired: false,
reason
};
}Det är fortfarande ett utvecklingsområde. Nästa steg är ännu bättre identitetskontroll så en källa om någon med samma namn inte räcker.
Installern är också dokumentation
Ett bra installscript visar exakt vilka filer som förväntas finnas, vilket buildnamn som skapas och vilken service som ska startas om. På så sätt fungerar scriptet nästan som ett exekverbart förändringsdokument.
Jag försöker därför skriva ut aktiv image, backupplats och healthresultat i slutet. Det gör nästa felsökning mycket enklare.
Weather Memory blev också ett exempel på serialized writes
Om två completion-events kommer nära varandra vill jag inte att en äldre skrivning ska råka avslutas sist och skriva över nyare state. Därför serialiseras skrivningarna i en liten promise-kedja.
persistChain =
persistChain
.catch(ignore_previous_error)
.then(() => atomicWrite(latestMemory))Det är ett litet skydd men passar bra för en tjänst där flera async-flöden kan avslutas i oväntad ordning.