Memory
Gelerntes Memory (gelerntes Gedächtnis) ist eine kurze Liste von Fakten, die der Agent für eine Session behält. Jeder Fakt hat eine Quelle im Gespräch. OpenBot fügt nach jedem Turn Fakten hinzu und zeigt sie dem Modell in späteren Turns. Du kannst Fakten auch selbst hinzufügen, entfernen und abschalten. Diese Seite zeigt dir, wie gelerntes Memory funktioniert und wie du es mit der API änderst.
Gelerntes Memory gehört zu einer Session. Es ist Teil des Verlaufs der Session. Darum nimmt ein Fork eine Kopie davon mit. Andere Sessions sehen es nicht.
Jeder Agent hat außerdem ein Langzeit-Memory über alle seine Sessions. Siehe Agent Memory.
Memory lesen
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \ https://api.example.com/v1/sessions/$SESSION/memory{ "entries": { "budget": { "key": "budget", "content": "The trip budget is 1500 EUR.", "kind": "fact", "sources": ["i-02"], "updatedAt": 1792486800000, "status": "active" } }, "processed": ["i-01", "i-02"], "settings": { "use": true, "generate": false }, "overrides": { "generate": false }}| Feld | Bedeutung |
|---|---|
key |
Ein fester Name für den Fakt. Ein Key enthält einen Fakt. |
content |
Der Fakt als normaler Text. |
kind |
fact, decision, preference, procedure oder hypothesis. |
sources |
Die IDs der Items, die den Fakt stützen. |
status |
active, oder retracted, wenn der Fakt entfernt wurde. |
processed |
Die Items, die OpenBot für das Memory schon gelesen hat. |
settings |
Die Schalter, die für diese Session gelten. Siehe unten. |
overrides |
Die Schalter, die diese Session selbst setzt. |
Schalter
Zwei Schalter steuern das Memory:
use: OpenBot fügt die aktiven Fakten zu den Anweisungen des Modells hinzu.generate: OpenBot lernt nach jedem Turn neue Fakten.
Die Organization setzt für jeden Schalter einen Standard, mit memory in ihren Einstellungen. Beide sind an, außer die Organization ändert sie.
Eine Session kann jeden Schalter mit Configure überschreiben. Ein Schalter, den die Session nicht setzt, folgt dem Standard der Organization.
settings zeigt das Ergebnis, und overrides zeigt, was die Session gesetzt hat. Ein Fork behält die Überschreibungen seiner Quell-Session.
Wie OpenBot das Memory nutzt
In einem Turn
Wenn use an ist, fügt OpenBot die aktiven Fakten zu den Anweisungen des Modells hinzu, wenn der Turn läuft. Der Text sagt dem Modell: Memory ist ein Beleg aus der Vergangenheit, und aktuelle Anweisungen gewinnen.
Zurückgezogene Fakten werden nicht geschickt.
Der Memory-Text hat eine Grenze von 8000 Zeichen. Die neuesten Fakten kommen zuerst. OpenBot hört vor dem ersten Fakt auf, der nicht mehr passt. So fallen ältere Fakten weg. Ein Fakt wird nie in der Mitte abgeschnitten.
Um die Grenze zu ändern, gib auf dem Server deine eigene Policy an: sessions.memory.policy: MemoryRules.make({ maxLength: 4000 }).
Nach einem Turn
Wenn ein Turn fertig ist, konsolidiert OpenBot das Memory. Konsolidieren heißt: die neuen Items lesen und die Liste der Fakten aktualisieren. Das passiert auch, wenn ein Turn nach einer Freigabe fertig wird. OpenBot bittet das Modell des Turn, Fakten zu finden, die es wert sind, behalten zu werden. Das Modell muss für jede Änderung die Quell-Items nennen. OpenBot wendet die Änderungen auf das neueste Memory an. So bleibt eine Änderung erhalten, die du machst, während das Modell arbeitet. Ein Turn, der nur eine Aktion einer App ausführt, ändert das Memory nicht, weil darin kein Modell läuft.
OpenBot prüft diese Regeln für jede Änderung:
- OpenBot liest nur Items, die es noch nicht verarbeitet hat.
- Jede Änderung muss mindestens eines dieser Items als Quelle nennen.
- Eine Änderung pro Key. Ein zurückgezogener Fakt bleibt zurückgezogen. Nur ein direktes Remember kann ihn zurückholen.
OpenBot sagt dem Modell außerdem: Nutze denselben Key für denselben Fakt. Zähle nur klare Aussagen des Nutzers als Vorlieben. Behalte nie Passwörter, Schlüssel oder Links, die Zugang geben.
Wenn das Modell fehlschlägt, wird der Turn trotzdem fertig. OpenBot speichert den Fehler und versucht es beim nächsten Turn noch einmal.
Schalte generate aus, um diesen Schritt zu stoppen.
Memory ändern
Alle Änderungen nutzen eine Route: POST /v1/sessions/:sessionId/memory.
{ "expected": "v-7d21", "revision": 5, "command": { "_tag": "Remember", "key": "budget", "content": "The trip budget is 1500 EUR.", "kind": "fact" }}| Feld | Bedeutung |
|---|---|
expected |
Der Kopf der Timeline, den du zuletzt gesehen hast: session.head aus der Session-Ansicht. |
revision |
Die Revision der Session, die du zuletzt gesehen hast: session.revision. |
command |
Was passieren soll. Siehe die Befehle unten. |
Wenn sich die Session oder ihr Verlauf geändert hat, seit du sie gelesen hast, gibt OpenBot 409 mit SessionConflict zurück. Lies die Session noch einmal und versuche es erneut.
Bei Erfolg gibt OpenBot die neue Ansicht der Session zurück. Sie hat eine neue session.revision. Remember und Forget erzeugen auch einen neuen session.head.
Befehle
_tag |
Felder | Was er tut |
|---|---|---|
Remember |
key, content, kind |
Fügt einen Fakt hinzu oder ersetzt den Fakt mit diesem Key. Er macht den Fakt aktiv. |
Forget |
key |
Markiert den Fakt als zurückgezogen. Ein unbekannter Key gibt 409 zurück. |
Configure |
use, generate (beide optional) |
Setzt die Schalter dieser Session. Siehe unten. |
Refresh |
keine | Konsolidiert jetzt, mit dem Modell der Session. |
Für jedes Feld von Configure gilt:
trueoderfalsesetzt den Schalter für diese Session.nullentfernt die Einstellung. Der Schalter folgt dann dem Standard der Organization.- Ein fehlendes Feld lässt den Schalter, wie er ist.
Configure ändert den Verlauf nicht. Darum bleibt session.head gleich.
Remember und Forget fügen auch ein kleines Item zum Verlauf hinzu, das deine Änderung festhält. Dieses Item wird die Quelle der Änderung.
Beispiele
Einen Fakt vergessen:
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"expected":"v-8e02","revision":6,"command":{"_tag":"Forget","key":"budget"}}' \ https://api.example.com/v1/sessions/$SESSION/memoryDie Fakten weiter nutzen, aber keine neuen mehr lernen:
{ "expected": "v-9f13", "revision": 7, "command": { "_tag": "Configure", "generate": false }}Beim Lernen wieder dem Standard der Organization folgen:
{ "expected": "v-9f13", "revision": 8, "command": { "_tag": "Configure", "generate": null }}Jetzt aus dem Verlauf lernen:
{ "expected": "v-9f13", "revision": 9, "command": { "_tag": "Refresh" } }Alle Felder findest du in der Sessions-Referenz.
Agent Memory
Agent Memory ist, was ein Agent über viele Sessions lernt. Es behält nur dauerhafte Erfahrung:
| Art | Beispiel |
|---|---|
procedure |
“Führe die Tests aus, bevor du meldest, dass die Arbeit fertig ist.” |
preference |
“Ana mag kurze Antworten mit einer Liste der Änderungen.” |
decision |
“Das Team nutzt Effect für alle neuen Dienste.” |
Fakten, die nur für eine Aufgabe wichtig sind, bleiben im Memory der Session.
Wie es lernt
Wenn ein Turn des Agent fertig ist und seine Queue leer ist, fragt OpenBot das Agent-Memory-Model, welche dauerhafte Erfahrung es behalten soll. Dieses Model ist agentMemoryModel in den Einstellungen der Organization. Es hat keinen Standardwert. Wenn es null ist, lernen Agents nichts. Um dieses Lernen zu stoppen, setze dort agentMemory auf false. Prüf-Sessions lehren nichts. Eine Session, deren Schalter generate aus ist, lehrt ihren Agent auch nichts.
- Jeder Eintrag nennt seine Quellen: IDs von Session und Item.
- Tool-Ergebnisse von Apps sind Daten von außen. Ein Eintrag, den nur Ergebnisse von Apps stützen, wird nie behalten.
- Der Agent weiß immer, mit welcher Person er arbeitet. Das Memory-Modell weiß es auch. So können Einträge sagen, wer was gesagt hat.
- Zurückgezogene Einträge bleiben zurückgezogen. Nur eine Person kann einen zurückholen.
Agent Memory folgt keiner Timeline. Ein Fork ändert es nie, und der Weg zurück zu einer alten Version macht es nicht rückgängig. Um einen Eintrag zu entfernen, vergiss ihn.
OpenBot fügt die aktiven Einträge zu den Anweisungen jedes Turn des Agent hinzu, die neuesten zuerst, bis zu 8000 Zeichen. Der Text sagt, dass aktuelle Anweisungen gegen das Memory gewinnen.
Geteilte Agents
Ein geteilter Agent hat ein Memory für jeden Member, der ihn nutzt. Der Agent entscheidet, was er teilt: Er bekommt in jedem Turn feste Regeln zur Privatsphäre. Was er von einer Person gelernt hat, kann privat sein. Darum sagt er einer anderen Person nur, was klar geteilte Arbeit ist.
Lesen und ändern
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \ https://api.example.com/v1/agents/$AGENT/memory{ "entries": { "tests-first": { "key": "tests-first", "content": "Run the tests before you report that work is done.", "kind": "procedure", "sources": [{ "session": "c81d…", "item": "i-12" }], "updatedAt": 1792486800000, "status": "active" } }, "version": 4}Ändere es mit einem Befehl Remember oder Forget. expected ist die aktuelle version:
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"expected":4,"command":{"_tag":"Forget","key":"tests-first"}}' \ https://api.example.com/v1/agents/$AGENT/memoryGET /v1/agents/:agentId/memory/log listet jede Änderung mit ihrer version, der Zeit, dem Auslöser (consolidation, person oder promotion) und den geänderten Keys.
Wenn du oder ein Agent einen Session Agent befördert, werden die dauerhaften Einträge seines Session-Memory zu seinem Agent Memory.