Dites à OrbitPilot de ne pas mémoriser quelque chose — honnêtement, par message (BL-422)
Le message sous la boîte de chat
Une petite ligne se trouve maintenant sous le compositeur d'OrbitPilot, dans la fenêtre de chat ancrée et le chat plein écran aussi : "Les conversations sont mémorisées pour que je puisse vous aider mieux", reliant à votre page État de mémoire. Si votre plan n'inclut pas actuellement l'historique de chat comme source de mémoire, la ligne l'indique clairement à la place — la même raison exacte que la page d'État de Mémoire et la propre note d'honnêteté d'OrbitPilot ne donnerait jamais, sans aucune hésitation sur le même fait. Les invités voient une invitation à créer un compte gratuit à la place, puisque rien de leur part n'est encore mémorisé.
« Ne pas mémoriser » par message
À côté de vos propres messages — le même style d'icône en cluster que Catch sur les réponses d'OrbitPilot — se trouve une petite icône d'œil. Appuyez dessus et ce message est marqué non mémorisé. Trois choses suivent, et les propres mots du propriétaire justifient la forme de toutes les trois : "si l'utilisateur exclut cette section pour cette session actuelle et active... l'OrbitPilot pour cette session et ce moment PEUT le voir car il devrait pouvoir continuer la conversation avec l'utilisateur. Mais plus tard, lorsque l' utilisateur ferme la session, elle va être exclue de la mémoire."
- OrbitPilot continue de suivre la conversation. Exclure un message n'enlève jamais ce qu'OrbitPilot peut voir pour le reste de CETTE conversation — la réponse juste après, et tout ce que vous demandez plus tard dans la même session, a toujours le fil complet pour travailler.
- Il n'entre jamais dans la mémoire à long terme. Lors de la prochaine construction de mémoire (mise à jour rapide ou reconstruction complète), ce message ET la réponse qui y a répondu sont sautés — ils ne deviennent jamais un extrait de mémoire récupérable dans une conversation ultérieure. Si une construction antérieure avait déjà transformé cet échange en un extrait, la toute prochaine construction l'enlève.
- Rien n'est caché ou supprimé. Le message reste exactement là où il était dans votre historique de conversation, juste étiqueté « Non mémorisé » pour que vous puissiez voir son statut d'un coup d'œil. Il n'y a pas de bouton de purge — décider d'effacer un message de votre propre historique visible est une décision séparée, plus importante que le propriétaire a délibérément laissée devant celle-ci.
Changer d'avis
L'interrupteur fonctionne dans les deux sens et prend effet lors de la prochaine construction de mémoire, jamais immédiatement et jamais rétroactivement pour une construction qui a déjà eu lieu. Excluez un message, puis réactivez-le avant que la prochaine construction ne s'exécute, et il est mémorisé exactement comme si vous ne l'aviez jamais touché. Réactivez-le APRÈS qu'une construction l'ait déjà supprimé, et il revient à partir de la construction après cela — il n'y a aucun moyen de revenir en arrière et "dé-sauter" une construction qui a déjà eu lieu.
Comment cela fonctionne — pour les administrateurs
Rien à configurer pour l'interrupteur par message — il est disponible pour tous les
utilisateurs connectés ; les invités n'ont pas d'historique de chat persistant à exclure. La
formulation de l'avis suit le même réglage d'affectation de source/plan
(orbitpilot.chat_history) qui contrôle déjà si l'historique de chat
alimente une construction de mémoire utilisateur ou non — désactivez cela pour un plan sur la page d'affectation
et l'avis indique donc aux utilisateurs de ce plan ainsi, honnêtement, avec les mêmes mots que la page d'État
de Mémoire utilise déjà.
Comment cela fonctionne — pour les développeurs
OrbitPilotMessage.not_remembered (BooleanField, par défaut False) vit sur
le tour UTILISATEUR seulement — la réponse de l'assistant n'est jamais signalée séparément, car
pipeline/extract.py::_extract_chat_history associe déjà chaque message utilisateur
avec le message de l'assistant qui y a répondu, et saute simplement l'émission de l'enregistrement de cette
paire lorsque le drapeau est défini. pair_index avance toujours pour une paire sautée, donc chaque AUTRE paire dans la même conversation garde sonsource_id exact à travers les constructions — exclure un tour n'impose jamais de réinsertion de
chaque autre tour aussi.
Basculer le drapeau n'écrit rien d'autre. La suppression d'un extrait déjà construit se produit
naturellement à la PROCHAINE construction, grâce à la sémantique de remplacement existante de services.run_memory_build : le chemin incrémental (mise à jour rapide) supprime tout extrait stocké
OrbitPilotMemoryChunk dont la clé (source_key, source_id, chunk_index,
content_hash) n'apparaît plus dans l'extraction nouvellement effectuée, et la
reconstruction complète supprime chaque extrait avant de restaurer de la nouvelle extraction — les deux existaient déjà pour
des changements de contenu ordinaires, et une paire de chat exclue déclenche le même
chemin sans nouvelle logique de suppression nécessaire.
Vue : orbitpilot.views.orbitpilot_toggle_remember, nom d'URL
orbitpilot_toggle_remember (POST /orbitpilot/message/remember/,
message_id + optionnel format=json, même forme de réponse duale
AJAX/plain-form que Catch). Les icônes réutilisent les significations EXISTANTES "vue"/"cacher"
(bi-eye / bi-eye-slash) — la même paire
templates/blink/_memory_status.html utilise déjà pour "l'IA lit ceci"
v.s. "exclu de la mémoire de l'IA" sur un Blink — plutôt que de créer un nouveau sens d'icône pour
the même idée. Parité fixée par orbitpilot/test_bl422_do_not_remember.py.
Le texte de l'avis est délibérément MOINS cher qu'il n'y paraît, et c'était une régression réelle
capturée avant son expédition. La première version de
orbitpilot.services.get_chat_memory_notice(user) appelait
resolve_build_sources — la même fonction que la page d'État de Mémoire BL-428 et
la note d'honnêteté au moment de la demande BL-405 utilisent — pour un plein accord avec ces pages. Cela a échoué
plans.test_capability_cache.CapabilityCacheSavesQueriesTests :
resolve_build_sources appelle plans.services.get_plan_for_user
DEUX FOIS en interne (une fois directement, une autre fois dans get_effective_limits),
et aucun appel n'est câblé dans le cache par requête de plans.capabilities — un
écart documenté et délibéré (un mémo par requête a déjà été essayé là une fois et est revenu en raison
du risque de péremption d'accès). Accepter ce coût une fois par DEMANDE a déjà été accepté ; le payer
une fois par CHARGEMENT DE PAGE, pour chaque utilisateur connecté, sur chaque page, est un coût matériellement plus grand
que ce widget ne doit pas ajouter. Donc, la version expédiée vérifie uniquement l'affectation de plan de chat_history — le switch In-RAG de l'administrateur et sa ligne de Source/Affectation de Plan — lue
à travers plans.capabilities.get_user_plan (réutilise ce que les contrôles de porte de la page ont déjà mis en cache ; se dégrade à une requête simple en dehors d'une requête, par exemple des tests).
Cela ne reproduit pas le CAP de source global du plan
(included_sources) — une source peut être "assignée" ici et être toujours évincée
d'une construction réelle par le cap (voir la découverte SU-101 Q1 ci-dessous) — ce qui est exactement
pourquoi l'avis se trouve toujours à côté d'un lien vers la page d'État de Mémoire plus complète, une page que vous visitez délibérément, où payer le vrai coût une fois est le bon échange.
Câblé dans le modèle via un nouveau chat_memory_notice tag de modèle dans
orbitpilot/templatetags/orbitpilot_extras.py (le widget n'a pas de vue dédiée
pour transmettre le contexte par utilisateur).
Note sur l'élément de vérification SU-101 Q1
La ligne demandait si orbitpilot.chat_history est réellement couverte par
l'intention du propriétaire de « le garder actif ». Vérifié, deux découvertes : l'affectation de plan de chat_history
lise déjà disponible sur chaque plan chaque fois qu'aucune ligne d'administrateur n'existe du tout
(le default_visible=True du registre est le fallback) — rien à accorder
là. Mais un MÉCANISME SÉPARÉ peut toujours l'exclure : chaque source incluse du plan
included_sources (le cap de connaissance globale) est par défaut de 3, et
plusieurs autres sources par défaut visibles se classent devant chat_history dans le registre — donc
pour tout plan que le propriétaire n'a pas personnellement soulevé, resolve_build_sources
fournit le cap avant d'atteindre chat_history. Ceci est des DONNÉES DE PLAN ADMIN live, pas un
correctif spécifique à chat_history, et déjà le sujet d'une enquête séparée
(BL-419 / SU-106) — donc cela est rapporté, pas corrigé, ici. Aligné en tant que garde de régression
dans orbitpilot/test_bl422_do_not_remember.py
(SU101Q1SourceCoverageTests, SU101Q1SourceCapFindingTests).
Pages connexes
Docshub : "État de mémoire — une page, une vérité" (BL-428), "Catch — transformer une
réponse d'OrbitPilot en un Blink" (BL-421, le modèle d'icône en cluster que cela réutilise).
docs/orbitpilot/TASKS.md.
This guide was translated automatically. Read the English original.