Construire une couche temporelle pour que votre IA ne mente jamais sur le temps

DEV - 23/03
Comment le sous-système temporel de Claudriel fixe l'heure par requête, résout les fuseaux horaires à partir du contexte et détecte la dérive de l'horloge avant de corrompre le raisonnement de l'IA.

Ahnii!

Contexte de la série : cet article s'appuie sur la série Waaseyaa. Claudriel est un système d'opérations personnelles d'IA construit sur le framework Waaseyaa. Vous n'avez pas besoin d'avoir lu les articles précédents, mais ils couvrent le système d'entités et l'architecture sur lesquels repose cette couche temporelle.

La plupart des applications traitent le temps comme un appel de fonction gratuit. Besoin de l'heure actuelle ?nouveau DateHeure(). Vous en avez besoin à nouveau trois lignes plus tard ?nouveau DateHeure()encore. Dans une requête qui prend 200 ms, personne ne remarque la différence de deux millisecondes entre ces appels.

Un système d'IA qui raisonne sur votre emploi du temps, détecte les engagements à la dérive et vous donne un coup de pouce avant les réunions. Si l'extracteur d'engagement capture "maintenant" à 14:00:00.003 et que le détecteur de dérive le capture à 14:00:00.217, vous obtenez un raisonnement temporel incohérent. Pire encore, si l’horloge du système s’écarte de la réalité et que personne ne vérifie, chaque décision basée sur le temps est fausse.

Cet article couvre celui de ClaudrielTemporelsous-système : comment il épingle l'heure par demande, résout le bon fuseau horaire à partir du contexte et surveille l'état de l'horloge avant de laisser les agents raisonner sur votre emploi du temps.

Le problème principal : les appels à temps dispersé

L'approche naïve ressemble à ceci :

// Dans l'extracteur d'engagement $extractedAt = new \DateTimeImmutable(); // 50 ms plus tard, dans le détecteur de dérive $checkedAt = new \DateTimeImmutable(); // Ce sont des instants différents. Maintenant, vos // vérifications "simultanées" ne sont pas d'accord sur l'heure qu'il est.
Entrer en mode plein écran Quitter le mode plein écran

Isolément, la différence est insignifiante. Mais lorsque quatre composants d'une même requête capturent chacun leur propre « maintenant », vous obtenez quatre horodatages légèrement différents dans la même réponse. Les agents temporels comparant ces horodatages tirent des conclusions erronées.

Le correctif est simple dans son concept : capturez le temps une fois, partagez-le partout.

Service de temps atomique

Service de temps atomiqueest la seule source de temps pour toute demande. Il capture unInstantané temporelqui regroupe l'heure de l'horloge murale, l'heure monotone et le fuseau horaire en un seul objet immuable.

classe finale AtomicTimeService { fonction publique maintenant ( ?string $scopeKey = null, ?\DateTimeZone $timezone = null, ): TimeSnapshot { if ($scopeKey === null) { return $this->captureSnapshot($timezone); } return $this->snapshotStore()->remember( $this->snapsho...
[Courte citation de 8% de l'article original]
Loading...