Speicher und Schema
Auf dieser Seite werden die Core-Speicherabstraktionen und Schemakontrollen angezeigt, die vom Oracle Agent-Speicher-SDK verwendet werden.
Shop-API
Schreibsemantik speichern
Beim Speichern von Schreibvorgängen wird eine klare Trennung zwischen dem Text, den eine Anwendung speichert, und der Payload, die der Speicher zum Abrufen verwendet, beibehalten. Die meisten Anwendungen können die APIs auf Speicherebene und Thread-Ebene verwenden und den Speicher die benötigten Suchzeilen für den Vektor-, Schlüsselwort- oder Hybridabruf vorbereiten lassen. Die Speicher-APIs der unteren Ebene stellen index_texts, index_text, embeddings und embedding für erweiterte Integrationen bereit, die bereits wissen, welcher Text oder welche Vektoren zum Abrufen verwendet werden sollen.
Denken Sie an jedes Schreiben als zwei verwandte Stücke:
contentsinadd()undcontentinupdate()steuern den gespeicherten Datensatzinhalt, der vonget(),list()und Suchergebnissen zurückgegeben wird.index_textsinadd()undindex_textinupdate()steuern den Text, der in die Abrufzeilen des Speichers geschrieben wird. Die Suche verwendet diese Zeilen und gibt dann die ursprünglichen logischen Datensätze zurück.
update() akzeptiert auch text als veralteten Kompatibilitätsparameter. Verwenden Sie content in neuem Code. Wenn Sie text angeben, wird eine Warnung wegen einer Einstellung ausgegeben.
Wenn keine Suchüberschreibung oder explizite Einbettung angegeben wird, verwendet der Speicher den aufgelösten gespeicherten Text als Abruftext. Bei der Konfiguration von Chunking wird nicht leerer Text vom Speicher als Chunking-Block verarbeitet. Leerer Text speichert den Datensatztext, liefert jedoch keinen Abruftext.
In der folgenden Tabelle wird beschrieben, wie Abruftext ausgewählt wird, bevor explizite Vektor-Payloads berücksichtigt werden.
Abruf-Payloads auf Filialebene
| Eingabe | add() |
update() |
|---|---|---|
index_texts oder index_text ausgelassen |
Jeder Datensatz verwendet den aufgelösten contents-Wert für den Abruf. |
Für den Abruf wird ein Ersatzwert content verwendet. Wenn auch content ausgelassen wird, verwenden Nur-Einbetten-Aktualisierungen die vorhandenen Abruftextzeilen des Datensatzes wieder. |
Zeichenfolge index_texts-Eintrag oder Zeichenfolge index_text |
Die Zeichenfolge ersetzt den Abruftext für diesen Datensatz. Der Speicher kann einen Chunk-Vorgang ausführen, bevor Abrufzeilen geschrieben werden. | Die Zeichenfolge ersetzt den Abruftext für diesen Datensatz. Der Speicher kann einen Chunk-Vorgang ausführen, bevor Abrufzeilen geschrieben werden. |
list[str] index_texts-Eintrag oder list[str] index_text |
Die Liste wird als Chunks im Besitz des Anrufers behandelt. Jede nicht leere Zeichenfolge wird als eine Abrufzeile geschrieben, und der Speicher blockiert sie nicht erneut. | Die Liste wird als Chunks im Besitz des Anrufers behandelt. Jede nicht leere Zeichenfolge wird als eine Abrufzeile geschrieben, und der Speicher blockiert sie nicht erneut. |
None index_texts-Eintrag oder index_text=None |
None in der äußeren Liste index_texts bedeutet "den gespeicherten Inhalt für diesen Datensatz verwenden". |
index_text=None löscht die Abrufzeilen, während der gespeicherte Inhalt unverändert bleibt, es sei denn, content wird ebenfalls angegeben. |
| Leere Zeichenfolge oder leere Chunk-Liste | Speichert den Datensatzinhalt und stellt keinen Abruftext für diesen Datensatz bereit. | Aktualisiert den Datensatzinhalt, wenn content angegeben wird, und löscht den Abruftext für diesen Datensatz. |
Explizite Einbettungen sind optional. Wenn sie ausgelassen werden, leitet der Speicher lokale Vektoren aus dem Abruftext ab, wenn der lokale Vektorspeicher konfiguriert ist. Schlüsselwort- oder Hybridspeicher können auch Nur-Text-Abrufzeilen verwenden. Wenn explizite embeddings- oder embedding-Werte angegeben werden, schreibt der Speicher diese Vektoren direkt und ruft den Embedder für diese Vektoren nicht auf.
In add() verhält sich embeddings=None wie das Weglassen von embeddings. In update() ist embedding=None explizit: Der Speicher speichert oder schreibt den Abruftext gemäß content und index_text neu, speichert diese Zeilen jedoch ohne lokale Vektoren. Wenn content und index_text beide ausgelassen werden, werden Vektoren aus den vorhandenen Abrufzeilen gelöscht.
Die Vektorform gibt dem Speicher an, wie viel Chunk-Eigentum der Anrufer nimmt:
- Ein Vektor bedeutet einen Vektor für den gesamten Abruftext. Der Speicher teilt diesen Text nicht für den expliziten Vektor auf. Wenn dieser Abruftext leer ist, kann der Vektor ohne Begleittext gespeichert werden.
- Mehrere Vektoren bedeuten einen Vektor pro aufrufendem Chunk. Geben Sie übereinstimmende
index_texts- oderindex_text-Chunk-Listen an, oder verwenden Sie eine Nur-Einbettung-update(), mit der die vorhandenen Abruftextzeilen des Datensatzes wiederverwendet werden. - Die Vektoranzahl muss mit der Chunkanzahl übereinstimmen, und alle expliziten Vektoren in einem
add()-Aufruf müssen dieselbe Dimension aufweisen. - Eine leere Vektor-Payload pro Datensatz ist nur zulässig, wenn keine Abruftextzeilen vorhanden sind, die mit ihr ausgerichtet werden können.
Einige Kombinationen werden abgelehnt, sodass gespeicherter Text, Abruftext und Vektoren nicht auseinanderdriften. Durch die Übergabe von content=None werden gespeicherte Inhalte und Abrufzeilen gelöscht, sodass sie nicht mit Werten kombiniert werden können, die nicht Null sind: index_text oder embedding; Akteurprofildatensätze unterstützen content=None nicht. Der veraltete Parameter text weist dasselbe Verhalten auf. Die Übergabe von index_text=None in update() bedeutet "Abrufzeilen löschen", sodass nicht leere explizite Einbettungen im selben Aufruf nicht zulässig sind. Mehrere explizite Vektoren erfordern expliziten Chunk-Text, es sei denn, die Aktualisierung wird nur eingebettet, und die vorhandenen Abrufzeilen stellen bereits den Chunk-Text bereit.
Klasse oracleagentmemory.core.OracleMemoryStore
Basen: IMemoryStore
Gemeinsame Speicherschnittstelle, die von OracleAgentMemory verwendet wird.
Eine Store-Implementierung ist dafür verantwortlich, Text-Records zu persistieren und Ähnlichkeitssuchen durchzuführen. Sowohl synchrone als auch asynchrone Einstiegspunkte werden definiert, sodass APIs auf höherer Ebene übereinstimmende Synchronisierungs-/asynchrone Oberflächen bereitstellen können, ohne dass eine speicherspezifische Logik dupliziert wird.
Methode add
Datensätze zur Filiale hinzufügen
- Parameter:
- contents
Sequence[str | Mapping[str, object] | Sequence[MessageContent] | bytes | None]: Schreibgeschützte Sequenz von Datensatz-Payloads. Nachrichteneinträge können geordneteMessageContent-Teile enthalten, während Thread-Zusammenfassungseinträge Mappings sein können. Textwerte werden auch für die semantische Indexierung verwendet, es sei denn,index_textsoderembeddingssind angegeben. Wenn ein TextwertNoneist, können Implementierungen aufmetadata["content"]zurückgreifen. Explizite leere Zeichenfolgen werden beibehalten. - record_type
str: Zu erstellender logischer Datensatztyp, z.B."message","memory","guideline","fact","preference","user_profile","agent_profile"oder"thread_summary". - index_texts
list[str | list[str] | None]– Optionale alternative Payloads, die nur für die semantische Indexierung verwendet werden. Wenn angegeben, muss die äußere Liste mit den Texteingaben übereinstimmen. Jeder Eintrag kann eine Zeichenfolge sein, die der Speicher intern chunkieren kann, oder eine Liste von nicht leeren Zeichenfolgen, die der Speicher als Chunks behandelt, die sich im Besitz des Aufrufers befinden, und nicht erneut aufteilen darf. - Einbettungen
list[list[float] | ndarray | list[list[float] | ndarray]]– Optionale vorab berechnete Einbettungsvektoren, die an den Texteingaben ausgerichtet sind. Jeder Datensatzeintrag kann entweder ein Einbettungsvektor oder eine Liste von Chunk-Einbettungsvektoren für diesen Datensatz sein. Wenn angegeben, muss der Speicher diese Vektoren direkt verwenden, anstatt dessen Einbettung aufzurufen. Mehrere Vektoren für einen Datensatz erfordern übereinstimmendeindex_texts-Chunk-Listen, sodass Text- und Vektor-Chunk-Grenzen explizit sind. Falls nicht angegeben, leiten Speicher in der Regel den semantischen Status von ihrem konfigurierten Einbettungsmodus ab. Implementierungsspezifische textbezogene Indexierungsmodi können jedoch auch Schreibvorgänge ohne Text zulassen. - record_ids
str | None | list[str | None]– Optionale durch Aufrufer sichtbare IDs. Eine einzelne Zeichenfolge kann für Ein-Datensatz-Einfügungen verwendet werden, während Listen mit den Texteingaben übereinstimmen müssen. Generierte Kennungen werden zurückgegeben, wenn dieses Feld ausgelassen wird. - thread_ids
str | None | list[str | None]– Optionale Thread-IDs, die den eingefügten Datensätzen zugeordnet sind. Skalare Werte können über ausgerichtete Texteingaben übertragen werden. - user_ids
str | None | list[str | None]– Optionale Benutzer-IDs, die den eingefügten Datensätzen zugeordnet sind. Skalare Werte können über ausgerichtete Texteingaben übertragen werden. - agent_ids
str | None | list[str | None]– Optionale Agent-IDs, die den eingefügten Datensätzen zugeordnet sind. Skalare Werte können über ausgerichtete Texteingaben übertragen werden. - Rollen
str | None | list[str | None]– Optionale Nachrichtenrollen, wie"user"oder"assistant". Skalare Werte können über ausgerichtete Texteingaben übertragen werden. Wird nur verwendet, wenn record_type"message"ist. - Zeitstempel
str | None | list[str | None]– Optionale Zeitstempel zum Speichern mit den Datensätzen. Jeder Zeitstempel stellt ein Ereignis dar, das dem Datensatz zugeordnet ist. Skalare Werte können über ausgerichtete Texteingaben übertragen werden. In ausgelassenen oderNone-Einträgen wird einNULL-Ereigniszeitstempel gespeichert. Lesevorgänge verwenden die Erstellungszeit des Datensatzes als effektiven Zeitstempel. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Optionale Metadatenwörterbücher, die vom Aufrufer bereitgestellt werden. Metadaten können"content"als Fallback-Quelle enthalten, wenn ein Textwert ausgelassen und nicht explizit auf""gesetzt wird. Wennrecord_type="image"verwendet wird, erfordert jeder Image-Schreibvorgang"image_mime_type"mit einem der Werte"image/png","image/jpeg"oder"image/webp". Der Speicher verwendet dieses Feld, um das Bild zu speichern, gibt es jedoch nicht als Teil der Metadaten des Datensatzes zurück. - ttl_days
int | None | list[int | None]: Optionale Gültigkeitsdauer in Tagen für Datensätze, die den Ablauf unterstützen. Lassen Sie dieses Argument aus, um den Speicherstandard zu verwenden. Übergeben SieNonefür Datensätze, die nicht ablaufen dürfen. Skalare Werte können über ausgerichtete Texteingaben übertragen werden. - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor]– Optionaler Time-to-Live-Anker. Verwenden SieTimeToLiveAnchor.CREATED_AT, um relativ zur gespeicherten Erstellungszeit abzulaufen, oderTimeToLiveAnchor.TIMESTAMP, um relativ zum Ereigniszeitstempel jedes Datensatzes abzulaufen. Wenn diese Option ausgelassen wird, verwenden ImplementierungenTimeToLiveAnchor.CREATED_AT. - Status
RecordStatus | list[RecordStatus]: Optionaler Lebenszyklusstatus oder Status für Datensätze. Lassen Sie dies aus, umRecordStatus.VALIDzu speichern. - **store_kwargs (Beliebig) – Implementierungsspezifische Schreiboptionen, die an den konkreten Speicher weitergeleitet werden.
- contents
- Rückgabetyp: list[str]
Hinweise
Verwenden Sie add_batches(), wenn der Aufrufer bereits mindestens ein PendingRecordBatch-Objekt enthält.
- Rücksendungen: IDs für die eingefügten Datensätze in derselben logischen Reihenfolge wie die Eingabe.
- Rückgabetyp: Liste[str]
- Parameter:
- Inhalte
Sequence[str | Mapping[str, object] | Sequence[MessageContent] | bytes | None] - record_type
str - index_texts
list[str | list[str] | None] - Einbettungen
list[list[float] | ndarray | list[list[float] | ndarray]] - record_ids
str | None | list[str | None] - thread_ids
str | None | list[str | None] - user_ids
str | None | list[str | None] - agent_ids
str | None | list[str | None] - Rollen
str | None | list[str | None] - Zeitstempel
str | None | list[str | None] - Metadaten
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - Status
RecordStatus | list[RecordStatus] - store_kwargs
Any
- Inhalte
Methode add_agent (Übung)
Agent-Profildatensatz hinzufügen.
- Parameter:
- agent_id
str: Stabile ID für das Agent-Profil. - Informationen
str– Freiformtext, der den Agent beschreibt. - metadata
dict[str, Any] | None– Optionale Metadatenzuordnung, die in der Agent-Profilzeile gespeichert ist.
- agent_id
- Retouren: ID des erstellten Agent-Profildatensatzes.
- Rückgabetyp: str
Methode add_agent_async (asynchron)
Fügen Sie asynchron einen Agent-Profildatensatz hinzu.
- Parameter:
- agent_id
str: Stabile ID für das Agent-Profil. - Informationen
str– Freiformtext, der den Agent beschreibt. - metadata
dict[str, Any] | None– Optionale Metadatenzuordnung, die in der Agent-Profilzeile gespeichert ist.
- agent_id
- Retouren: ID des erstellten Agent-Profildatensatzes.
- Rückgabetyp: str
Methode add_async (asynchron)
Fügen Sie dem Speicher asynchron zeilenorientierte Datensätze hinzu.
Akzeptiert dieselben Argumente und gibt dieselben IDs wie add() zurück.
- Parameter:
- Inhalte
Sequence[str | Mapping[str, object] | Sequence[MessageContent] | bytes | None] - record_type
str - index_texts
list[str | list[str] | None] - Einbettungen
list[list[float] | ndarray | list[list[float] | ndarray]] - record_ids
str | None | list[str | None] - thread_ids
str | None | list[str | None] - user_ids
str | None | list[str | None] - agent_ids
str | None | list[str | None] - Rollen
str | None | list[str | None] - Zeitstempel
str | None | list[str | None] - Metadaten
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - Status
RecordStatus | list[RecordStatus] - store_kwargs
Any
- Inhalte
- Rückgabetyp: list[str]
Methode add_batches
Fügen Sie dem Speicher vom Aufrufer vorbereitete logische Batches hinzu.
- Parameter:
- Batches
list[PendingRecordBatch]– Vollständig vorbereitete logische Batches zum Persistieren. Jeder Batch muss eigene Felder pro Datensatz wierecord_type, Geltungsbereichswerte, Rollen, Zeitstempel und Metadaten enthalten. - **store_kwargs (Beliebig) – Implementierungsspezifische Schreiboptionen, die an den konkreten Speicher weitergeleitet werden.
- Batches
- Rückgaben: IDs für die eingefügten Datensätze in derselben logischen Reihenfolge wie die Eingabebatches und -zeilen.
- Rückgabetyp: Liste[str]
Beispiele
store.add_batches(
[
PendingRecordBatch(
contents=["pizza batch"],
record_type="memory",
record_ids="mem-batch-docs",
)
]
)
['mem-batch-docs']
Methode add_batches_async (asynchron)
Fügen Sie dem Speicher asynchron vom Aufrufer vorbereitete logische Batches hinzu.
Akzeptiert dieselben Argumente und gibt dieselben IDs wie add_batches() zurück.
- Parameter:
- Batches
list[PendingRecordBatch] - store_kwargs
Any
- Batches
- Rückgabetyp: list[str]
Methode add_relations (Übung)
Speichern Sie eine oder mehrere gerichtete Beziehungen.
Skalare Werte werden über den Quelldatensatzbatch übertragen. Listenwerte müssen dieselbe Länge haben. Für ein Endpunktpaar kann nur eine Ausrichtung gespeichert werden. Verwenden Sie opposite_relation_types, um die umgekehrte Ansicht zu beschreiben, anstatt eine zweite umgekehrte Beziehung hinzuzufügen. Implementierungen können einschränken, welche Endpunktdatensatztypen und Beziehungslabels sie beibehalten.
- Parameter:
- source_record_ids
str | list[str]: Bezeichner oder Bezeichner von Datensätzen am Quellende jeder gerichteten Beziehung. - source_record_types
str | list[str]: Datensatztyp oder -typen fürsource_record_ids. Geben Sie einen Wert für alle Quellen oder einen Wert für jede Beziehung an. - target_record_ids
str | list[str]: Bezeichner oder Bezeichner von Datensätzen am Zielende jeder gerichteten Beziehung. - target_record_types
str | list[str]: Datensatztyp oder -typen fürtarget_record_ids. Geben Sie einen Wert für alle Ziele oder einen Wert für jede Beziehung an. - relation_types
str | list[str]: Label oder Labels für gerichtete Beziehungen. Geben Sie einen Wert für alle Beziehungen oder einen Wert für jede Beziehung an. - opposite_relation_types
str | list[str]– Optionale Beschriftungen oder Labels für die umgekehrte Ansicht jeder Beziehung. Bei integrierten Speicherbeziehungstypen verwendet das Weglassen das vordefinierte Reverse Label. Bei benutzerdefinierten Beziehungstypen verwendet das Auslassen dasselbe Label in beiden Richtungen. - relation_ids
str | None | list[str | None]– Optionale stabile IDs oder IDs. Lassen Sie diese Option aus, damit der Speicher IDs generiert. - Zeitstempel
str | None | list[str | None]– Optionaler Zeitstempel oder Zeitstempel zum Speichern in den Beziehungen. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Optionale Metadatenobjekte, die in den Beziehungen gespeichert werden sollen.
- source_record_ids
- Rücksendungen: Beziehungs-IDs in der eingegebenen Reihenfolge.
- Rückgabetyp: list[str]
Beispiele
store.add_relations(
"new", "memory", "old", "memory", "supersedes"
)
['relation-id']
Methode add_relations_async (asynchron)
Speichern Sie eine oder mehrere gerichtete Beziehungen asynchron.
Skalare Werte werden über den Quelldatensatzbatch übertragen. Listenwerte müssen dieselbe Länge haben. Für ein Endpunktpaar kann nur eine Ausrichtung gespeichert werden. Verwenden Sie opposite_relation_types, um die umgekehrte Ansicht zu beschreiben, anstatt eine zweite umgekehrte Beziehung hinzuzufügen.
- Parameter:
- source_record_ids
str | list[str]: Bezeichner oder Bezeichner von Datensätzen am Quellende jeder gerichteten Beziehung. - source_record_types
str | list[str]: Datensatztyp oder -typen fürsource_record_ids. Geben Sie einen Wert für alle Quellen oder einen Wert für jede Beziehung an. - target_record_ids
str | list[str]: Bezeichner oder Bezeichner von Datensätzen am Zielende jeder gerichteten Beziehung. - target_record_types
str | list[str]: Datensatztyp oder -typen fürtarget_record_ids. Geben Sie einen Wert für alle Ziele oder einen Wert für jede Beziehung an. - relation_types
str | list[str]: Label oder Labels für gerichtete Beziehungen. Geben Sie einen Wert für alle Beziehungen oder einen Wert für jede Beziehung an. - opposite_relation_types
str | list[str]– Optionale Beschriftungen oder Labels für die umgekehrte Ansicht jeder Beziehung. Bei integrierten Speicherbeziehungstypen verwendet das Weglassen das vordefinierte Reverse Label. Bei benutzerdefinierten Beziehungstypen verwendet das Auslassen dasselbe Label in beiden Richtungen. - relation_ids
str | None | list[str | None]– Optionale stabile IDs oder IDs. Lassen Sie diese Option aus, damit der Speicher IDs generiert. - Zeitstempel
str | None | list[str | None]– Optionaler Zeitstempel oder Zeitstempel zum Speichern in den Beziehungen. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Optionale Metadatenobjekte, die in den Beziehungen gespeichert werden sollen.
- source_record_ids
- Rücksendungen: Beziehungs-IDs in der eingegebenen Reihenfolge.
- Rückgabetyp: list[str]
Beispiele
await store.add_relations_async(
"new", "memory", "old", "memory", "supersedes"
)
['relation-id']
Methode add_user (Übung)
Benutzerprofildatensatz hinzufügen
- Parameter:
- user_id
str: Stabile ID für das Benutzerprofil. DB-gesicherte Implementierungen können diesen Wert aus einem angehängten Endbenutzersicherheitskontext ableiten, wenn er ausgelassen wird. - Informationen
str– Erforderlicher Freiformtext, der den Benutzer beschreibt. - metadata
dict[str, Any] | None– Optionale Metadatenzuordnung, die in der Benutzerprofilzeile gespeichert ist.
- user_id
- Rücksendungen: ID des erstellten Benutzerprofildatensatzes.
- Rückgabetyp: str
Methode add_user_async (asynchron)
Fügen Sie asynchron einen Benutzerprofildatensatz hinzu.
- Parameter:
- user_id
str: Stabile ID für das Benutzerprofil. - Informationen
str– Freiformtext, der den Benutzer beschreibt. - metadata
dict[str, Any] | None– Optionale Metadatenzuordnung, die in der Benutzerprofilzeile gespeichert ist.
- user_id
- Rücksendungen: ID des erstellten Benutzerprofildatensatzes.
- Rückgabetyp: str
Methode delete (Übung)
Löschen Sie einen gespeicherten Datensatz nach ID.
- Parameter:
- record_type
str: Logischer Typ des zu entfernenden Datensatzes. - record_id
str: ID des zu entfernenden Datensatzes. - cascade
bool– WennTrue, wenden Sie jedes vom Speicher unterstützte kaskadierende Löschverhalten für die angeforderten Ziele der obersten Ebene innerhalb desselben Löschvorgangs an. Dies wird hauptsächlich für Ziele wie Schauspielerprofile verwendet, die über weitere Datensätze mit Geltungsbereich verfügen. Beispiel: Eine Benutzerprofil- oder Agent-Profilkaskade kann eigene Threads selbst löschen, Nachrichten mit Thread-Geltungsbereich und speicherähnliche Datensätze, die mit diesen Threads entfernt wurden, sowie alle verbleibenden direkt Akteur-Geltungsdatensätze, wie Nachrichten, Speicher, Richtlinien, Fakten oder Voreinstellungen. Bei Löschvorgängen mit Akteurprofilen wird diese Bereichsbereinigung möglicherweise noch ausgeführt, wenn die entsprechende Profilzeile bereits fehlt.
- record_type
- Rücksendungen: Anzahl der angeforderten Datensätze der obersten Ebene, die gelöscht wurden, in der Regel
0oder1. Kaskadierte untergeordnete Zeilen werden nicht separat gezählt. Daher kann dies immer noch0sein, wenn ein fehlendes Akteurprofil eine bereichsbezogene Bereinigung auslöst. - Rückgabetyp: int
Methode delete_async (asynchron)
Löschen Sie asynchron einen gespeicherten Datensatz nach ID.
- Parameter:
- record_type
str: Logischer Typ des zu entfernenden Datensatzes. - record_id
str: ID des zu entfernenden Datensatzes. - cascade
bool– WennTrue, wenden Sie jedes vom Speicher unterstützte kaskadierende Löschverhalten für die angeforderten Ziele der obersten Ebene innerhalb desselben Löschvorgangs an. Dies wird hauptsächlich für Ziele wie Schauspielerprofile verwendet, die über weitere Datensätze mit Geltungsbereich verfügen. Beispiel: Eine Benutzerprofil- oder Agent-Profilkaskade kann eigene Threads selbst löschen, Nachrichten mit Thread-Geltungsbereich und speicherähnliche Datensätze, die mit diesen Threads entfernt wurden, sowie alle verbleibenden direkt Akteur-Geltungsdatensätze, wie Nachrichten, Speicher, Richtlinien, Fakten oder Voreinstellungen. Bei Löschvorgängen mit Akteurprofilen wird diese Bereichsbereinigung möglicherweise noch ausgeführt, wenn die entsprechende Profilzeile bereits fehlt.
- record_type
- Rücksendungen: Anzahl der angeforderten Datensätze der obersten Ebene, die gelöscht wurden, in der Regel
0oder1. Kaskadierte untergeordnete Zeilen werden nicht separat gezählt. Daher kann dies immer noch0sein, wenn ein fehlendes Akteurprofil eine bereichsbezogene Bereinigung auslöst. - Rückgabetyp: int
Methode delete_relations (Übung)
Beziehungen nach ID löschen.
Der Lebenszyklusstatus wird aus den verbleibenden Beziehungen neu berechnet.
- Parameter: relation_ids
str | list[str]– ID oder IDs der zu löschenden Beziehungen. - Rücksendungen: Anzahl gelöschter Beziehungen.
- Rückgabetyp: int
Beispiele
store.delete_relations("relation-id")
1
Methode delete_relations_async (asynchron)
Relationen nach ID asynchron löschen.
Der Lebenszyklusstatus wird aus den verbleibenden Beziehungen neu berechnet.
- Parameter: relation_ids
str | list[str]– ID oder IDs der zu löschenden Beziehungen. - Rücksendungen: Anzahl gelöschter Beziehungen.
- Rückgabetyp: int
Beispiele
await store.delete_relations_async("relation-id")
1
Methode delete_thread (Übung)
Thread und die zugehörigen gespeicherten Daten löschen
- Parameter: thread_id
str– ID des zu entfernenden Threads. - Rückgaben: Anzahl der gelöschten Threaddatensätze, in der Regel
0oder1. - Rückgabetyp: int
Hinweise
Dies ist der Vorgang auf Speicherebene zum Entfernen eines Threads und der vom Speicher verwalteten Datensätze mit Threadbereich. Threadlöschung bevorzugen, wenn Aufbewahrungsanforderungen das Löschen von Quellnachrichten und abgeleiteten Speicherdaten mit Threadbereich erfordern, da Löschvorgänge auf Nachrichtenebene nicht bedeuten, dass separat persistente abgeleitete Datensätze entfernt werden.
Methode delete_thread_async (asynchron)
Löschen Sie asynchron einen Thread und die zugehörigen gespeicherten Daten.
- Parameter: thread_id
str– ID des zu entfernenden Threads. - Rückgaben: Anzahl der gelöschten Threaddatensätze, in der Regel
0oder1. - Rückgabetyp: int
Hinweise
Dies ist der Vorgang auf Speicherebene zum Entfernen eines Threads und der vom Speicher verwalteten Datensätze mit Threadbereich. Threadlöschung bevorzugen, wenn Aufbewahrungsanforderungen das Löschen von Quellnachrichten und abgeleiteten Speicherdaten mit Threadbereich erfordern, da Löschvorgänge auf Nachrichtenebene nicht bedeuten, dass separat persistente abgeleitete Datensätze entfernt werden.
Methode get (Übung)
Rufen Sie einen gespeicherten Datensatz nach Typ und ID ab.
- Parameter:
- record_type
str: Logischer Typ des abzurufenden Datensatzes, wie"thread","message","memory","guideline","fact","preference","user_profile","agent_profile"oder"image". - record_id
str: ID des abzurufenden Datensatzes. - include_bytes
bool– Gibt an, ob gespeicherte Imagebyte geladen werden sollen. Bei einem Meldungsdatensatz steuert dies, ob angehängte Bilder ihre Byte enthalten. Bei einem Bilddatensatz wird gesteuert, ob die eigenständigen Bildbytes geladen werden. Diese Option hat keine Auswirkungen auf andere Datensatztypen.
- record_type
- Rücksendungen: Der gespeicherte Datensatz, wenn er gefunden wird. Andernfalls wird
Noneverwendet. Ein"thread"-Lookup gibt einenThreadRecordmit Threadmetadaten, Laufzeitkonfiguration, Laufzeitstatus und dem Erstellungszeitstempel zurück, der aufgefüllt wird, wenn der Speicher persistente Threads unterstützt. - Rückgabetyp: Datensatz | Keine
Methode get_async (asynchron)
Einen gespeicherten Datensatz nach Typ und ID asynchron abrufen.
- Parameter:
- record_type
str: Logischer Typ des abzurufenden Datensatzes, wie"thread","message","memory","guideline","fact","preference","user_profile","agent_profile"oder"image". - record_id
str: ID des abzurufenden Datensatzes. - include_bytes
bool– Gibt an, ob gespeicherte Imagebyte geladen werden sollen. Bei einem Meldungsdatensatz steuert dies, ob angehängte Bilder ihre Byte enthalten. Bei einem Bilddatensatz wird gesteuert, ob die eigenständigen Bildbytes geladen werden. Diese Option hat keine Auswirkungen auf andere Datensatztypen.
- record_type
- Rücksendungen: Der gespeicherte Datensatz, wenn er gefunden wird. Andernfalls wird
Noneverwendet. Ein"thread"-Lookup gibt einenThreadRecordmit Threadmetadaten, Laufzeitkonfiguration, Laufzeitstatus und dem Erstellungszeitstempel zurück, der aufgefüllt wird, wenn der Speicher persistente Threads unterstützt. - Rückgabetyp: Datensatz | Keine
Methode get_relation (Übung)
Gibt eine Beziehung in der gespeicherten Quell-zu-Ziel-Ausrichtung zurück.
Geben Sie relation_id allein an, oder geben Sie ein vollständiges Source-to-Ziel-Endpunkt-Tupel an.
- Parameter:
- source_record_id
str: Quelldatensatz-ID. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - source_record_type
str: Quelldatensatztyp. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - target_record_id
str: ID des Zieldatensatzes. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - target_record_type
str- Zieldatensatztyp. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - relation_type
str: Label für gerichtete Beziehung. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - relation_id
str: Beziehungs-ID, die direkt abgeglichen werden soll. Geben Sie dieses Argument alleine an, anstatt es mit Endpunkt-Tupelfeldern zu kombinieren.
- source_record_id
- Rückgaben: Die übereinstimmende Beziehung oder
None, wenn sie nicht vorhanden ist. - Rückgabetyp: RecordRelation | Keine
Beispiele
store.get_relation(relation_id="relation-id")
RecordRelation(...)
store.get_relation(
"source-id", "memory", "target-id", "fact", "supports"
)
RecordRelation(...)
Methode get_relation_async (asynchron)
Rufen Sie asynchron eine Beziehung nach ID oder Endpunkttupel ab.
Geben Sie relation_id allein an, oder geben Sie ein vollständiges Source-to-Ziel-Endpunkt-Tupel an.
- Parameter:
- source_record_id
str: Quelldatensatz-ID. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - source_record_type
str: Quelldatensatztyp. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - target_record_id
str: ID des Zieldatensatzes. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - target_record_type
str- Zieldatensatztyp. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - relation_type
str: Label für gerichtete Beziehung. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - relation_id
str: Beziehungs-ID, die direkt abgeglichen werden soll. Geben Sie dieses Argument alleine an, anstatt es mit Endpunkt-Tupelfeldern zu kombinieren.
- source_record_id
- Rückgaben: Die übereinstimmende Beziehung oder
None, wenn sie nicht vorhanden ist. - Rückgabetyp: RecordRelation | Keine
Beispiele
await store.get_relation_async(relation_id="relation-id")
RecordRelation(...)
Methode list (Übung)
Listet gespeicherte Datensätze für einen Datensatztyp auf.
- Parameter:
- record_type
str– Zu aufzählender logischer Datensatztyp, wie"thread","message","memory","guideline","fact","preference","user_profile","agent_profile"oder"thread_summary"oder"image". - limit
int | None– Optionale maximale Anzahl der zuletzt zurückgegebenen Datensätze. Wenn diese Option ausgelassen wird, können Implementierungen einen sicheren oberen Grenzwert wieMAX_LIST_LIMITanwenden. Übergeben SieNone, um diese Memory Cap zu deaktivieren und jeden übereinstimmenden Datensatz zurückzugeben. - thread_id
str | None– Exakter Thread-Geltungsbereichsfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Datensätze zurückgegeben, derenthread_idNoneist. Nicht kopierte Datensatztypen ignorieren diesen Filter. Wennrecord_type"thread"ist, darfthread_idnicht festgelegt werden. Verwenden Sierecord_id, um einen bestimmten Thread auszuwählen. - user_id
str | None: Exakter Filter für den Benutzerumfang. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Datensätze zurückgegeben, derenuser_idNoneist. Nicht kopierte Datensatztypen ignorieren diesen Filter. - agent_id
str | None: Exakter Agent-Geltungsbereichsfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Datensätze zurückgegeben, derenagent_idNoneist. Nicht kopierte Datensatztypen ignorieren diesen Filter. -
metadata_filter
dict[str, Any] | None–Metadatenfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert auf
Nonegesetzt ist, werden nur Datensätze zurückgegeben, deren MetadatenNonesind. Wenn dies auf ein Diktat gesetzt ist, werden Einträge inmetadata_filtermit AND-Semantik kombiniert. Einträge, deren Wert kein Operatordictionary auf Feldebene ist, verwenden eine genaue Übereinstimmungssemantik: Der angeforderte Schlüssel muss in den gespeicherten Metadaten vorhanden sein. Verschachtelte Wörterbücher werden rekursiv abgeglichen. Skalare und Listenwerte werden durch exakte Gleichheit abgeglichen; Listenreihenfolge und -länge müssen ebenfalls übereinstimmen. Um die Arraymitgliedschaft zu testen, verwenden Sie ein Operatordictionary auf Feldebene, wie{"tags": {"$array_contains": "prod"}}. Ein Listenoperand für"$array_contains"bedeutet, dass alle aufgelisteten Werte vorhanden sein müssen."$array_contains_any"bedeutet, dass mindestens ein aufgelisteter Wert vorhanden sein muss. Verwenden Sie"$not", um einen anderen Ausdruck auf Feldebene in demselben Feld zu negieren, einschließlich eines Operator-Dictionarys oder eines Raw-Exact-Match-Wertes. Negierte Ausdrücke stimmen überein, wenn der positive Ausdruck fehlschlagen würde, einschließlich fehlender Felder; negierte Array-Mitgliedschaft stimmt auch mit Nicht-Array-Feldern überein. Beispiele:metadata_filter={"source": "slack"}für ein skalares Feld,metadata_filter={"review": {"status": "open"}}für ein verschachteltes Feld undmetadata_filter={"tags": ["prod", "urgent"]}für eine genaue Listenübereinstimmung. Kombinieren Sie Bedingungen, um sie alle zu benötigen:metadata_filter={ "source": "slack", "review": {"status": "open"}, "tags": ["prod", "urgent"], } - include_bytes
bool– Gibt an, ob Bilddatensätze oder Bilder, die an Meldungsdatensätze angehängt sind, ihre gespeicherten Byte enthalten. Wenn keine Angabe gemacht wird oderFalse, werden Bildbeschreibungen und Metadaten zurückgegeben, ohne Byte zu laden. Setzen Sie dies bei direkten Bildlisten nur mit einem exaktenrecord_id- und mindestens einem exakten Benutzer-, Agent- oder Threadbereichsfilter aufTrue. Diese Option hat keine Auswirkungen auf andere Datensatztypen. - record_id
str: Exakter Datensatz-ID-Filter. Wenn diese Option ausgelassen wird, werden Datensätze mit einer beliebigen ID zurückgegeben. Geltungsbereich und Metadatenfilter bleiben zusätzliche Constraints.
- record_type
- Rücksendungen: Datensätze, die im zurückgegebenen Fenster von "ältesten" auf "neueste" sortiert wurden.
- Rückgabetyp: Liste[Datensatz]
Methode list_async (asynchron)
Listet gespeicherte Datensätze für einen Datensatztyp asynchron auf.
- Parameter:
- record_type
str– Zu aufzählender logischer Datensatztyp, wie"thread","message","memory","guideline","fact","preference","user_profile","agent_profile"oder"image". - limit
int | None– Optionale maximale Anzahl der zuletzt zurückgegebenen Datensätze. Wenn diese Option ausgelassen wird, können Implementierungen einen sicheren oberen Grenzwert wieMAX_LIST_LIMITanwenden. Übergeben SieNone, um diese Memory Cap zu deaktivieren und jeden übereinstimmenden Datensatz zurückzugeben. - thread_id
str | None– Exakter Thread-Geltungsbereichsfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Datensätze zurückgegeben, derenthread_idNoneist. Nicht kopierte Datensatztypen ignorieren diesen Filter. Wennrecord_type"thread"ist, darfthread_idnicht festgelegt werden. Verwenden Sierecord_id, um einen bestimmten Thread auszuwählen. - user_id
str | None: Exakter Filter für den Benutzerumfang. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Datensätze zurückgegeben, derenuser_idNoneist. Nicht kopierte Datensatztypen ignorieren diesen Filter. - agent_id
str | None: Exakter Agent-Geltungsbereichsfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Datensätze zurückgegeben, derenagent_idNoneist. Nicht kopierte Datensatztypen ignorieren diesen Filter. -
metadata_filter
dict[str, Any] | None–Metadatenfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert auf
Nonegesetzt ist, werden nur Datensätze zurückgegeben, deren MetadatenNonesind. Wenn dies auf ein Diktat gesetzt ist, werden Einträge inmetadata_filtermit AND-Semantik kombiniert. Einträge, deren Wert kein Operatordictionary auf Feldebene ist, verwenden eine genaue Übereinstimmungssemantik: Der angeforderte Schlüssel muss in den gespeicherten Metadaten vorhanden sein. Verschachtelte Wörterbücher werden rekursiv abgeglichen. Skalare und Listenwerte werden durch exakte Gleichheit abgeglichen; Listenreihenfolge und -länge müssen ebenfalls übereinstimmen. Um die Arraymitgliedschaft zu testen, verwenden Sie ein Operatordictionary auf Feldebene, wie{"tags": {"$array_contains": "prod"}}. Ein Listenoperand für"$array_contains"bedeutet, dass alle aufgelisteten Werte vorhanden sein müssen."$array_contains_any"bedeutet, dass mindestens ein aufgelisteter Wert vorhanden sein muss. Verwenden Sie"$not", um einen anderen Ausdruck auf Feldebene in demselben Feld zu negieren, einschließlich eines Operator-Dictionarys oder eines Raw-Exact-Match-Wertes. Negierte Ausdrücke stimmen überein, wenn der positive Ausdruck fehlschlagen würde, einschließlich fehlender Felder; negierte Array-Mitgliedschaft stimmt auch mit Nicht-Array-Feldern überein. Beispiele:metadata_filter={"source": "slack"}für ein skalares Feld,metadata_filter={"review": {"status": "open"}}für ein verschachteltes Feld undmetadata_filter={"tags": ["prod", "urgent"]}für eine genaue Listenübereinstimmung. Kombinieren Sie Bedingungen, um sie alle zu benötigen:metadata_filter={ "source": "slack", "review": {"status": "open"}, "tags": ["prod", "urgent"], } - include_bytes
bool– Gibt an, ob Bilddatensätze oder Bilder, die an Meldungsdatensätze angehängt sind, ihre gespeicherten Byte enthalten. Wenn keine Angabe gemacht wird oderFalse, werden Bildbeschreibungen und Metadaten zurückgegeben, ohne Byte zu laden. Setzen Sie dies bei direkten Bildlisten nur mit einem exaktenrecord_id- und mindestens einem exakten Benutzer-, Agent- oder Threadbereichsfilter aufTrue. Diese Option hat keine Auswirkungen auf andere Datensatztypen. - record_id
str: Exakter Datensatz-ID-Filter. Wenn diese Option ausgelassen wird, werden Datensätze mit einer beliebigen ID zurückgegeben. Geltungsbereich und Metadatenfilter bleiben zusätzliche Constraints.
- record_type
- Rücksendungen: Datensätze, die im zurückgegebenen Fenster von "ältesten" auf "neueste" sortiert wurden.
- Rückgabetyp: Liste[Datensatz]
Methode list_relations (Übung)
Listet gespeicherte Beziehungen in ihrer Quell-zu-Ziel-Ausrichtung auf.
- Parameter:
- relation_type
str– Optionales zuzuordnendes Label für gerichtete Beziehungen, wie"supports"oder"supersedes". Weglassen, um jeden Beziehungstyp einzuschließen. - source_record_id
str: Optionale übereinstimmende Quelldatensatz-ID. - source_record_type
str: Optionaler abzugleichender Quelldatensatztyp. - target_record_id
str: Optionale Zieldatensatz-ID für den Abgleich. - target_record_type
str: Optionaler Zieldatensatztyp für den Abgleich. - Limit
int | None– Optionale maximale Anzahl von Beziehungen, die am frühesten erstellt werden sollen. Wenn diese Option ausgelassen wird, können Implementierungen einen sicheren oberen Grenzwert wieMAX_LIST_LIMITanwenden. Übergeben SieNone, um jede übereinstimmende gespeicherte Beziehung zurückzugeben. - metadata_filter
dict[str, Any] | None– Metadatenfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Beziehungen zurückgegeben, deren MetadatenNonesind. Wenn dies auf ein Diktat gesetzt ist, werden Einträge mit AND-Semantik kombiniert. Verschachtelte Wörterbücher verwenden rekursiven exakten Abgleich. Skalare und Listenwerte erfordern eine exakte Gleichheit. Verwenden Sie{"tags": {"$array_contains": "prod"}}, um die Arraymitgliedschaft abzugleichen,"$array_contains_any", um einen aufgelisteten Wert abzugleichen, oder"$not", um einen anderen Feldausdruck zu negieren. - relation_id
str: Exakter Beziehungs-ID-Filter. Wenn diese Option ausgelassen wird, werden Beziehungen mit einer beliebigen ID zurückgegeben. Andere Filter bleiben zusätzliche Einschränkungen.
- relation_type
- Rücksendungen: Beziehungen werden nach Erstellungszeit und ID sortiert.
- Liste Rückgabetyp:[RecordRelation]
Beispiele
store.list_relations(
source_record_id="current-memory",
relation_type="supports",
metadata_filter={"source": "manual"},
)
[RecordRelation(...)]
Methode list_relations_async (asynchron)
Listen Sie Beziehungen asynchron in der Ausrichtung von Quelle zu Ziel auf.
- Parameter:
- relation_type
str– Optionales zuzuordnendes Label für gerichtete Beziehungen, wie"supports"oder"supersedes". Weglassen, um jeden Beziehungstyp einzuschließen. - source_record_id
str: Optionale übereinstimmende Quelldatensatz-ID. - source_record_type
str: Optionaler abzugleichender Quelldatensatztyp. - target_record_id
str: Optionale Zieldatensatz-ID für den Abgleich. - target_record_type
str: Optionaler Zieldatensatztyp für den Abgleich. - Limit
int | None– Optionale maximale Anzahl von Beziehungen, die am frühesten erstellt werden sollen. Wenn diese Option ausgelassen wird, können Implementierungen einen sicheren oberen Grenzwert wieMAX_LIST_LIMITanwenden. Übergeben SieNone, um jede übereinstimmende gespeicherte Beziehung zurückzugeben. - metadata_filter
dict[str, Any] | None– Metadatenfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Beziehungen zurückgegeben, deren MetadatenNonesind. Wenn dies auf ein Diktat gesetzt ist, werden Einträge mit AND-Semantik kombiniert. Verschachtelte Wörterbücher verwenden rekursiven exakten Abgleich. Skalare und Listenwerte erfordern eine exakte Gleichheit. Verwenden Sie{"tags": {"$array_contains": "prod"}}, um die Arraymitgliedschaft abzugleichen,"$array_contains_any", um einen aufgelisteten Wert abzugleichen, oder"$not", um einen anderen Feldausdruck zu negieren. - relation_id
str: Optionale Beziehungs-ID, die direkt abgeglichen werden soll.
- relation_type
- Rücksendungen: Beziehungen werden nach Erstellungszeit und ID sortiert.
- Liste Rückgabetyp:[RecordRelation]
Beispiele
await store.list_relations_async(
source_record_id="current-memory", relation_type="supports"
)
[RecordRelation(...)]
Methode list_thread_messages (Übung)
Listen Sie die Nachrichtenhistorie auf, die für einen Thread gespeichert ist.
- Parameter:
- thread_id
str: ID des Threads, dessen Nachrichten zurückgegeben werden sollen. - last_n
int | None– Optionale Anzahl der zuletzt aufzunehmenden Nachrichten. Wenn diese Option ausgelassen wird, werden alle gespeicherten Nachrichten für den Thread zurückgegeben. In Kombination mit einem Sequenzbereich gilt die Grenze innerhalb dieses Bereichs. - range_start_seq_no
int | None– Optional inklusive untere Sequenzgrenze. Es werden nur Nachrichten zurückgegeben, derenseq_nomindestens dieser Wert ist. - range_end_seq_no
int | None– Optionale exklusive obere Sequenzgrenze. Es werden nur Nachrichten zurückgegeben, derenseq_nokleiner als dieser Wert ist. - include_bytes
bool– Gibt an, ob Imageteile, die an die zurückgegebenen Nachrichten angehängt sind, ihre gespeicherten Byte enthalten. Wenn keine Angabe gemacht wird oderFalse, werden Bildbeschreibungen und Metadaten zurückgegeben, ohne Byte zu laden.
- thread_id
- Rücksendungen: Meldungsdatensätze werden im zurückgegebenen Fenster vom ältesten zum neuesten sortiert.
- Rückgabetyp: Liste[MessageRecord]
Methode list_thread_messages_async (asynchron)
Listen Sie die für einen Thread gespeicherte Nachrichtenhistorie asynchron auf.
- Parameter:
- thread_id
str: ID des Threads, dessen Nachrichten zurückgegeben werden sollen. - last_n
int | None– Optionale Anzahl der zuletzt aufzunehmenden Nachrichten. Wenn diese Option ausgelassen wird, werden alle gespeicherten Nachrichten für den Thread zurückgegeben. In Kombination mit einem Sequenzbereich gilt die Grenze innerhalb dieses Bereichs. - range_start_seq_no
int | None– Optional inklusive untere Sequenzgrenze. Es werden nur Nachrichten zurückgegeben, derenseq_nomindestens dieser Wert ist. - range_end_seq_no
int | None– Optionale exklusive obere Sequenzgrenze. Es werden nur Nachrichten zurückgegeben, derenseq_nokleiner als dieser Wert ist. - include_bytes
bool– Gibt an, ob Imageteile, die an die zurückgegebenen Nachrichten angehängt sind, ihre gespeicherten Byte enthalten. Wenn keine Angabe gemacht wird oderFalse, werden Bildbeschreibungen und Metadaten zurückgegeben, ohne Byte zu laden.
- thread_id
- Rücksendungen: Meldungsdatensätze werden im zurückgegebenen Fenster vom ältesten zum neuesten sortiert.
- Rückgabetyp: Liste[MessageRecord]
Methode search (Übung)
Datensätze nach Ähnlichkeit suchen
- Parameter:
- query
str | None– Abfrage in natürlicher Sprache. Muss angegeben werden, wennquery_vectorausgelassen wird. - query_vector
list[float] | None– Optionale vorberechnete Abfrageeinbettung. Es muss genau einer vonqueryundquery_vectorangegeben werden. - k
int: Maximale Anzahl von Ergebnissen, die zurückgegeben werden. Explizite Werte müssen mindestens1sein. Dies ist ein oberer Grenzwert: Der Aufruf gibt möglicherweise weniger alsk-Ergebnisse zurück, wenn Filter zu restriktiv sind, wenn weniger nicht abgelaufene übereinstimmende Datensätze vorhanden sind oder das implementierungsspezifische Suchverhalten vorliegt. - thread_id
str | None– Optionaler Threadgeltungsbereich. - user_id
str | None– Optionale Filter für Benutzer- und Agent-Geltungsbereich. - agent_id
str | None: Optionale Filter für Benutzer- und Agent-Geltungsbereich. - exact_user_match
bool: Gibt an, ob jede angegebene Geltungsbereichs-ID genau abgeglichen werden muss. - exact_agent_match
bool: Gibt an, ob jede angegebene Geltungsbereichs-ID genau abgeglichen werden muss. - exact_thread_match
bool: Gibt an, ob jede angegebene Geltungsbereichs-ID genau abgeglichen werden muss. - record_types
set[str] | None– Optionale Datensatztypen, die eingeschlossen werden sollen. - metadata_filter
dict[str, Any] | None– Optionale Metadatenfilterzuordnung. Einträge inmetadata_filterwerden mit AND-Semantik kombiniert. Einträge, deren Wert kein Operatordictionary auf Feldebene ist, verwenden eine genaue Übereinstimmungssemantik: Der angeforderte Schlüssel muss in den gespeicherten Metadaten vorhanden sein. Verschachtelte Wörterbücher werden rekursiv abgeglichen. Skalare und Listenwerte werden durch exakte Gleichheit abgeglichen; Listenreihenfolge und -länge müssen ebenfalls übereinstimmen. Um die Arraymitgliedschaft zu testen, verwenden Sie ein Operatordictionary auf Feldebene, wie{"tags": {"$array_contains": "prod"}}. Ein Listenoperand für"$array_contains"bedeutet, dass alle aufgelisteten Werte vorhanden sein müssen."$array_contains_any"bedeutet, dass mindestens ein aufgelisteter Wert vorhanden sein muss. Verwenden Sie"$not", um einen anderen Ausdruck auf Feldebene in demselben Feld zu negieren, einschließlich eines Operator-Dictionarys oder eines Raw-Exact-Match-Wertes. Negierte Ausdrücke stimmen überein, wenn der positive Ausdruck fehlschlagen würde, einschließlich fehlender Felder; negierte Array-Mitgliedschaft stimmt auch mit Nicht-Array-Feldern überein. - include_invalid_results
bool– Gibt an, ob Ergebnisse speicherähnliche Datensätze mit dem ungültigen Status enthalten. Der Standardwert istTrue. Übergeben SieFalse, um sie auszuschließen. - num_hops
int: Anzahl der Memory Link-Ränder, die von jedem Direct Memory-Ergebnis gefolgt werden sollen. Werte von0bis5werden unterstützt.0deaktiviert die Diagrammerweiterung. - max_linked_results
int: Maximal verknüpfte Speicher über alle Hops hinweg, die an jedes direkte Ergebnis angehängt sind.0behält direkte Ergebnisse ohne verknüpften Kontext bei. Standard ist100.
- query
- Rückgaben:
(record, distance)-Paare nach zunehmender Entfernung sortiert. Die Liste kann weniger alsk-Einträge enthalten. - Rückgabetyp: list[tuple[Record, float]]
- Gelöst: ValueError – Wenn
kkleiner als1ist.
Beispiele
store.add(
["Searchable abstract memory"],
record_type="memory",
record_ids="mem-search-abstract-docs",
)
['mem-search-abstract-docs']
store.search("Searchable", 1, record_types={"memory"})[0][0].id
'mem-search-abstract-docs'
Nach einem skalaren Metadatenwert filtern:
store.add(
["pizza release"],
record_type="memory",
record_ids="mem-search-meta-source-docs2",
metadata={"source": "slack"},
)
['mem-search-meta-source-docs2']
any(
record.id == "mem-search-meta-source-docs2"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"source": "slack"},
)
)
True
Nach verschachtelten Metadaten filtern:
store.add(
["pizza review"],
record_type="memory",
record_ids="mem-search-meta-review-docs2",
metadata={"review": {"status": "open"}},
)
['mem-search-meta-review-docs2']
any(
record.id == "mem-search-meta-review-docs2"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"review": {"status": "open"}},
)
)
True
Ordnen Sie einen Listenwert genau zu, einschließlich Reihenfolge:
store.add(
["pizza tags"],
record_type="memory",
record_ids="mem-search-meta-tags-docs2",
metadata={"tags": ["prod", "urgent"]},
)
['mem-search-meta-tags-docs2']
any(
record.id == "mem-search-meta-tags-docs2"
for record, _ in store.search(
"pizza",
k=5,
metadata_filter={"tags": ["prod", "urgent"]},
)
)
True
Filtern, wenn ein Metadaten-Array einen Wert enthält:
any(
record.id == "mem-search-meta-tags-docs2"
for record, _ in store.search(
"pizza",
k=5,
metadata_filter={"tags": {"$array_contains": "prod"}},
)
)
True
Mehrere Metadatenbedingungen kombinieren Ein Datensatz muss jeden Schlüssel erfüllen:
store.add(
["pizza rollout"],
record_type="memory",
record_ids="mem-search-meta-combined-docs2",
metadata={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
['mem-search-meta-combined-docs2']
any(
record.id == "mem-search-meta-combined-docs2"
for record, _ in store.search(
"pizza",
k=5,
metadata_filter={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
)
True
Methode search_async (asynchron)
Suchen Sie Datensätze asynchron nach semantischer Ähnlichkeit.
- Parameter:
- query
str | None– Gleicher Abfragetext, der vonsearchakzeptiert wird. - k
int– Dieselbe maximale Ergebnisanzahl, die vonsearchakzeptiert wird. Explizite Werte müssen mindestens1sein. - query_vector
list[float] | None– Dieselbe optionale vorberechnete Abfrageeinbettung wurde vonsearchakzeptiert. - thread_id
str | None– Dieselben optionalen Geltungsbereichsfilter werden vonsearchakzeptiert. - user_id
str | None– Dieselben optionalen Geltungsbereichsfilter werden vonsearchakzeptiert. - agent_id
str | None– Dieselben optionalen Geltungsbereichsfilter, die vonsearchakzeptiert werden. - exact_user_match
bool: Identische Flags mit genauer Übereinstimmung, die vonsearchakzeptiert werden. - exact_agent_match
bool: Identische Flags mit genauer Übereinstimmung, die vonsearchakzeptiert werden. - exact_thread_match
bool– Gleiche Flags mit exakter Übereinstimmung werden vonsearchakzeptiert. - record_types
set[str] | None: Derselbe optionale Datensatztypfilter wurde vonsearchakzeptiert. - metadata_filter
dict[str, Any] | None– Gleicher optionaler Metadatenfilter, der vonsearchakzeptiert wird, einschließlich skalarer, verschachtelter, exakter Liste, Array-Mitgliedschaft und kombinierter Bedingungen wie{"source": "slack"},{"review": {"status": "open"}},{"tags": ["prod", "urgent"]}und{"tags": {"$array_contains": "prod"}}. - include_invalid_results
bool– Dieselbe Ergebnisoption für den Lebenszyklusstatus wurde vonsearchakzeptiert. - num_hops
int– Gleiche Diagrammausdehnungstiefe, die vonsearchakzeptiert wird. - max_linked_results
int– Gleiches Limit für verknüpfte Speicher pro direktem Ergebnis, das vonsearchakzeptiert wird.
- query
- Rückgaben:
(record, distance)-Paare, die vom zugrunde liegendensearch-Aufruf zurückgegeben werden. - Rückgabetyp: Liste[tuple[Record, float]]
- Gelöst: ValueError – Wenn
kkleiner als1ist.
Methode update (Übung)
Aktualisieren Sie gespeicherten Datensatzinhalt, betten Sie Daten, Metadaten, Zeitstempel oder Ablauf ein.
- Parameter:
- record_type
str: Logischer Typ des zu aktualisierenden Datensatzes. - record_id
str: ID des zu aktualisierenden Datensatzes. - content
str | Mapping[str, object] | Sequence[MessageContent] | bytes | None: Kanonischer Ersatzinhalt. Übergeben Sie fürmessage-Datensätze eine Zeichenfolge oder eine geordnete Folge von Text- und Bildinhaltsteilen. Ersetzen Sie die Nachricht mit""durch leeren Text. Bei speicherähnlichen Datensätzen können SpeicherNoneakzeptieren, um den gespeicherten Text und den zugehörigen semantischen Status zu löschen. Lassen Sie das Argument weg, um den Inhalt unverändert zu lassen. Geben Sie dies nicht zusammen mittextan. - index_text
str | list[str] | None– Optionale alternative semantische Payload, mit der der gespeicherte Suchstatus neu berechnet oder ersetzt wird, ohne den persistenten Text zu ändern. Ein String kann intern vom Store gechunket werden. Eine Liste nicht leerer Zeichenfolgen wird als Chunks behandelt, die Eigentümer des Aufrufers sind, und darf nicht erneut geteilt werden. Einige Implementierungen können dies auch separat als Hybrid-Suchtext beibehalten. Bei einemimage-Datensatz ersetzt dieses Feld die persistente Bildbeschreibung. - einbetten
list[float] | ndarray | list[list[float] | ndarray] | None– Optionaler vorab berechneter Einbettungsvektor oder Liste mit Chunk-Einbettungsvektoren. Wenn angegeben, wird dies direkt verwendet, und es erfolgt kein Einbettungsaufruf. Mehrere Vektoren erfordern übereinstimmendeindex_text-Chunk-Listen oder vorhandene gespeicherte Chunk-Textzeilen. Übergeben SieNone, um die gespeicherte Einbettung explizit zu löschen, wenn der Speicher sie unterstützt. Speicher mit textbezogener Indexierung können auch semantische Aktualisierungen ohne Einbettung oder explizite Einbettung ermöglichen. - metadata
dict[str, Any] | None– Optionale Metadaten-Ersatzzuordnung. Übergeben SieNone, um Metadaten zu löschen, wenn der Speicher sie unterstützt. Für das Ersetzen von Imagecontentist"image_mime_type"in dieser Zuordnung erforderlich. Der Speicher verwendet dieses Feld, um das Bild zu speichern, gibt es jedoch nicht als Teil der Metadaten des Datensatzes zurück. - timestamp
str | None– Optionaler neuer Zeitstempel zum Speichern mit dem Datensatz. Es gibt an, wann der Datensatz erstellt wurde. Lassen Sie dieses Argument weg, um den gespeicherten Zeitstempel unverändert zu lassen. Übergeben SieNone, um den gespeicherten Zeitstempel zu löschen und die Zeit zu verwenden, zu der der Datensatz zum Speicher hinzugefügt wurde, wenn der Speicher ihn unterstützt. - ttl_days
int | None– Optionale Ablaufaktualisierung in Tagen. Lassen Sie dieses Argument zusammen mitttl_anchoraus, um den aktuellen Ablaufzeitstempel beizubehalten. Übergeben SieNone, um den Ablauf zu löschen. - ttl_anchor
TimeToLiveAnchor– Optionaler Time-to-Live-Anker für eine Ablaufaktualisierung. Verwenden SieTimeToLiveAnchor.CREATED_ATfür die Erstellungszeit des Datensatzes oderTimeToLiveAnchor.TIMESTAMPfür den Ersatztimestamp, der in derselben Aktualisierung angegeben wird, oder den gespeicherten Ereigniszeitstempel, wenntimestampausgelassen wird. Wenn Siettl_anchorohnettl_daysangeben, wird die standardmäßige Gültigkeitsdauer des Speichers oder Schemas verwendet. Wennttl_anchorwährend einer Aktualisierung ausgelassen wird, verwenden ImplementierungenTimeToLiveAnchor.CREATED_AT. - status
RecordStatus: Optionaler Ersatzlebenszyklusstatus für Datensätze. -
Text
str | None–Veralteter Alias für
content. Übergeben SieNone, um den gespeicherten Text explizit zu löschen, wenn er vom Speicher unterstützt wird. Geben Sie dies nicht zusammen mitcontentan.Veraltet
Veraltet seit Version 26.8.0: Dieser Parameter sollte in 26.8.0 nicht mehr verwendet werden und wird in 27.1 entfernt. Verwenden Sie stattdessen
content.
- record_type
- Rücksendungen: Anzahl der aktualisierten Datensätze (
0oder1). Der Rückgabewert0bedeutet, dass kein Datensatz aktualisiert wurde. - Rückgabetyp: int
- Gelöst: ValueError – Wenn die Update-Payload für den Speicher ungültig ist, z.B. das Weglassen jedes optionalen Feldes oder das Bereitstellen widersprüchlicher semantischer Argumente.
Methode update_async (asynchron)
Aktualisieren Sie gespeicherten Datensatzinhalt asynchron, und betten Sie Daten, Metadaten, Zeitstempel oder Ablauf ein.
- Parameter:
- record_type
str: Logischer Typ des zu aktualisierenden Datensatzes. - record_id
str: ID des zu aktualisierenden Datensatzes. - content
str | Mapping[str, object] | Sequence[MessageContent] | bytes | None: Kanonischer Ersatzinhalt. Übergeben Sie fürmessage-Datensätze eine Zeichenfolge oder eine geordnete Folge von Text- und Bildinhaltsteilen. Ersetzen Sie die Nachricht mit""durch leeren Text. Bei speicherähnlichen Datensätzen können SpeicherNoneakzeptieren, um den gespeicherten Text und den zugehörigen semantischen Status zu löschen. Lassen Sie das Argument weg, um den Inhalt unverändert zu lassen. Geben Sie dies nicht zusammen mittextan. - index_text
str | list[str] | None– Optionale alternative semantische Payload, mit der der gespeicherte Suchstatus neu berechnet oder ersetzt wird, ohne den persistenten Text zu ändern. Ein String kann intern vom Store gechunket werden. Eine Liste nicht leerer Zeichenfolgen wird als Chunks behandelt, die Eigentümer des Aufrufers sind, und darf nicht erneut geteilt werden. Einige Implementierungen können dies auch separat als Hybrid-Suchtext beibehalten. Bei einemimage-Datensatz ersetzt dieses Feld die persistente Bildbeschreibung. - einbetten
list[float] | ndarray | list[list[float] | ndarray] | None– Optionaler vorab berechneter Einbettungsvektor oder Liste mit Chunk-Einbettungsvektoren. Wenn angegeben, wird dies direkt verwendet, und es erfolgt kein Einbettungsaufruf. Mehrere Vektoren erfordern übereinstimmendeindex_text-Chunk-Listen oder vorhandene gespeicherte Chunk-Textzeilen. Übergeben SieNone, um die gespeicherte Einbettung explizit zu löschen, wenn der Speicher sie unterstützt. Speicher mit textbezogener Indexierung können auch semantische Aktualisierungen ohne Einbettung oder explizite Einbettung ermöglichen. - metadata
dict[str, Any] | None– Optionale Metadaten-Ersatzzuordnung. Übergeben SieNone, um Metadaten zu löschen, wenn der Speicher sie unterstützt. Für das Ersetzen von Imagecontentist"image_mime_type"in dieser Zuordnung erforderlich. Der Speicher verwendet dieses Feld, um das Bild zu speichern, gibt es jedoch nicht als Teil der Metadaten des Datensatzes zurück. - timestamp
str | None– Optionaler neuer Zeitstempel zum Speichern mit dem Datensatz. Es gibt an, wann der Datensatz erstellt wurde. Lassen Sie dieses Argument weg, um den gespeicherten Zeitstempel unverändert zu lassen. Übergeben SieNone, um den gespeicherten Zeitstempel zu löschen und die Zeit zu verwenden, zu der der Datensatz zum Speicher hinzugefügt wurde, wenn der Speicher ihn unterstützt. - ttl_days
int | None– Optionale Ablaufaktualisierung in Tagen. Lassen Sie dieses Argument zusammen mitttl_anchoraus, um den aktuellen Ablaufzeitstempel beizubehalten. Übergeben SieNone, um den Ablauf zu löschen. - ttl_anchor
TimeToLiveAnchor– Optionaler Time-to-Live-Anker für eine Ablaufaktualisierung. Verwenden SieTimeToLiveAnchor.CREATED_ATfür die Erstellungszeit des Datensatzes oderTimeToLiveAnchor.TIMESTAMPfür den Ersatztimestamp, der in derselben Aktualisierung angegeben wird, oder den gespeicherten Ereigniszeitstempel, wenntimestampausgelassen wird. Wenn Siettl_anchorohnettl_daysangeben, wird die standardmäßige Gültigkeitsdauer des Speichers oder Schemas verwendet. Wennttl_anchorwährend einer Aktualisierung ausgelassen wird, verwenden ImplementierungenTimeToLiveAnchor.CREATED_AT. - status
RecordStatus: Optionaler Ersatzlebenszyklusstatus für Datensätze. Lassen Sie es aus, um den aktuellen Status beizubehalten. -
Text
str | None–Veralteter Alias für
content. Übergeben SieNone, um den gespeicherten Text explizit zu löschen, wenn er vom Speicher unterstützt wird. Geben Sie dies nicht zusammen mitcontentan.Veraltet
Veraltet seit Version 26.8.0: Dieser Parameter sollte in 26.8.0 nicht mehr verwendet werden und wird in 27.1 entfernt. Verwenden Sie stattdessen
content.
- record_type
- Rücksendungen: Anzahl der aktualisierten Datensätze (
0oder1). Der Rückgabewert0bedeutet, dass kein Datensatz aktualisiert wurde. - Rückgabetyp: int
- Gelöst: ValueError – Wenn die Update-Payload für den Speicher ungültig ist, z.B. das Weglassen jedes optionalen Feldes oder das Bereitstellen widersprüchlicher semantischer Argumente.
Methode update_relations (Übung)
Ändernde Werte für gespeicherte Beziehungen aktualisieren.
Ausgelassene Felder bleiben unverändert, mit der Ausnahme, dass der Wechsel zu einem integrierten Speicherbeziehungstyp sein umgekehrtes Label durch das feste Umkehrzeichen ersetzt. Ein DB-backed Memory Store berechnet auch Endpunktlebenszyklusstatus nach einer Änderung des Beziehungstyps neu.
- Parameter:
- relation_ids
str | list[str]: ID oder IDs der zu aktualisierenden Beziehungen. - relation_types
str | list[str]: Optionales/optionales Ersatzlabel für gerichtete Beziehungen. Lassen Sie dies aus, um die gespeicherten Labels beizubehalten. - opposite_relation_types
str | list[str]– Optionales Ersatz-Reverse Relationship Label oder Labels. Übergeben Sie ein Label, um es zu ersetzen, oder lassen Sie dieses Argument weg, um es beizubehalten. - Zeitstempel
str | None | list[str | None]– Optionaler Ersatzzeitstempel oder Zeitstempel. Übergeben SieNone, um einen gespeicherten Zeitstempel zu löschen. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Optionales Ersatzmetadatenobjekt oder -objekte. Die bereitgestellten Metadaten ersetzen das gespeicherte Objekt; es wird nicht zusammengeführt.
- relation_ids
- Rückgaben: IDs der aktualisierten Beziehungen.
- Rückgabetyp: list[str]
Beispiele
store.update_relations(
"relation-id", relation_types="supports"
)
['relation-id']
Methode update_relations_async (asynchron)
Aktualisieren Sie mutierbare Werte in gespeicherten Beziehungen asynchron.
Ausgelassene Felder bleiben unverändert, mit der Ausnahme, dass der Wechsel zu einem integrierten Speicherbeziehungstyp sein umgekehrtes Label durch das feste Umkehrzeichen ersetzt. Ein DB-backed Memory Store berechnet auch Endpunktlebenszyklusstatus nach einer Änderung des Beziehungstyps neu.
- Parameter:
- relation_ids
str | list[str]: ID oder IDs der zu aktualisierenden Beziehungen. - relation_types
str | list[str]: Optionales/optionales Ersatzlabel für gerichtete Beziehungen. Lassen Sie dies aus, um die gespeicherten Labels beizubehalten. - opposite_relation_types
str | list[str]– Optionales Ersatz-Reverse Relationship Label oder Labels. Übergeben Sie ein Label, um es zu ersetzen, oder lassen Sie dieses Argument weg, um es beizubehalten. - Zeitstempel
str | None | list[str | None]– Optionaler Ersatzzeitstempel oder Zeitstempel. Übergeben SieNone, um einen gespeicherten Zeitstempel zu löschen. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Optionales Ersatzmetadatenobjekt oder -objekte. Die bereitgestellten Metadaten ersetzen das gespeicherte Objekt; es wird nicht zusammengeführt.
- relation_ids
- Rückgaben: IDs der aktualisierten Beziehungen.
- Rückgabetyp: list[str]
Beispiele
await store.update_relations_async(
"relation-id", relation_types="supports"
)
['relation-id']
Oracle DB-Speicher
Klasse oracleagentmemory.core.OracleDBMemoryStore
Basis: OracleMemoryStore
Datenbankgestützte Persistenz für Nachrichten, Dokumente, Speicher und Akteurprofile.
Oracle DB-Speicher erstellen
- Parameter:
- embedder
IEmbedder | None: Einbettung, die verwendet wird, wenn der Speicher lokale Vektoreinbettungen benötigt. KannNonesein, wenn Aufrufer immer vorab berechnete Vektoren bereitstellen oder wenn die Stichwortsuche mit Nur-Text-Schreib- und Textabfragen verwendet wird.SearchStrategy.HYBRIDerfordert hier eineOracleDBEmbedder, damit der verwaltete Hybridindex das datenbankinterne Modell dieses Einbetters verwenden kann. - pool
Any: Oracle DB-Verbindung oder -Pool. Das Übergeben einer Raw-Verbindung ermöglicht den Single-Session-Modus für diese Speicherinstanz: gleichzeitige Speicheraufrufe werden lokal serialisiert, um die von Schreibvorgängen verwendeten Zeilensperren und Transaktionsannahmen beizubehalten. Verwenden Sie einen Connection Pool für gleichzeitige Anforderungen. - schema_policy
SchemaPolicy | str– Steuert, wie das verwaltete Schema geöffnet oder vorbereitet wird. Standardmäßig ist ein vorhandenes, aktuelles Schema erforderlich, und es werden keine DDL-Änderungen vorgenommen. Bei einem Speicher, der mitmemory_store_ididentifiziert wird, erstellt oder repariertSchemaPolicy.CREATE_IF_NECESSARYdas Schema bei Bedarf.SchemaPolicy.RECREATElöscht und erstellt es neu. Ältere Schemaversionen erfordern ein Upgrade des Packageschemas, bevor sie repariert werden können. Wennschema_ownerfestgelegt ist, verwenden SieSchemaPolicy.REQUIRE_EXISTINGfür den normalen schemaübergreifenden Zugriff oderSchemaPolicy.NO_CHECKfür den Laufzeitzugriff für Deep Data Security. Beide verhindern eine verwaltete Schema-DDL, einschließlich Schemaerstellung, -reparatur, -wiederherstellung und erster Hybridindexerstellung. Führen Sie diese Aktionen aus, während Sie als Eigentümerdatenbankbenutzer ohneschema_ownerangemeldet sind. Kein Modus macht den Speicher schreibgeschützt: Lese- und Schreibvorgänge im normalen Speicher verwenden die effektive Datenbankautorisierung des Verbindungsbenutzers. Verwenden Sie für den Zugriff auf die Deep Data Security-LaufzeitSchemaPolicy.NO_CHECK, und erstellen Sie den Speicher, währendOracleMemoryEndUserSecurityContextaktiv ist. Für den resultierenden Speicher ist für jeden späteren Datenbankvorgang ein aktiver Endbenutzerkontext erforderlich. Andere Schema-Policys alsNO_CHECKweisen aktive Endbenutzerkontexte zurück, sodass die Lebenszyklusarbeit des Schemas nicht versehentlich als Endbenutzer ausgeführt werden kann. - vector_dim
int | None– Optionale Einbettungsdimension für lokalen Vektorspeicher. Übergeben Sie eine positive Ganzzahl, um die verwaltete Einbettungsspalte und den Vektorindex zu erstellen und vorhandene Schemametadaten mit dieser Dimension zu validieren. Übergeben SieNone, oder lassen Sie das Argument weg, wenn dieser Speicher keinen lokalen Vektorspeicher benötigt. Stichwort- und Hybridsuche können aus gespeichertem Suchtext ohne lokale Einbettungsspalte ausgeführt werden. Die Vektorsuche erfordert einen lokalen Vektorspeicher. Wenn dieses Argument ausgelassen wird und das effektive Such-Backend eine Vektorsuche ist, verwendet der Speicherembedder.embedding_dimension, wenn ein Embedder verfügbar ist. -
table_name_prefix
str–Optionales Präfix zu verwalteten Tabellen-/Indexnamen hinzugefügt. Übergeben Sie entweder diesen oder
memory_store_id, nicht beides.Veraltet
Veraltet seit Version 26.6.0: Dieser Parameter sollte in 26.6.0 nicht mehr verwendet werden und wird in 27.1 entfernt. Verwenden Sie stattdessen
memory_store_id. - memory_store_id
str: Stabile ID für den verwalteten DB-Speicherspeicher. Verwenden Sie dieselbe ID erneut, um denselben verwalteten Speicher erneut zu öffnen. Die ID wird mit verwalteten DB-Objektnamen mit einem Unterstrich verknüpft. Daher muss sie mit einem Buchstaben beginnen, nur Buchstaben, Zahlen und Unterstriche enthalten und darf maximal 16 Zeichen enthalten. Übergeben Sie entweder diesen odertable_name_prefix, nicht beides. Wenn diese Option ausgelassen wird, verwendet der Speichertable_name_prefixoder den Standard ohne Präfix, wenn auchtable_name_prefixausgelassen wird. Um einen Speicher im Schema des Verbindungsbenutzers zu erstellen, zu reparieren oder neu zu erstellen, ist ein kompatibles Package DBMS_AGENT_MEMORY_STORE in diesem Schema erforderlich. - schema_owner
str: Optionaler Schemaeigentümer für einen vorhandenen verwalteten Speicherspeicher. Lassen Sie diese Option aus, um das Schema des Verbindungsbenutzers zu verwenden. Das Argumentpoolkann eine Raw-Datenbankverbindung oder ein Verbindungspool sein. Verwenden Sie diese Option, wenn sie zu einem Anwendungs-DB-Benutzer gehört, der Berechtigungen für Tabellen hat, deren Eigentümer ein anderer Benutzer ist. Diese Option ist nur für Laufzeitzugriff auf einen bereits erstellten verwalteten Speicherspeicher vorgesehen. Verwenden SieSchemaPolicy.REQUIRE_EXISTINGfür den normalen schemafreien Zugriff oderSchemaPolicy.NO_CHECKmit einem aktiven Endbenutzersicherheitskontext für einen durch Deep Data Security geschützten Speicher. Erstellen, aktualisieren oder neu erstellen Sie den verwalteten Speicherspeicher, während Sie als Schemaeigentümer angemeldet sind, und lassen Sie diese Option aus. Übergeben Sie einen Bezeichner ohne Anführungszeichen. Die Eingabe in Kleinbuchstaben wird in Großbuchstaben normalisiert, und Schemaeigentümer, bei denen die Groß-/Kleinschreibung beachtet wird, werden nicht unterstützt. Erteilen Sie dem Anwendungs-DB-BenutzerCREATE SESSIONund die erforderlichen Objektberechtigungen. Die genauen Berechtigungen finden Sie im AbschnittDatabase Users and Privilegesdes Handbuchs zur Fehlerbehebung. Alternativ können Sie Managed Object-Ansichten mit demselben Namen im Laufzeitschema bereitstellen undschema_ownerweglassen. Dies wird nur fürSchemaPolicy.REQUIRE_EXISTINGunterstützt. - search_strategy
SearchStrategy: WertSearchStrategy, der das Backend fürsearch()auswählt. Verwenden SieSearchStrategy.VECTOR(Standard) für den reinen Vektorabruf,SearchStrategy.HYBRID, um einen verwalteten Oracle-Hybridvektorindex über den gespeicherten Suchtext abzufragen, oderSearchStrategy.KEYWORD, um nach Stichwort/Textabgleich über den gespeicherten Suchtext ohne Vektorfusion zu ordnen. FürKEYWORDist kein Embedder erforderlich. FürHYBRIDmussembeddereinOracleDBEmbeddersein. Daher verwendet der verwaltete Hybridindex dasselbe datenbankinterne Modell wie der Hauptspeichereinbettungsmodus. Wenn ein Keyword-Client ein vorhandenes Hybrid-Schema öffnet, kann der Speicher die Textverzweigung dieses Hybrid-Index verwenden. Das Hochfahren verläuft nicht erfolgreich, wenn eine inkompatible Strategie mit einem vorhandenen Schema verwendet wird, weil dieses Schema möglicherweise nicht den gespeicherten Suchstatus enthält, den die Strategie benötigt. Wennschema_policy=SchemaPolicy.REQUIRE_EXISTINGund dieses Argument weggelassen werden, erkennt der Speicher am besten den gespeicherten Suchmodus des Schemas aus verwalteten Metadaten und verwendet diesen Modus, wenn verfügbar. - search_index_sync
SearchIndexSyncMode– WertSearchIndexSyncMode, der das Verhalten der Aktualisierung des verwalteten Suchindex fürSearchStrategy.HYBRIDundSearchStrategy.KEYWORDauswählt.SearchIndexSyncMode.ON_COMMITist der Standardwert und macht Datensätze durchsuchbar, sobald die Schreibtransaktion festgeschrieben wird.SearchIndexSyncMode.MANUALlässt die Aktualisierung eines expliziten datenbankseitigen Synchronisierungsvorgangs zu. MitSearchIndexSyncMode.AUTOkann Oracle den verwalteten Hybridindex asynchron aktualisieren. Er wird nur mitSearchStrategy.HYBRIDunterstützt. Die Schlüsselwortsuche lehntAUTOab. - memory_retention_config
MemoryRetentionConfig– Optionale Speicheraufbewahrungskonfiguration für DB-gesicherte Nachrichten und Speicher.MemoryRetentionConfig.default_ttl_dayswird verwendet, wenn ein neuer Schreibvorgangttl_daysauslässt.MemoryRetentionConfig.max_ttl_daysklemmt explizite Dauer pro Datensatz über dem konfigurierten Maximum mit einer Warnung. Wenn diese Option festgelegt ist, verwendetttl_days=Nonedieses Maximum, anstatt nicht ablaufende Zeilen zu erstellen. MitSchemaPolicy.CREATE_IF_NECESSARYaktualisiert eine explizite Konfiguration die gespeicherten Metadaten in einem vorhandenen aktuellen verwalteten Schema. Die vorhandenen Ablaufdaten werden jedoch nicht aktualisiert. Wenn Sie diese Option auslassen, wird die vorhandene Einstellung beibehalten. Wenn eine explizite Konfigurationdefault_ttl_daysodermax_ttl_daysunterNOT_SET_MARKERverlässt, löst das SDK dieses Attribut auf seinen Standardwert (None) auf, bevor Schemametadaten verglichen oder gespeichert werden. Wählen Sie diese Konfiguration basierend auf den erwarteten Informationen, die in Datensätzen gespeichert sind, dem Grund, warum die Anwendung sie aufrechterhält, und allen Verpflichtungen zur Beibehaltung von Anwendungen oder Vorschriften.
- embedder
- Raises: RuntimeError – Wenn ein Endbenutzer-Sicherheitskontext mit einer anderen Schema-Policy als
SchemaPolicy.NO_CHECKaktiv ist oder wenn einNO_CHECK-Laufzeitspeicher ohne aktiven Endbenutzer-Sicherheitskontext geöffnet oder verwendet wird.
Warnung: SchemaPolicy.CREATE_IF_NECESSARY kann teurer sein als der normale Speicherstart, da verwaltete Schemaobjekte repariert werden können, bevor die Initialisierung erfolgreich verläuft. Planen Sie Reparaturarbeiten als Wartungsvorgang, wenn ein Schema viele Zeilen enthalten kann. Für einen Speicher in einer älteren Schemaversion ist vor der Initialisierung ein Upgrade des Packageschemas erforderlich.
Wenn das Schemasetup den Löschjob für verwaltete abgelaufene Datensätze erstellen muss, dem Datenbankbenutzer jedoch die Berechtigung für den Scheduler-Job fehlt, warnt die Initialisierung und wird fortgesetzt. Abgelaufene Nachrichten und Speicher bleiben vor Lese- und Suchvorgängen verborgen, werden jedoch erst physisch gelöscht, wenn der Job von einem Benutzer mit CREATE JOB oder einer entsprechenden Scheduler-Berechtigung erstellt wurde.
Wenn SchemaPolicy.CREATE_IF_NECESSARY zum ersten Mal einen verwalteten Hybridindex über ein vorhandenes Schema erstellt, scannt Oracle den gespeicherten Suchtext und erstellt den verwalteten Hybridindexstatus aus dem konfigurierten datenbankinternen Modell. Die Speicherinitialisierung wartet, bis diese DDL abgeschlossen ist. Planen Sie daher das erste Hybridupgrade als Migrations- oder Wartungsvorgang für große Schemas. SearchIndexSyncMode steuert die laufende Wartung, nachdem der Index vorhanden ist. Die erste Indexerstellung wird nicht asynchron.
Wenn Sie diesen verwalteten Hybridindex erstellen, wird auch eine DBMS_VECTOR_CHAIN-Vektorisatorvoreinstellung erstellt, die vom verwalteten Schema benannt wird. Die Voreinstellung speichert Lightweight Vectorizer-Konfigurationsmetadaten aus dem konfigurierten OracleDBEmbedder-Modell. Er kann mit Oracle Text-Voreinstellungsansichten wie CTX_USER_PREFERENCES und CTX_USER_PREFERENCE_VALUES geprüft werden.
Methode add
Fügen Sie dem Oracle DB-Speicher Datensätze hinzu.
- Parameter:
- contents
Sequence[str | Mapping[str, object] | Sequence[MessageContent] | bytes | None]: Schreibgeschützte Sequenz von Datensatz-Payloads. Nachrichteneinträge können bestellteMessageContent-Teile enthalten. Thread-Zusammenfassungseinträge können Zuordnungen, Zeichenfolgen, die zu{"text": value}-Objekten werden, oderNonesein, die als JSONnullgespeichert werden. Textwerte werden auch für die Suche verwendet, es sei denn,index_textsist angegeben. Für andere Datensatztypen kannNoneaufmetadata["content"]zurückgreifen. Explizite leere Zeichenfolgen werden beibehalten. - record_type
str: Zu erstellender logischer Datensatztyp, wie"message","memory","guideline","fact","preference","user_profile","agent_profile"oder"thread_summary". - index_texts
list[str | list[str] | None]: Optionale alternative Payloads, die als Suchtext verwendet werden. Mit dieser Option können Sie steuern, welche DB-gesicherten Schlüsselwörter oder hybriden Suchindizes verwendet werden. Jeder äußere Listeneintrag wird an einem Datensatz ausgerichtet. Ein String-Eintrag kann vom Store geblockt werden. Ein Listeneintrag wird als Chunks im Besitz des Aufrufers behandelt und unverändert anRECORD_CHUNKS.chunk_textgeschrieben. Wenn auchembeddingsangegeben wird, erfordern Listeneinträge genau einen Vektor pro Chunk. Zeichenfolgeneinträge akzeptieren nur einen einzelnen Vektor für diesen Datensatz. -
Einbettungen
list[list[float] | ndarray | list[list[float] | ndarray]]–Optionale vorab berechnete Einbettungsvektoren, die auf
contentsausgerichtet sind. Jeder Datensatzeintrag kann entweder ein Vektor oder eine Liste von Chunk-Vektoren sein. Wenn ein lokaler Vektorspeicher konfiguriert ist, werden diese Vektoren direkt als Vektordarstellung des Datensatzes gespeichert, anstatt den Einbettungsordner des Speichers aufzurufen, um lokale Vektoren für den Schreibvorgang zu erstellen. Ein einzelner Vektor stellt den gesamten semantischen Text dar, auch wenn der konfigurierte Chunker ihn sonst teilen würde. Mehrere Chunk-Vektoren erfordern übereinstimmendeindex_texts-Chunk-Listen.In
SearchStrategy.VECTORwird die Vektorsuche anhand dieser gespeicherten Vektoren eingestuft. InSearchStrategy.HYBRIDoderSearchStrategy.KEYWORDstuft die DB-gestützte Suche den gespeicherten Suchtext und den von Oracle verwalteten Text- oder Hybridindexstatus ein. Daher wirken sich Einbettungen von Add-Time nur auf konfigurierten lokalen Vektorspeicher aus, nicht auf diese aktive Suchstrategie. Wenn dieser Speicher ohne lokalen Vektorspeicher konfiguriert wurde, geben Sieindex_textsanstelle vonembeddingsan, um den Text zu überschreiben, der für diese textbezogenen Indizes sichtbar ist. - record_ids
str | None | list[str | None]– Optionale durch Aufrufer sichtbare IDs. Für Einfügungen aus einem Datensatz kann eine einzelne Zeichenfolge verwendet werden, während Listen mitcontentsübereinstimmen müssen. Generierte Kennungen werden zurückgegeben, wenn dieses Feld ausgelassen wird. - thread_ids
str | None | list[str | None]– Optionale Thread-IDs, die den eingefügten Datensätzen zugeordnet sind. Skalare Werte können über ausgerichtete Eingaben übertragen werden. - user_ids
str | None | list[str | None]– Optionale Benutzer-IDs, die den eingefügten Datensätzen zugeordnet sind. Skalare Werte können über ausgerichtete Eingaben übertragen werden. Wenn der Speicher in einemSchemaPolicy.NO_CHECK-Laufzeitspeicher ausgelassen wird, verwendet er den Benutzernamen des aktiven Endbenutzersicherheitskontexts. Übergeben SieNoneexplizit, um eine nicht kopierte Benutzer-ID beizubehalten. - agent_ids
str | None | list[str | None]– Optionale Agent-IDs, die den eingefügten Datensätzen zugeordnet sind. Skalare Werte können über ausgerichtete Eingaben übertragen werden. - Rollen
str | None | list[str | None]– Optionale Nachrichtenrollen, wie"user"oder"assistant". Wird nur verwendet, wennrecord_type"message"ist. - Zeitstempel
str | None | list[str | None]– Optionale Zeitstempel zum Speichern mit den Datensätzen. Jeder Zeitstempel gibt an, wann der Datensatz erstellt wurde. Skalare Werte können über ausgerichtete Eingaben übertragen werden. Ohne Einträge oderNonewird der Ereigniszeitstempel nicht gesetzt. Wennttl_anchorTimeToLiveAnchor.TIMESTAMPist, muss jeder betroffene Datensatz einen konkreten ISO-8601-Zeitstempelwert aufweisen. ISO-8601-Zeitstempel ohne Zeitzone werden als UTC behandelt. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Optionale Metadatenwörterbücher. Metadaten können"content"als Fallback-Quelle enthalten, wenn ein Textwert ausgelassen und nicht auf""gesetzt wird. Für Imageschreibvorgänge ist"image_mime_type"mit"image/png","image/jpeg"oder"image/webp"erforderlich. Der Speicher verwendet dieses Feld, um das Bild zu speichern, gibt es jedoch nicht als Teil der Metadaten des Datensatzes zurück. - ttl_days
int | None | list[int | None]– Optionale Gültigkeitsdauer in Tagen für nachrichten- und speicherähnliche Datensätze. Lassen Sie dieses Argument weg, umMemoryRetentionConfig.default_ttl_daysaus dem verwalteten Schema zu verwenden. Übergeben SieNone, umMemoryRetentionConfig.max_ttl_dayszu verwenden, wenn die Aufbewahrungskonfiguration eine festlegt, oder um einen nicht ablaufenden Datensatz zu erstellen, wenn dies nicht der Fall ist. Werte überMemoryRetentionConfig.max_ttl_dayswerden mit einer Warnung auf dieses Maximum geklemmt. Skalare Werte können über ausgerichtete Eingaben übertragen werden. - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor]– Optionaler Time-to-Live-Anker. Verwenden SieTimeToLiveAnchor.CREATED_AT, um relativ zur Datenbankerstellungszeit abzulaufen, oderTimeToLiveAnchor.TIMESTAMP, um relativ zum angegebenen Ereigniszeitstempel abzulaufen. Wenn keine Angabe gemacht wird, verwendet der AblaufTimeToLiveAnchor.CREATED_AT. Zeitstempelverankertes Ablaufdatum erfordert einen konkreten ISO-8601-Zeitstempel für jeden eingefügten Datensatz. ISO-8601-Zeitstempel ohne Zeitzone werden als UTC behandelt. - Status
RecordStatus | list[RecordStatus]: Optionaler Lebenszyklusstatus für Datensätze, die ihn unterstützen. Geben Sie einenRecordStatus-Wert an, um ihn auf jeden Eingabedatensatz anzuwenden, oder eine Liste mit Statuswerten, die aufcontentsausgerichtet sind. Lassen Sie dieses Argument aus, umRecordStatus.VALIDzu verwenden. - **store_kwargs (Beliebig): DB-Schreiboptionen.
batch_sizesteuert die executemany-Batchgröße und ist standardmäßig auf256gesetzt.
- contents
- Rückgaben: IDs für eingefügte Datensätze in derselben logischen Reihenfolge wie die Eingabe.
- Rückgabetyp: list[str]
Beispiele
store.add(
["Index this stored text"],
record_type="memory",
record_ids="mem-db-add-docs",
)
['mem-db-add-docs']
store.add(
["Stored text"],
record_type="memory",
index_texts=["Search this text"],
record_ids="mem-db-index-text-docs",
)
['mem-db-index-text-docs']
store.add(
["Short-lived event"],
record_type="memory",
record_ids="mem-db-ttl-docs",
timestamps="2026-01-01T12:00:00+00:00",
ttl_days=7,
ttl_anchor=TimeToLiveAnchor.TIMESTAMP,
)
['mem-db-ttl-docs']
Methode add_agent
Agent-Profildatensatz hinzufügen.
- Parameter:
- agent_id
str: Agent-ID. - Informationen
str– Freiforminformationen zum Agent. Dieser Text wird als Profilinhalt gespeichert und zur Erstellung der durchsuchbaren Darstellung des Profils verwendet. - metadata
dict[str, Any] | None– Optionale Metadatenzuordnung, die in der Agent-Profilzeile gespeichert ist.
- agent_id
- Rücksendungen: ID des eingefügten Agent-Profildatensatzes.
- Rückgabetyp: str
Hinweise
Agent-Profildatensätze werden nicht kopiert. Die eingefügte öffentliche Datensatz-ID ist derselbe Wert, der als agent_id übergeben wird.
Beispiele
store.add_agent("a-docs-agent", "Support assistant")
'a-docs-agent'
Methode add_agent_async (asynchron)
Fügen Sie asynchron einen Agent-Profildatensatz hinzu.
- Parameter:
- agent_id
str: Stabile ID für das Agent-Profil. - Informationen
str– Freiformtext, der den Agent beschreibt. - metadata
dict[str, Any] | None– Optionale Metadatenzuordnung, die in der Agent-Profilzeile gespeichert ist.
- agent_id
- Retouren: ID des erstellten Agent-Profildatensatzes.
- Rückgabetyp: str
Methode add_async (asynchron)
Fügen Sie dem Speicher asynchron zeilenorientierte Datensätze hinzu.
Akzeptiert dieselben Argumente und gibt dieselben IDs wie add() zurück.
- Parameter:
- Inhalte
Sequence[str | Mapping[str, object] | Sequence[MessageContent] | bytes | None] - record_type
str - index_texts
list[str | list[str] | None] - Einbettungen
list[list[float] | ndarray | list[list[float] | ndarray]] - record_ids
str | None | list[str | None] - thread_ids
str | None | list[str | None] - user_ids
str | None | list[str | None] - agent_ids
str | None | list[str | None] - Rollen
str | None | list[str | None] - Zeitstempel
str | None | list[str | None] - Metadaten
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - Status
RecordStatus | list[RecordStatus] - store_kwargs
Any
- Inhalte
- Rückgabetyp: list[str]
Methode add_batches
Fügen Sie dem Speicher vom Aufrufer vorbereitete logische Batches hinzu.
- Parameter:
- Batches
list[PendingRecordBatch]– Vollständig vorbereitete logische Batches zum Persistieren. Jeder Batch muss eigene Felder pro Datensatz wierecord_type, Geltungsbereichswerte, Rollen, Zeitstempel und Metadaten enthalten. - **store_kwargs (Beliebig) – Implementierungsspezifische Schreiboptionen, die an den konkreten Speicher weitergeleitet werden.
- Batches
- Rückgaben: IDs für die eingefügten Datensätze in derselben logischen Reihenfolge wie die Eingabebatches und -zeilen.
- Rückgabetyp: Liste[str]
Beispiele
store.add_batches(
[
PendingRecordBatch(
contents=["pizza batch"],
record_type="memory",
record_ids="mem-batch-docs",
)
]
)
['mem-batch-docs']
Methode add_batches_async (asynchron)
Fügen Sie dem Speicher asynchron vom Aufrufer vorbereitete logische Batches hinzu.
Akzeptiert dieselben Argumente und gibt dieselben IDs wie add_batches() zurück.
- Parameter:
- Batches
list[PendingRecordBatch] - store_kwargs
Any
- Batches
- Rückgabetyp: list[str]
Methode add_relations
Speichern Sie mindestens eine Memory-to-Memory-Beziehung atomar.
Skalare Werte werden über den Quell-ID-Batch übertragen. Listen müssen ausgerichtet werden. Für ein Endpunktpaar darf nur eine Beziehungsausrichtung gespeichert werden. Integrierte Memory Link-Labels erhalten ihr festes Reverse Label, und Lebenszykluslabels aktualisieren den Endpunktstatus in derselben Transaktion.
- Parameter:
- source_record_ids
str | list[str]: Quellspeicher-IDs, als skalare oder ausgerichtete Liste. - source_record_types
str | list[str]: Speicherähnliche Typen für die Quelldatensätze. - target_record_ids
str | list[str]: Zielspeicher-IDs als skalare oder ausgerichtete Liste. - target_record_types
str | list[str]: Speicherähnliche Typen für die Zieldatensätze. - relation_types
str | list[str]: Label für gerichtete Beziehungen. - opposite_relation_types
str | list[str]– Optionale Reverse Labels für benutzerdefinierte Beziehungstypen. Dies beschreibt die umgekehrte Ansicht der gespeicherten Relation; sie erzeugt keine zweite Relation in umgekehrter Richtung. - relation_ids
str | None | list[str | None]– Optionale stabile Beziehungs-IDs. Auslassen, um Kennungen zu generieren. - Zeitstempel
str | None | list[str | None]– Optionale Zeitstempel, die mit den Beziehungen gespeichert werden. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Optionale Metadaten, die in den Beziehungen gespeichert sind.
- source_record_ids
- Rücksendungen: Beziehungs-IDs wurden in der eingegebenen Reihenfolge erstellt.
- Rückgabetyp: list[str]
Beispiele
store.add_relations(
"new-memory", "memory", "old-memory", "memory", "supersedes"
)
['relation-id']
Methode add_relations_async (asynchron)
Speichern Sie eine oder mehrere gerichtete Beziehungen asynchron.
Skalare Werte werden über den Quelldatensatzbatch übertragen. Listenwerte müssen dieselbe Länge haben. Für ein Endpunktpaar kann nur eine Ausrichtung gespeichert werden. Verwenden Sie opposite_relation_types, um die umgekehrte Ansicht zu beschreiben, anstatt eine zweite umgekehrte Beziehung hinzuzufügen.
- Parameter:
- source_record_ids
str | list[str]: Bezeichner oder Bezeichner von Datensätzen am Quellende jeder gerichteten Beziehung. - source_record_types
str | list[str]: Datensatztyp oder -typen fürsource_record_ids. Geben Sie einen Wert für alle Quellen oder einen Wert für jede Beziehung an. - target_record_ids
str | list[str]: Bezeichner oder Bezeichner von Datensätzen am Zielende jeder gerichteten Beziehung. - target_record_types
str | list[str]: Datensatztyp oder -typen fürtarget_record_ids. Geben Sie einen Wert für alle Ziele oder einen Wert für jede Beziehung an. - relation_types
str | list[str]: Label oder Labels für gerichtete Beziehungen. Geben Sie einen Wert für alle Beziehungen oder einen Wert für jede Beziehung an. - opposite_relation_types
str | list[str]– Optionale Beschriftungen oder Labels für die umgekehrte Ansicht jeder Beziehung. Bei integrierten Speicherbeziehungstypen verwendet das Weglassen das vordefinierte Reverse Label. Bei benutzerdefinierten Beziehungstypen verwendet das Auslassen dasselbe Label in beiden Richtungen. - relation_ids
str | None | list[str | None]– Optionale stabile IDs oder IDs. Lassen Sie diese Option aus, damit der Speicher IDs generiert. - Zeitstempel
str | None | list[str | None]– Optionaler Zeitstempel oder Zeitstempel zum Speichern in den Beziehungen. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Optionale Metadatenobjekte, die in den Beziehungen gespeichert werden sollen.
- source_record_ids
- Rücksendungen: Beziehungs-IDs in der eingegebenen Reihenfolge.
- Rückgabetyp: list[str]
Beispiele
await store.add_relations_async(
"new", "memory", "old", "memory", "supersedes"
)
['relation-id']
Methode add_user
Benutzerprofildatensatz hinzufügen
- Parameter:
- user_id
str: Benutzer-ID. Wenn der Speicher in einemSchemaPolicy.NO_CHECK-Laufzeitspeicher ausgelassen wird, verwendet er den Benutzernamen des aktiven Endbenutzersicherheitskontexts. Andernfalls geben Sie dieses Argument explizit an. - Informationen
str– Erforderliche Freiforminformationen zum Benutzer. Dieser Text wird als Profilinhalt gespeichert und zur Erstellung der durchsuchbaren Darstellung des Profils verwendet. - metadata
dict[str, Any] | None– Optionale Metadatenzuordnung, die in der Benutzerprofilzeile gespeichert ist.
- user_id
- Rücksendungen: ID des eingefügten Benutzerprofildatensatzes.
- Rückgabetyp: str
Hinweise
Benutzerprofildatensätze werden nicht kopiert. Die eingefügte öffentliche Datensatz-ID ist die explizite oder inferenzierte user_id.
Beispiele
store.add_user("u-docs-profile", "Prefers concise answers.")
'u-docs-profile'
Methode add_user_async (asynchron)
Fügen Sie asynchron einen Benutzerprofildatensatz hinzu.
- Parameter:
- user_id
str: Stabile ID für das Benutzerprofil. - Informationen
str– Freiformtext, der den Benutzer beschreibt. - metadata
dict[str, Any] | None– Optionale Metadatenzuordnung, die in der Benutzerprofilzeile gespeichert ist.
- user_id
- Rücksendungen: ID des erstellten Benutzerprofildatensatzes.
- Rückgabetyp: str
Methode delete
Löschen Sie einen verwalteten Datensatz und die zugehörigen Blockzeilen nach ID.
- Parameter:
- record_type
str: Zu löschendes Label für Datensatztyp. Unterstützte Typen sind"thread","message","memory","guideline","fact","preference","user_profile"und"agent_profile"und"thread_summary". - record_id
str: Zu löschende ID. - kaskadieren
bool: Wenn SieTrueverwenden, blenden Sie unterstützte Ziele der obersten Ebene, wie z.B. Akteurprofile, in die untergeordneten Zeilen des Geltungsbereichs innerhalb derselben Transaktion ein. Bei einem Benutzerprofil- oder Agent-Profilziel werden zuerst die eigenen Threadzeilen gelöscht. Dadurch werden die Threadzeilen mit Threadgeltungsbereich und die Zeilen der Speichertabellen entfernt. Anschließend werden alle verbleibenden direkt auf Akteur ausgerichteten Nachrichten und speicherähnlichen Zeilen gelöscht (memory,guideline,fact,preference). Diese Bereichsbereinigung wird noch ausgeführt, wenn die entsprechende Profilzeile bereits fehlt.
- record_type
- Rückgaben: Anzahl der angeforderten Ziele der obersten Ebene, die entfernt wurden, in der Regel
0oder1. Kaskadierte untergeordnete Zeilen werden nicht separat gezählt. Daher kann dies immer noch0sein, wenn ein fehlendes Akteurprofil eine bereichsbezogene Bereinigung auslöst. - Rückgabetyp: int
Hinweise
Der Vorgang wird innerhalb einer Transaktion ausgeführt. Wenn cascade für ein unterstütztes Ziel der obersten Ebene aktiviert ist, werden das Löschen des Profils und alle untergeordneten Löschvorgänge mit Geltungsbereich festgeschrieben oder zusammen zurückgesetzt.
Beispiele
store.add(["Delete me"], record_type="memory", record_ids="mem-delete-docs")
['mem-delete-docs']
store.delete("memory", "mem-delete-docs")
1
Methode delete_async (asynchron)
Löschen Sie asynchron einen gespeicherten Datensatz nach ID.
- Parameter:
- record_type
str: Logischer Typ des zu entfernenden Datensatzes. - record_id
str: ID des zu entfernenden Datensatzes. - cascade
bool– WennTrue, wenden Sie jedes vom Speicher unterstützte kaskadierende Löschverhalten für die angeforderten Ziele der obersten Ebene innerhalb desselben Löschvorgangs an. Dies wird hauptsächlich für Ziele wie Schauspielerprofile verwendet, die über weitere Datensätze mit Geltungsbereich verfügen. Beispiel: Eine Benutzerprofil- oder Agent-Profilkaskade kann eigene Threads selbst löschen, Nachrichten mit Thread-Geltungsbereich und speicherähnliche Datensätze, die mit diesen Threads entfernt wurden, sowie alle verbleibenden direkt Akteur-Geltungsdatensätze, wie Nachrichten, Speicher, Richtlinien, Fakten oder Voreinstellungen. Bei Löschvorgängen mit Akteurprofilen wird diese Bereichsbereinigung möglicherweise noch ausgeführt, wenn die entsprechende Profilzeile bereits fehlt.
- record_type
- Rücksendungen: Anzahl der angeforderten Datensätze der obersten Ebene, die gelöscht wurden, in der Regel
0oder1. Kaskadierte untergeordnete Zeilen werden nicht separat gezählt. Daher kann dies immer noch0sein, wenn ein fehlendes Akteurprofil eine bereichsbezogene Bereinigung auslöst. - Rückgabetyp: int
Methode delete_relations
Beziehungen nach ID löschen und Lebenszyklusstatus neu berechnen.
- Parameter: relation_ids
str | list[str]– ID oder IDs der zu löschenden Beziehungen. - Rücksendungen: Anzahl gelöschter Beziehungen.
- Rückgabetyp: int
Beispiele
store.delete_relations("relation-id")
1
Methode delete_relations_async (asynchron)
Relationen nach ID asynchron löschen.
Der Lebenszyklusstatus wird aus den verbleibenden Beziehungen neu berechnet.
- Parameter: relation_ids
str | list[str]– ID oder IDs der zu löschenden Beziehungen. - Rücksendungen: Anzahl gelöschter Beziehungen.
- Rückgabetyp: int
Beispiele
await store.delete_relations_async("relation-id")
1
Methode delete_thread
Thread und die zugehörigen gespeicherten Zeilen löschen
- Parameter: thread_id
str: Thread-ID, deren Zeilen entfernt werden sollen, einschließlich Threadzeile, abhängigen untergeordneten Zeilen und expliziter Bereinigung der Chunk-Zeile. - Rückgaben: Anzahl der gelöschten Threadzeilen (
0oder1). - Rückgabetyp: int
Hinweise
Verwenden Sie diesen Vorgang, wenn Sie eine Thread-bezogene kaskadierende Bereinigung benötigen. Wenn Sie den Thread im DB-Backed-Speicher löschen, wird die Zeile mit dem verwalteten Thread zusammen mit den zugehörigen Nachrichten- und Speicherzeilen sowie den für den Abruf verwalteten Suchdaten entfernt. Dies ist breiter als ein Löschvorgang auf Nachrichtenebene, bei dem nur die Zeile mit Raw-Nachrichten entfernt wird. Beim Löschen von Threads werden abhängige Nachrichten- und Speicherzeilen zusammen mit den zugehörigen Abrufdaten in derselben Transaktion entfernt.
Beispiele
store.delete_thread("c1")
0
Methode delete_thread_async (asynchron)
Löschen Sie asynchron einen Thread und die zugehörigen gespeicherten Daten.
- Parameter: thread_id
str– ID des zu entfernenden Threads. - Rückgaben: Anzahl der gelöschten Threaddatensätze, in der Regel
0oder1. - Rückgabetyp: int
Hinweise
Dies ist der Vorgang auf Speicherebene zum Entfernen eines Threads und der vom Speicher verwalteten Datensätze mit Threadbereich. Threadlöschung bevorzugen, wenn Aufbewahrungsanforderungen das Löschen von Quellnachrichten und abgeleiteten Speicherdaten mit Threadbereich erfordern, da Löschvorgänge auf Nachrichtenebene nicht bedeuten, dass separat persistente abgeleitete Datensätze entfernt werden.
Method get
Gespeicherten Datensatz nach Kennung abrufen
- Parameter:
- record_type
str– Das Label des Datensatztyps wird in eine verwaltete Zeile aufgelöst, wie"message","memory","guideline","fact","preference","thread","user_profile"oder"agent_profile"oder"thread_summary". - record_id
str: ID für die Suche. - include_bytes
bool– Gibt an, ob Bildbyte für Bilddatensätze oder angehängte Bilder für Meldungsdatensätze geladen werden sollen. Standard istFalse.
- record_type
- Rückgaben: Der Datensatz wird mit entschlüsselten Metadaten aufgefüllt, wenn er gefunden wird, andernfalls
None. - Rückgabetyp: Datensatz | Keine
Beispiele
store.add(["Remember this"], record_type="memory", record_ids="mem-get-docs")
['mem-get-docs']
store.get("memory", "mem-get-docs").id
'mem-get-docs'
Methode get_async (asynchron)
Einen gespeicherten Datensatz nach Typ und ID asynchron abrufen.
- Parameter:
- record_type
str: Logischer Typ des abzurufenden Datensatzes, wie"thread","message","memory","guideline","fact","preference","user_profile","agent_profile"oder"image". - record_id
str: ID des abzurufenden Datensatzes. - include_bytes
bool– Gibt an, ob gespeicherte Imagebyte geladen werden sollen. Bei einem Meldungsdatensatz steuert dies, ob angehängte Bilder ihre Byte enthalten. Bei einem Bilddatensatz wird gesteuert, ob die eigenständigen Bildbytes geladen werden. Diese Option hat keine Auswirkungen auf andere Datensatztypen.
- record_type
- Rücksendungen: Der gespeicherte Datensatz, wenn er gefunden wird. Andernfalls wird
Noneverwendet. Ein"thread"-Lookup gibt einenThreadRecordmit Threadmetadaten, Laufzeitkonfiguration, Laufzeitstatus und dem Erstellungszeitstempel zurück, der aufgefüllt wird, wenn der Speicher persistente Threads unterstützt. - Rückgabetyp: Datensatz | Keine
Methode get_relation
Gibt eine Beziehung zurück, die durch ID oder vollständiges Endpunkttupel identifiziert wurde.
Geben Sie relation_id allein an, oder geben Sie ein vollständiges Source-to-Ziel-Endpunkt-Tupel an.
- Parameter:
- source_record_id
str: Quelldatensatz-ID. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - source_record_type
str: Quelldatensatztyp. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - target_record_id
str: ID des Zieldatensatzes. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - target_record_type
str- Zieldatensatztyp. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - relation_type
str: Label für gerichtete Beziehung. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - relation_id
str: Beziehungs-ID, die direkt abgeglichen werden soll. Geben Sie dieses Argument alleine an, anstatt es mit Endpunkt-Tupelfeldern zu kombinieren.
- source_record_id
- Rückgaben: Die übereinstimmende gespeicherte Beziehung oder
None, wenn sie nicht vorhanden ist. - Rückgabetyp: RecordRelation | Keine
Beispiele
store.get_relation(relation_id="relation-id")
RecordRelation(...)
store.get_relation(
"source-id", "memory", "target-id", "fact", "supports"
)
RecordRelation(...)
Methode get_relation_async (asynchron)
Rufen Sie asynchron eine Beziehung nach ID oder Endpunkttupel ab.
Geben Sie relation_id allein an, oder geben Sie ein vollständiges Source-to-Ziel-Endpunkt-Tupel an.
- Parameter:
- source_record_id
str: Quelldatensatz-ID. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - source_record_type
str: Quelldatensatztyp. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - target_record_id
str: ID des Zieldatensatzes. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - target_record_type
str- Zieldatensatztyp. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - relation_type
str: Label für gerichtete Beziehung. Bei den anderen Endpunkt-Tupelfeldern erforderlich, wennrelation_idausgelassen wird. - relation_id
str: Beziehungs-ID, die direkt abgeglichen werden soll. Geben Sie dieses Argument alleine an, anstatt es mit Endpunkt-Tupelfeldern zu kombinieren.
- source_record_id
- Rückgaben: Die übereinstimmende Beziehung oder
None, wenn sie nicht vorhanden ist. - Rückgabetyp: RecordRelation | Keine
Beispiele
await store.get_relation_async(relation_id="relation-id")
RecordRelation(...)
Methode list
Permanente Datensätze für einen Datensatztyp auflisten.
- Parameter:
- record_type
str: Label des Datensatztyps (z.B."thread","message","memory","guideline","fact","preference","thread","user_profile"oder"agent_profile"). - limit
int | None– Optionale maximale Anzahl zurückzugebender Datensätze. Wenn dieser Wert ausgelassen wird, verwendet der Store seine Standard-Auflistungs-Cap. Übergeben SieNone, um diese Memory Cap zu deaktivieren und jeden übereinstimmenden Datensatz zurückzugeben. - thread_id
str | None– Exakter Thread-Geltungsbereichsfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Zeilen zurückgegeben, derenthread_idSQLNULList. Nicht kopierte Datensatztypen ignorieren diesen Filter. Wennrecord_type"thread"ist, darfthread_idnicht festgelegt werden. Verwenden Sierecord_id, um einen bestimmten Thread auszuwählen. - user_id
str | None: Exakter Filter für den Benutzerumfang. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Zeilen zurückgegeben, derenuser_idSQLNULList. Nicht kopierte Datensatztypen ignorieren diesen Filter. - agent_id
str | None: Exakter Agent-Geltungsbereichsfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Zeilen zurückgegeben, derenagent_idSQLNULList. Nicht kopierte Datensatztypen ignorieren diesen Filter. -
metadata_filter
dict[str, Any] | None–Metadatenfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert auf
Nonegesetzt ist, werden nur Datensätze ohne gespeicherte Metadaten zurückgegeben. Wenn dies auf ein Diktat gesetzt ist, werden Einträge inmetadata_filtermit AND-Semantik kombiniert. Einträge, deren Wert kein Operatordictionary auf Feldebene ist, verwenden eine genaue Übereinstimmungssemantik: Der angeforderte Schlüssel muss in den gespeicherten Metadaten vorhanden sein. Verschachtelte Wörterbücher werden rekursiv abgeglichen. Skalare und Listenwerte werden durch exakte Gleichheit abgeglichen; Listenreihenfolge und -länge müssen ebenfalls übereinstimmen. Um die Arraymitgliedschaft zu testen, verwenden Sie ein Operatordictionary auf Feldebene, wie{"tags": {"$array_contains": "prod"}}. Ein Listenoperand für"$array_contains"bedeutet, dass alle aufgelisteten Werte vorhanden sein müssen."$array_contains_any"bedeutet, dass mindestens ein aufgelisteter Wert vorhanden sein muss. Verwenden Sie"$not", um einen anderen Ausdruck auf Feldebene in demselben Feld zu negieren, einschließlich eines Operator-Dictionarys oder eines Raw-Exact-Match-Wertes. Negierte Ausdrücke stimmen überein, wenn der positive Ausdruck fehlschlagen würde, einschließlich fehlender Felder; negierte Array-Mitgliedschaft stimmt auch mit Nicht-Array-Feldern überein. Beispiele:metadata_filter={"source": "slack"}für ein skalares Feld,metadata_filter={"review": {"status": "open"}}für ein verschachteltes Feld undmetadata_filter={"tags": ["prod", "urgent"]}für eine genaue Listenübereinstimmung. Kombinieren Sie Bedingungen, um sie alle zu benötigen:metadata_filter={ "source": "slack", "review": {"status": "open"}, "tags": ["prod", "urgent"], } - include_bytes
bool– Gibt an, ob Bilddatensätze oder Bilder, die an Meldungsdatensätze angehängt sind, ihre gespeicherten Byte enthalten. Standard istFalse. Für direkte Imageangebote ist einrecord_id- und mindestens ein genauer Benutzer-, Agent- oder Threadbereichsfilter erforderlich, wenn diesTrueist. - record_id
str: Exakter Datensatz-ID-Filter. Wenn diese Option ausgelassen wird, werden Datensätze mit einer beliebigen ID zurückgegeben. Geltungsbereich und Metadatenfilter bleiben zusätzliche Constraints.
- record_type
- Retouren: Datensätze nach Einfügereihenfolge sortiert.
- Liste Rückgabetyp:[Datensatz]
Hinweise
"user_profile" und "agent_profile" sind nicht kopierte Datensatztypen. Für diese Datensatztypen werden thread_id, user_id und agent_id ignoriert, und die Akteuridentität bleibt in record.id. "thread"-Datensätze geben die Thread-ID als record.id und record.thread_id an.
Beispiele
store.add(
["First listed", "Second listed"],
record_type="memory",
record_ids=["mem-list-docs-1", "mem-list-docs-2"],
)
['mem-list-docs-1', 'mem-list-docs-2']
[record.id for record in store.list("memory", limit=2)]
['mem-list-docs-1', 'mem-list-docs-2']
store.add_user("u-list-docs", "Prefers concise answers.")
'u-list-docs'
any(
record.id == "u-list-docs"
for record in store.list("user_profile", user_id=None, limit=10)
)
True
Methode list_async (asynchron)
Listet gespeicherte Datensätze für einen Datensatztyp asynchron auf.
- Parameter:
- record_type
str– Zu aufzählender logischer Datensatztyp, wie"thread","message","memory","guideline","fact","preference","user_profile","agent_profile"oder"image". - limit
int | None– Optionale maximale Anzahl der zuletzt zurückgegebenen Datensätze. Wenn diese Option ausgelassen wird, können Implementierungen einen sicheren oberen Grenzwert wieMAX_LIST_LIMITanwenden. Übergeben SieNone, um diese Memory Cap zu deaktivieren und jeden übereinstimmenden Datensatz zurückzugeben. - thread_id
str | None– Exakter Thread-Geltungsbereichsfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Datensätze zurückgegeben, derenthread_idNoneist. Nicht kopierte Datensatztypen ignorieren diesen Filter. Wennrecord_type"thread"ist, darfthread_idnicht festgelegt werden. Verwenden Sierecord_id, um einen bestimmten Thread auszuwählen. - user_id
str | None: Exakter Filter für den Benutzerumfang. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Datensätze zurückgegeben, derenuser_idNoneist. Nicht kopierte Datensatztypen ignorieren diesen Filter. - agent_id
str | None: Exakter Agent-Geltungsbereichsfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Datensätze zurückgegeben, derenagent_idNoneist. Nicht kopierte Datensatztypen ignorieren diesen Filter. -
metadata_filter
dict[str, Any] | None–Metadatenfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert auf
Nonegesetzt ist, werden nur Datensätze zurückgegeben, deren MetadatenNonesind. Wenn dies auf ein Diktat gesetzt ist, werden Einträge inmetadata_filtermit AND-Semantik kombiniert. Einträge, deren Wert kein Operatordictionary auf Feldebene ist, verwenden eine genaue Übereinstimmungssemantik: Der angeforderte Schlüssel muss in den gespeicherten Metadaten vorhanden sein. Verschachtelte Wörterbücher werden rekursiv abgeglichen. Skalare und Listenwerte werden durch exakte Gleichheit abgeglichen; Listenreihenfolge und -länge müssen ebenfalls übereinstimmen. Um die Arraymitgliedschaft zu testen, verwenden Sie ein Operatordictionary auf Feldebene, wie{"tags": {"$array_contains": "prod"}}. Ein Listenoperand für"$array_contains"bedeutet, dass alle aufgelisteten Werte vorhanden sein müssen."$array_contains_any"bedeutet, dass mindestens ein aufgelisteter Wert vorhanden sein muss. Verwenden Sie"$not", um einen anderen Ausdruck auf Feldebene in demselben Feld zu negieren, einschließlich eines Operator-Dictionarys oder eines Raw-Exact-Match-Wertes. Negierte Ausdrücke stimmen überein, wenn der positive Ausdruck fehlschlagen würde, einschließlich fehlender Felder; negierte Array-Mitgliedschaft stimmt auch mit Nicht-Array-Feldern überein. Beispiele:metadata_filter={"source": "slack"}für ein skalares Feld,metadata_filter={"review": {"status": "open"}}für ein verschachteltes Feld undmetadata_filter={"tags": ["prod", "urgent"]}für eine genaue Listenübereinstimmung. Kombinieren Sie Bedingungen, um sie alle zu benötigen:metadata_filter={ "source": "slack", "review": {"status": "open"}, "tags": ["prod", "urgent"], } - include_bytes
bool– Gibt an, ob Bilddatensätze oder Bilder, die an Meldungsdatensätze angehängt sind, ihre gespeicherten Byte enthalten. Wenn keine Angabe gemacht wird oderFalse, werden Bildbeschreibungen und Metadaten zurückgegeben, ohne Byte zu laden. Setzen Sie dies bei direkten Bildlisten nur mit einem exaktenrecord_id- und mindestens einem exakten Benutzer-, Agent- oder Threadbereichsfilter aufTrue. Diese Option hat keine Auswirkungen auf andere Datensatztypen. - record_id
str: Exakter Datensatz-ID-Filter. Wenn diese Option ausgelassen wird, werden Datensätze mit einer beliebigen ID zurückgegeben. Geltungsbereich und Metadatenfilter bleiben zusätzliche Constraints.
- record_type
- Rücksendungen: Datensätze, die im zurückgegebenen Fenster von "ältesten" auf "neueste" sortiert wurden.
- Rückgabetyp: Liste[Datensatz]
Methode list_relations
Listen Sie Beziehungen in ihrer Quell-zu-Ziel-Orientierung auf.
- Parameter:
- relation_type
str– Optionales zuzuordnendes Label für gerichtete Beziehungen, wie"supports"oder"supersedes". Weglassen, um jeden Beziehungstyp einzuschließen. - source_record_id
str: Optionale übereinstimmende Quelldatensatz-ID. - source_record_type
str: Optionaler abzugleichender Quelldatensatztyp. - target_record_id
str: Optionale Zieldatensatz-ID für den Abgleich. - target_record_type
str: Optionaler Zieldatensatztyp für den Abgleich. - Limit
int | None– Optionale maximale Anzahl von Beziehungen, die am frühesten erstellt werden sollen. Wenn er ausgelassen wird, verwendet der SpeicherMAX_LIST_LIMIT. Übergeben SieNone, um jede übereinstimmende gespeicherte Beziehung zurückzugeben. - metadata_filter
dict[str, Any] | None– Metadatenfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Beziehungen zurückgegeben, deren MetadatenNonesind. Wenn dies auf ein Diktat gesetzt ist, werden Einträge mit AND-Semantik kombiniert. Verschachtelte Wörterbücher verwenden rekursiven exakten Abgleich. Skalare und Listenwerte erfordern eine exakte Gleichheit. Verwenden Sie{"tags": {"$array_contains": "prod"}}, um die Arraymitgliedschaft abzugleichen,"$array_contains_any", um einen aufgelisteten Wert abzugleichen, oder"$not", um einen anderen Feldausdruck zu negieren. - relation_id
str: Exakter Beziehungs-ID-Filter. Wenn diese Option ausgelassen wird, werden Beziehungen mit einer beliebigen ID zurückgegeben. Andere Filter bleiben zusätzliche Einschränkungen.
- relation_type
- Rücksendungen: Beziehungen werden nach Erstellungszeit und ID sortiert.
- Liste Rückgabetyp:[RecordRelation]
Beispiele
store.list_relations(
source_record_id="current-memory",
relation_type="supports",
metadata_filter={"source": "manual"},
)
[RecordRelation(...)]
Methode list_relations_async (asynchron)
Listen Sie Beziehungen asynchron in der Ausrichtung von Quelle zu Ziel auf.
- Parameter:
- relation_type
str– Optionales zuzuordnendes Label für gerichtete Beziehungen, wie"supports"oder"supersedes". Weglassen, um jeden Beziehungstyp einzuschließen. - source_record_id
str: Optionale übereinstimmende Quelldatensatz-ID. - source_record_type
str: Optionaler abzugleichender Quelldatensatztyp. - target_record_id
str: Optionale Zieldatensatz-ID für den Abgleich. - target_record_type
str: Optionaler Zieldatensatztyp für den Abgleich. - Limit
int | None– Optionale maximale Anzahl von Beziehungen, die am frühesten erstellt werden sollen. Wenn diese Option ausgelassen wird, können Implementierungen einen sicheren oberen Grenzwert wieMAX_LIST_LIMITanwenden. Übergeben SieNone, um jede übereinstimmende gespeicherte Beziehung zurückzugeben. - metadata_filter
dict[str, Any] | None– Metadatenfilter. Wenn keine Filter angewendet werden, wird keine Filterung angewendet. Wenn dieser Wert aufNonegesetzt ist, werden nur Beziehungen zurückgegeben, deren MetadatenNonesind. Wenn dies auf ein Diktat gesetzt ist, werden Einträge mit AND-Semantik kombiniert. Verschachtelte Wörterbücher verwenden rekursiven exakten Abgleich. Skalare und Listenwerte erfordern eine exakte Gleichheit. Verwenden Sie{"tags": {"$array_contains": "prod"}}, um die Arraymitgliedschaft abzugleichen,"$array_contains_any", um einen aufgelisteten Wert abzugleichen, oder"$not", um einen anderen Feldausdruck zu negieren. - relation_id
str: Optionale Beziehungs-ID, die direkt abgeglichen werden soll.
- relation_type
- Rücksendungen: Beziehungen werden nach Erstellungszeit und ID sortiert.
- Liste Rückgabetyp:[RecordRelation]
Beispiele
await store.list_relations_async(
source_record_id="current-memory", relation_type="supports"
)
[RecordRelation(...)]
Methode list_thread_messages
Permanente Nachrichten für einen Thread zurückgeben.
- Parameter:
- thread_id
str: Thread-ID, deren Nachrichten zurückgegeben werden sollen. - last_n
int | None– Optionale Anzahl der zuletzt zurückgegebenen Nachrichten. - range_start_seq_no
int | None– Optional inklusive untere Sequenzgrenze. - range_end_seq_no
int | None– Optionale exklusive obere Sequenzgrenze. - include_bytes
bool– Gibt an, ob Imageteile, die an die zurückgegebenen Nachrichten angehängt sind, ihre gespeicherten Byte enthalten. Standard istFalse.
- thread_id
- Rücksendungen: Nach Einfügereihenfolge sortierte Meldungsdatensätze.
- Liste Rückgabetyp:[MessageRecord]
Beispiele
store.list_thread_messages("c1")
[]
Methode list_thread_messages_async (asynchron)
Listen Sie die für einen Thread gespeicherte Nachrichtenhistorie asynchron auf.
- Parameter:
- thread_id
str: ID des Threads, dessen Nachrichten zurückgegeben werden sollen. - last_n
int | None– Optionale Anzahl der zuletzt aufzunehmenden Nachrichten. Wenn diese Option ausgelassen wird, werden alle gespeicherten Nachrichten für den Thread zurückgegeben. In Kombination mit einem Sequenzbereich gilt die Grenze innerhalb dieses Bereichs. - range_start_seq_no
int | None– Optional inklusive untere Sequenzgrenze. Es werden nur Nachrichten zurückgegeben, derenseq_nomindestens dieser Wert ist. - range_end_seq_no
int | None– Optionale exklusive obere Sequenzgrenze. Es werden nur Nachrichten zurückgegeben, derenseq_nokleiner als dieser Wert ist. - include_bytes
bool– Gibt an, ob Imageteile, die an die zurückgegebenen Nachrichten angehängt sind, ihre gespeicherten Byte enthalten. Wenn keine Angabe gemacht wird oderFalse, werden Bildbeschreibungen und Metadaten zurückgegeben, ohne Byte zu laden.
- thread_id
- Rücksendungen: Meldungsdatensätze werden im zurückgegebenen Fenster vom ältesten zum neuesten sortiert.
- Rückgabetyp: Liste[MessageRecord]
Methode search
Datensätze nach Ähnlichkeit suchen
Das aktive Such-Backend hängt vom konfigurierten SearchStrategy des Speichers ab. SearchStrategy.VECTOR ordnet den Abfragevektor den gespeicherten Datensatzvektoren zu. SearchStrategy.HYBRID fragt den verwalteten Hybridindex von Oracle über den gespeicherten Suchtext und den Status des verwalteten Index ab. SearchStrategy.KEYWORD wird nur nach übereinstimmendem Text über dem gespeicherten Suchtext sortiert.
- Parameter:
- query
str | None– Optionaler Text in natürlicher Sprache, mit dem übereinstimmende oder ähnliche Datensätze gesucht werden. Geben Sie mindestens ein Nicht-Leerzeichen an, wennquery_vectorausgelassen wird. Die Vektorsuche bettet diesen Text ein; die Stichwortsuche gleicht ihn mit dem gespeicherten Suchtext ab; die hybride Suche verwendet ihn sowohl für den Text- als auch für den Vektorabruf. Wenn der Text die konfigurierte Chunk-Größe überschreitet, durchsucht der Store jeden Abfrage-Chunk separat und führt die eingestuften Ergebnisse mit reziproker Rangfusion zusammen. - query_vector
list[float] | None– Optionale vorberechnete Abfrageeinbettung. Es muss genau einer vonqueryundquery_vectorangegeben werden. Bei der Vektorsuche wird dies mit gespeicherten Datensatzvektoren verglichen. Bei der hybriden Suche wird sie als abfrageseitige Vektoreingabe an den verwalteten Hybridindex von Oracle gesendet und führt nicht dazu, dass der DB-Speicher direkt mit gespeicherten Vektoren für Add-Time- oder Update-Time-Vorgänge verglichen wird. Die Stichwortsuche akzeptiertquery_vectornicht. Der Vektor darf nicht leer, eindimensional sein und nur endliche numerische Werte enthalten. Bei der hybriden Suche muss die zugehörige Dimension mit dem konfiguriertenOracleDBEmbedder-Modell übereinstimmen. - k
int– Maximale Anzahl von Ergebnissen, die zurückgegeben werden können. Explizite Werte müssen mindestens1sein. Dies ist ein oberer Grenzwert: Der Aufruf gibt möglicherweise weniger alsk-Ergebnisse zurück, wenn Filter zu restriktiv sind, wenn weniger nicht abgelaufene übereinstimmende Datensätze vorhanden sind oder das implementierungsspezifische Suchverhalten vorliegt. - thread_id
str | None– Optionale Thread-Geltungsbereichs-ID.exact_thread_match=Falselässt die Threaddimension uneingeschränkt bestehen.exact_thread_match=Trueentspricht genau dem angegebenenthread_id. Wennthread_id=Noneverwendet wird, werden nur Datensätze abgeglichen, die in der Threaddimension nicht kopiert wurden. - user_id
str | None– Optionale Geltungsbereichs-IDs für Benutzer und Agents. Das entsprechende Kennzeichenexact_*_match=Falselässt diese Dimension uneingeschränkt bestehen.exact_*_match=Truestimmt genau mit der angegebenen ID überein. Wenn die IDNonelautet, entspricht sie nur Datensätzen, die in dieser Dimension nicht kopiert wurden. - agent_id
str | None– Optionale Geltungsbereichs-IDs von Benutzern und Agents. Das entsprechende Kennzeichenexact_*_match=Falselässt diese Dimension uneingeschränkt bestehen.exact_*_match=Truestimmt genau mit der angegebenen ID überein. Wenn die IDNonelautet, entspricht sie nur Datensätzen, die in dieser Dimension nicht kopiert wurden. - exact_user_match
bool: Gibt an, ob jede Geltungsbereichs-ID genau abgeglichen werden muss. BeiFalseist diese Dimension uneingeschränkt.Truestimmt genau mit dem angegebenen Wert überein. Wenn dieser WertNonelautet, werden nur nicht kopierte Datensätze in dieser Dimension abgeglichen. - exact_agent_match
bool: Gibt an, ob jede Geltungsbereichs-ID genau abgeglichen werden muss. BeiFalseist diese Dimension uneingeschränkt.Truestimmt genau mit dem angegebenen Wert überein. Wenn dieser WertNonelautet, werden nur nicht kopierte Datensätze in dieser Dimension abgeglichen. - exact_thread_match
bool– Gibt an, ob jede Geltungsbereichs-ID genau abgeglichen werden muss. BeiFalseist diese Dimension uneingeschränkt.Truestimmt genau mit dem angegebenen Wert überein. Wenn dieser WertNonelautet, werden nur nicht kopierte Datensätze in dieser Dimension abgeglichen. - record_types
set[str] | None: Optionale Gruppe durchsuchbarer Datensatztypen, die eingeschlossen werden sollen. Wenn diese Option ausgelassen wird, deckt die DB-Suche Nachrichten, Dokumente wie Bilder, Zeilen von Speichertabellen und Akteurprofile ab. Bilddatensätze tragen ihre Beschreibung bei, Akteurprofile tragen ihreinformation-Payload bei, und Nachrichten- und Speicherzeilen tragen zurcontent-Payload bei. Während der Suche verwenden Profildatensatztypen ihre Darsteller-ID für die anwendbare Umfangsdimension, während sich die verbleibenden Umfangsdimensionen wieNoneverhalten. - metadata_filter
dict[str, Any] | None– Optionale Metadatenfilterzuordnung. Einträge inmetadata_filterwerden mit AND-Semantik kombiniert. Einträge, deren Wert kein Operatordictionary auf Feldebene ist, verwenden eine genaue Übereinstimmungssemantik: Der angeforderte Schlüssel muss in den gespeicherten Metadaten vorhanden sein. Verschachtelte Wörterbücher werden rekursiv abgeglichen. Skalare und Listenwerte werden durch exakte Gleichheit abgeglichen; Listenreihenfolge und -länge müssen ebenfalls übereinstimmen. Um die Arraymitgliedschaft zu testen, verwenden Sie ein Operatordictionary auf Feldebene, wie{"tags": {"$array_contains": "prod"}}. Ein Listenoperand für"$array_contains"bedeutet, dass alle aufgelisteten Werte vorhanden sein müssen."$array_contains_any"bedeutet, dass mindestens ein aufgelisteter Wert vorhanden sein muss. Verwenden Sie"$not", um einen anderen Ausdruck auf Feldebene in demselben Feld zu negieren, einschließlich eines Operator-Dictionarys oder eines Raw-Exact-Match-Wertes. Negierte Ausdrücke stimmen überein, wenn der positive Ausdruck fehlschlagen würde, einschließlich fehlender Felder; negierte Array-Mitgliedschaft stimmt auch mit Nicht-Array-Feldern überein. - include_invalid_results
bool– Gibt an, ob Ergebnisse speicherähnliche Datensätze mit dem ungültigen Status enthalten. Der Standardwert istTrue. Übergeben SieFalse, um sie auszuschließen. - num_hops
int: Anzahl der Memory Link-Ränder, die von jedem Direct Memory-Ergebnis gefolgt werden sollen. Werte von0bis5werden unterstützt.0deaktiviert die Diagrammerweiterung. Erweiterung folgt Links in beide Richtungen. Verknüpfte Datensätze erfüllen weiterhin die angeforderten Geltungsbereiche, Metadaten, den Datensatztyp und die Ablauffilter. Ergebnisse für direkte Nachrichten, Dokumente und Profile verbleiben in der Ergebnismenge, werden jedoch nicht grafisch erweitert. - max_linked_results
int: Maximal verknüpfte Speicher über alle Hops hinweg, die an jedes direkte Ergebnis angehängt sind.0behält direkte Ergebnisse ohne verknüpften Kontext bei. Standard ist100.
- query
- Rückgaben:
(record, distance)-Paare nach zunehmender Entfernung sortiert. Die Liste kann weniger alsk-Einträge enthalten. Bei einer Chunk-Abfrage wird der Abstand vom Reziproken-Rang-Fusionsscore abgeleitet. - Rückgabetyp: list[tuple[Record, float]]
- Erhöht:
- ValueError – Wenn
kkleiner als1ist, wenn sowohlqueryals auchquery_vectorangegeben sind, wennqueryleer ist, wenn der Vektormodus eine Abfrageeinbettung nicht auflösen kann, wennquery_vectorungültig ist oder wennmetadata_filterungültig ist. - TimeoutError – Wenn die Diagrammerweiterung mehr als die zulässige maximale Zeit in Anspruch nimmt.
- ValueError – Wenn
Beispiele
store.add(
["pizza preference"],
record_type="memory",
record_ids="mem-search-docs",
thread_ids="c-search-docs",
)
['mem-search-docs']
results = store.search(
"pizza",
1,
thread_id="c-search-docs",
exact_thread_match=True,
record_types={"memory"},
)
results[0][0].id
'mem-search-docs'
Nach einem skalaren Metadatenwert filtern:
store.add(
["pizza release"],
record_type="memory",
record_ids="mem-search-meta-source-docs",
metadata={"source": "slack"},
)
['mem-search-meta-source-docs']
any(
record.id == "mem-search-meta-source-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"source": "slack"},
)
)
True
Nach verschachtelten Metadaten filtern:
store.add(
["pizza review"],
record_type="memory",
record_ids="mem-search-meta-review-docs",
metadata={"review": {"status": "open"}},
)
['mem-search-meta-review-docs']
any(
record.id == "mem-search-meta-review-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"review": {"status": "open"}},
)
)
True
Ordnen Sie einen Listenwert genau zu, einschließlich Reihenfolge:
store.add(
["pizza tags"],
record_type="memory",
record_ids="mem-search-meta-tags-docs",
metadata={"tags": ["prod", "urgent"]},
)
['mem-search-meta-tags-docs']
any(
record.id == "mem-search-meta-tags-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"tags": ["prod", "urgent"]},
)
)
True
Filtern, wenn ein Metadaten-Array einen Wert enthält:
any(
record.id == "mem-search-meta-tags-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"tags": {"$array_contains": "prod"}},
)
)
True
Mehrere Metadatenbedingungen kombinieren Ein Datensatz muss jeden Schlüssel erfüllen:
store.add(
["pizza rollout"],
record_type="memory",
record_ids="mem-search-meta-combined-docs",
metadata={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
['mem-search-meta-combined-docs']
any(
record.id == "mem-search-meta-combined-docs"
for record, _ in store.search(
"pizza",
k=5,
metadata_filter={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
)
True
Methode search_async (asynchron)
Suchen Sie Datensätze asynchron nach semantischer Ähnlichkeit.
- Parameter:
- query
str | None– Gleicher Abfragetext, der vonsearchakzeptiert wird. - k
int– Dieselbe maximale Ergebnisanzahl, die vonsearchakzeptiert wird. Explizite Werte müssen mindestens1sein. - query_vector
list[float] | None– Dieselbe optionale vorberechnete Abfrageeinbettung wurde vonsearchakzeptiert. - thread_id
str | None– Dieselben optionalen Geltungsbereichsfilter werden vonsearchakzeptiert. - user_id
str | None– Dieselben optionalen Geltungsbereichsfilter werden vonsearchakzeptiert. - agent_id
str | None– Dieselben optionalen Geltungsbereichsfilter, die vonsearchakzeptiert werden. - exact_user_match
bool: Identische Flags mit genauer Übereinstimmung, die vonsearchakzeptiert werden. - exact_agent_match
bool: Identische Flags mit genauer Übereinstimmung, die vonsearchakzeptiert werden. - exact_thread_match
bool– Gleiche Flags mit exakter Übereinstimmung werden vonsearchakzeptiert. - record_types
set[str] | None: Derselbe optionale Datensatztypfilter wurde vonsearchakzeptiert. - metadata_filter
dict[str, Any] | None– Gleicher optionaler Metadatenfilter, der vonsearchakzeptiert wird, einschließlich skalarer, verschachtelter, exakter Liste, Array-Mitgliedschaft und kombinierter Bedingungen wie{"source": "slack"},{"review": {"status": "open"}},{"tags": ["prod", "urgent"]}und{"tags": {"$array_contains": "prod"}}. - include_invalid_results
bool– Dieselbe Ergebnisoption für den Lebenszyklusstatus wurde vonsearchakzeptiert. - num_hops
int– Gleiche Diagrammausdehnungstiefe, die vonsearchakzeptiert wird. - max_linked_results
int– Gleiches Limit für verknüpfte Speicher pro direktem Ergebnis, das vonsearchakzeptiert wird.
- query
- Rückgaben:
(record, distance)-Paare, die vom zugrunde liegendensearch-Aufruf zurückgegeben werden. - Rückgabetyp: Liste[tuple[Record, float]]
- Gelöst: ValueError – Wenn
kkleiner als1ist.
Methode update
Aktualisieren Sie gespeicherten Datensatzinhalt, Suchstatus, Metadaten und Zeitstempelwerte.
- Parameter:
- record_type
str: Label des Datensatztyps der zu ändernden Zeile (Beispiel:"message","memory","guideline","fact","preference","user_profile"oder"agent_profile") - record_id
str: ID der zu aktualisierenden gespeicherten Zeile. - content
str | Mapping[str, object] | Sequence[MessageContent] | bytes | None: Kanonischer Ersatzinhalt wird in der Spaltecontentbeibehalten. Bei Meldungsdatensätzen übergeben Sie"", um den Inhalt zu löschen, während Sie eine gespeicherte Vektordarstellung löschen. expliziteNonewird abgelehnt. Bei speicherähnlichen Datensätzen übergeben SieNone, um den gespeicherten Text und die Einbettung zu löschen, und übergeben Sie nurNoneoder weglassen Sie semantische Argumente im selben Aufruf. Wird der Inhalt ausgelassen, bleibt der vorhandene Inhalt unverändert. Geben Sie dies nicht zusammen mittextan. - index_text
str | list[str] | None– Optionale reine Semantik-Payload. Wenn keine Angabe gemacht wird, wirdcontentfür die semantische Indexierung verwendet. Bei hybridfähigen Schemas wird dies auch der gespeicherte Suchtext, der von der Textkomponente von Oracle verwendet wird. Ein Zeichenfolgenwert kann vom Speicher als Chunking verarbeitet werden. Ein Listenwert wird als Chunks behandelt, die Eigentümer des Aufrufers sind, und wird unverändert inRECORD_CHUNKSgeschrieben. Wenn nurembeddingangegeben wird, wird der vorhandene Suchtext wieder verwendet. -
Einbetten
list[float] | ndarray | list[list[float] | ndarray] | None–Optionaler vorberechneter Einbettungsvektor oder Liste von Chunk-Einbettungsvektoren. Wenn ein lokaler Vektorspeicher konfiguriert ist, wird dieser direkt verwendet, und es erfolgt kein Einbettungsaufruf. Übergeben Sie
None, um die gespeicherte Einbettung zu löschen. Ein einzelner Vektor stellt den gesamten Ersetzungstext dar, wenncontentangegeben wird, selbst wenn der konfigurierte Chunker diesen Text teilen würde. Beim Ersetzen von Text werden mehrere Chunk-Vektoren abgelehnt, es sei denn,index_textist eine Chunk-Liste. Wenn nurembeddingangegeben wird, muss die Einbettungsanzahl mit den vorhandenen Chunk-Zeilen des Datensatzes übereinstimmen.In
SearchStrategy.VECTORwird die Vektorsuche im Vergleich zur gespeicherten Einbettung eingestuft. InSearchStrategy.HYBRIDoderSearchStrategy.KEYWORDstuft die DB-gestützte Suche den gespeicherten Suchtext und den von Oracle verwalteten Text- oder Hybridindexstatus ein. Daher wirken sich Einbettungen zur Aktualisierungszeit nur auf konfigurierten lokalen Vektorspeicher aus, nicht auf diese aktive Suchstrategie. Wenn dieser Speicher ohne lokalen Vektorspeicher konfiguriert wurde, geben Sieindex_textanstelle vonembeddingan, um den Text zu aktualisieren, der für diese textbezogenen Indizes sichtbar ist. Semantische Textaktualisierungen könnenembeddingvollständig in diesen Modi weglassen. - metadata
dict[str, Any] | None– Optionale Metadatenzuordnung, die in JSON serialisiert und inmetadatagespeichert wird. Für das Ersetzen von Imagecontentist"image_mime_type"durch"image/png","image/jpeg"oder"image/webp"erforderlich. Der Speicher verwendet dieses Feld, um das Bild zu speichern, gibt es jedoch nicht als Teil der Metadaten des Datensatzes zurück. - timestamp
str | None– Optionaler neuer Zeitstempel zum Speichern mit dem Datensatz. Es gibt an, wann der Datensatz erstellt wurde. Wenn dieser Wert ausgelassen wird, wird der vorhandene Zeitstempel beibehalten. Übergeben SieNone, um den gespeicherten Zeitstempel zu löschen und die Datenbankerstellungszeit für zukünftigeTimeToLiveAnchor.CREATED_AT-Ablaufaktualisierungen zu verwenden. Wennttl_anchorTimeToLiveAnchor.TIMESTAMPist, werden ISO-8601-Zeitstempel ohne Zeitzone als UTC behandelt. - ttl_days
int | None– Optionale Ablaufaktualisierung in Tagen. Lassen Sie dieses Argument zusammen mitttl_anchoraus, um den aktuellen Ablaufzeitstempel beizubehalten. Übergeben SieNone, umMemoryRetentionConfig.max_ttl_dayszu verwenden, wenn die Aufbewahrungskonfiguration eine festlegt, oder um den Ablauf zu löschen, wenn dies nicht der Fall ist. Werte überMemoryRetentionConfig.max_ttl_dayswerden mit einer Warnung auf dieses Maximum geklemmt. Durch das Aktualisieren des Ablaufs kann ein abgelaufener Datensatz erneut angezeigt werden, wenn er noch nicht gelöscht wurde. - ttl_anchor
TimeToLiveAnchor– Optionaler Time-to-Live-Anker für eine Ablaufaktualisierung. Verwenden SieTimeToLiveAnchor.CREATED_AT, um ab der gespeicherten Erstellungszeit zu zählen, oderTimeToLiveAnchor.TIMESTAMP, um aus dem Ersatztimestampzu zählen, der in derselben Aktualisierung bereitgestellt wird, oder dem gespeicherten Ereigniszeitstempel, wenntimestampausgelassen wird. Wenn Siettl_anchorohnettl_daysbereitstellen, wird der Ablauf mit dem SchemaMemoryRetentionConfig.default_ttl_daysaktualisiert. Wennttl_anchorwährend einer Aktualisierung ausgelassen wird, verwendet der SpeicherTimeToLiveAnchor.CREATED_AT. Aktualisierungen mit Zeitstempel erfordern entweder einen Ersatz-ISO-8601-Zeitstempel in demselben Aufruf oder einen vorhandenen gespeicherten Ereigniszeitstempel in diesem Format. ISO-8601-Zeitstempel ohne Zeitzone werden als UTC behandelt. - status
RecordStatus: Optionaler Ersatzlebenszyklusstatus für Datensätze. Lassen Sie es aus, um den aktuellen Status beizubehalten. -
Text
str | None–Veralteter Alias für
content. Übergeben SieNone, um den gespeicherten Text zu löschen und die gespeicherte Einbettung zu löschen. Geben Sie dies nicht zusammen mitcontentan.Veraltet
Veraltet seit Version 26.8.0: Dieser Parameter sollte in 26.8.0 nicht mehr verwendet werden und wird in 27.1 entfernt. Verwenden Sie stattdessen
content.
- record_type
- Rücksendungen: Anzahl der aktualisierten Datensätze (
0oder1). Der Rückgabewert0bedeutet, dass kein Datensatz aktualisiert wurde. - Rückgabetyp: int
- Raises: ValueError – Wenn
record_typenicht unterstützt wird, keine Update-Payload angegeben wird oder die semantischen Aktualisierungsargumente inkompatibel sind.
Beispiele
store.add(["Original note"], record_type="memory", record_ids="mem-update-docs")
['mem-update-docs']
store.update("memory", "mem-update-docs", content="Updated note")
1
store.get("memory", "mem-update-docs").content
'Updated note'
Methode update_async (asynchron)
Aktualisieren Sie gespeicherten Datensatzinhalt asynchron, und betten Sie Daten, Metadaten, Zeitstempel oder Ablauf ein.
- Parameter:
- record_type
str: Logischer Typ des zu aktualisierenden Datensatzes. - record_id
str: ID des zu aktualisierenden Datensatzes. - content
str | Mapping[str, object] | Sequence[MessageContent] | bytes | None: Kanonischer Ersatzinhalt. Übergeben Sie fürmessage-Datensätze eine Zeichenfolge oder eine geordnete Folge von Text- und Bildinhaltsteilen. Ersetzen Sie die Nachricht mit""durch leeren Text. Bei speicherähnlichen Datensätzen können SpeicherNoneakzeptieren, um den gespeicherten Text und den zugehörigen semantischen Status zu löschen. Lassen Sie das Argument weg, um den Inhalt unverändert zu lassen. Geben Sie dies nicht zusammen mittextan. - index_text
str | list[str] | None– Optionale alternative semantische Payload, mit der der gespeicherte Suchstatus neu berechnet oder ersetzt wird, ohne den persistenten Text zu ändern. Ein String kann intern vom Store gechunket werden. Eine Liste nicht leerer Zeichenfolgen wird als Chunks behandelt, die Eigentümer des Aufrufers sind, und darf nicht erneut geteilt werden. Einige Implementierungen können dies auch separat als Hybrid-Suchtext beibehalten. Bei einemimage-Datensatz ersetzt dieses Feld die persistente Bildbeschreibung. - einbetten
list[float] | ndarray | list[list[float] | ndarray] | None– Optionaler vorab berechneter Einbettungsvektor oder Liste mit Chunk-Einbettungsvektoren. Wenn angegeben, wird dies direkt verwendet, und es erfolgt kein Einbettungsaufruf. Mehrere Vektoren erfordern übereinstimmendeindex_text-Chunk-Listen oder vorhandene gespeicherte Chunk-Textzeilen. Übergeben SieNone, um die gespeicherte Einbettung explizit zu löschen, wenn der Speicher sie unterstützt. Speicher mit textbezogener Indexierung können auch semantische Aktualisierungen ohne Einbettung oder explizite Einbettung ermöglichen. - metadata
dict[str, Any] | None– Optionale Metadaten-Ersatzzuordnung. Übergeben SieNone, um Metadaten zu löschen, wenn der Speicher sie unterstützt. Für das Ersetzen von Imagecontentist"image_mime_type"in dieser Zuordnung erforderlich. Der Speicher verwendet dieses Feld, um das Bild zu speichern, gibt es jedoch nicht als Teil der Metadaten des Datensatzes zurück. - timestamp
str | None– Optionaler neuer Zeitstempel zum Speichern mit dem Datensatz. Es gibt an, wann der Datensatz erstellt wurde. Lassen Sie dieses Argument weg, um den gespeicherten Zeitstempel unverändert zu lassen. Übergeben SieNone, um den gespeicherten Zeitstempel zu löschen und die Zeit zu verwenden, zu der der Datensatz zum Speicher hinzugefügt wurde, wenn der Speicher ihn unterstützt. - ttl_days
int | None– Optionale Ablaufaktualisierung in Tagen. Lassen Sie dieses Argument zusammen mitttl_anchoraus, um den aktuellen Ablaufzeitstempel beizubehalten. Übergeben SieNone, um den Ablauf zu löschen. - ttl_anchor
TimeToLiveAnchor– Optionaler Time-to-Live-Anker für eine Ablaufaktualisierung. Verwenden SieTimeToLiveAnchor.CREATED_ATfür die Erstellungszeit des Datensatzes oderTimeToLiveAnchor.TIMESTAMPfür den Ersatztimestamp, der in derselben Aktualisierung angegeben wird, oder den gespeicherten Ereigniszeitstempel, wenntimestampausgelassen wird. Wenn Siettl_anchorohnettl_daysangeben, wird die standardmäßige Gültigkeitsdauer des Speichers oder Schemas verwendet. Wennttl_anchorwährend einer Aktualisierung ausgelassen wird, verwenden ImplementierungenTimeToLiveAnchor.CREATED_AT. - status
RecordStatus: Optionaler Ersatzlebenszyklusstatus für Datensätze. Lassen Sie es aus, um den aktuellen Status beizubehalten. -
Text
str | None–Veralteter Alias für
content. Übergeben SieNone, um den gespeicherten Text explizit zu löschen, wenn er vom Speicher unterstützt wird. Geben Sie dies nicht zusammen mitcontentan.Veraltet
Veraltet seit Version 26.8.0: Dieser Parameter sollte in 26.8.0 nicht mehr verwendet werden und wird in 27.1 entfernt. Verwenden Sie stattdessen
content.
- record_type
- Rücksendungen: Anzahl der aktualisierten Datensätze (
0oder1). Der Rückgabewert0bedeutet, dass kein Datensatz aktualisiert wurde. - Rückgabetyp: int
- Gelöst: ValueError – Wenn die Update-Payload für den Speicher ungültig ist, z.B. das Weglassen jedes optionalen Feldes oder das Bereitstellen widersprüchlicher semantischer Argumente.
Methode update_relations
Aktualisieren Sie veränderbare Beziehungsfelder, und berechnen Sie den Lebenszyklusstatus des Endpunkts neu.
Ausgelassene Felder bleiben unverändert. Integrierte Memory Link-Labels behalten immer ihr abgeleitetes Reverse Label.
- Parameter:
- relation_ids
str | list[str]: ID oder IDs der zu aktualisierenden Beziehungen. - relation_types
str | list[str]: Optionales/optionales Ersatzlabel für gerichtete Beziehungen. - opposite_relation_types
str | list[str]– Optionales Ersatz-Rückwärtslabel oder Labels für benutzerdefinierte Typen. - timestamps
str | None | list[str | None]– Optionale Ersatzzeitstempel. Übergeben SieNone, um eine zu löschen. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Optionale Ersetzungsmetadaten. Er ersetzt vorhandene Metadaten.
- relation_ids
- Rückgaben: IDs der aktualisierten Beziehungen.
- Rückgabetyp: list[str]
Beispiele
store.update_relations("relation-id", relation_types="supports")
['relation-id']
Methode update_relations_async (asynchron)
Aktualisieren Sie mutierbare Werte in gespeicherten Beziehungen asynchron.
Ausgelassene Felder bleiben unverändert, mit der Ausnahme, dass der Wechsel zu einem integrierten Speicherbeziehungstyp sein umgekehrtes Label durch das feste Umkehrzeichen ersetzt. Ein DB-backed Memory Store berechnet auch Endpunktlebenszyklusstatus nach einer Änderung des Beziehungstyps neu.
- Parameter:
- relation_ids
str | list[str]: ID oder IDs der zu aktualisierenden Beziehungen. - relation_types
str | list[str]: Optionales/optionales Ersatzlabel für gerichtete Beziehungen. Lassen Sie dies aus, um die gespeicherten Labels beizubehalten. - opposite_relation_types
str | list[str]– Optionales Ersatz-Reverse Relationship Label oder Labels. Übergeben Sie ein Label, um es zu ersetzen, oder lassen Sie dieses Argument weg, um es beizubehalten. - Zeitstempel
str | None | list[str | None]– Optionaler Ersatzzeitstempel oder Zeitstempel. Übergeben SieNone, um einen gespeicherten Zeitstempel zu löschen. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Optionales Ersatzmetadatenobjekt oder -objekte. Die bereitgestellten Metadaten ersetzen das gespeicherte Objekt; es wird nicht zusammengeführt.
- relation_ids
- Rückgaben: IDs der aktualisierten Beziehungen.
- Rückgabetyp: list[str]
Beispiele
await store.update_relations_async(
"relation-id", relation_types="supports"
)
['relation-id']
Relationen
OracleDBMemoryStore kann gerichtete Beziehungen zwischen speicherähnlichen Datensätzen speichern (memory, fact, guideline und preference). Verwenden Sie add_relations(), get_relation(), list_relations(), update_relations() und delete_relations(), wenn eine Integration die Beziehungs-API der unteren Ebene benötigt. Die Client- und Thread-APIs stellen link_records(), update_record_link() und delete_record_link() für unterstützte Speicherbeziehungstypen bereit.
Um eine Beziehung abzurufen, geben Sie entweder relation_id selbst oder das vollständige gespeicherte Endpunkt-Tupel an: Quelldatensatz-ID und -typ, Zieldatensatz-ID und -typ sowie Beziehungstyp. Ein Teil-Tupel und eine Beziehungs-ID in Kombination mit einem beliebigen Tupelfeld sind ungültig, da weder die angeforderte Beziehung eindeutig identifiziert wird.
Verwenden Sie list_relations(), um Beziehungen in der Erstellungsreihenfolge aufzuzählen. Filtern Sie nach Quell- oder Zieldatensatz-ID und -typ oder nach gerichtetem Beziehungslabel. Es verwendet das normale Limit für die sichere Liste des Shops, es sei denn, Sie übergeben limit=None. Die metadata_filter verwendet die gleiche Semantik für genaue Übereinstimmung, verschachteltes Objekt, Arraymitgliedschaft und Negation wie list(). Übergeben Sie metadata_filter=None, um nur Beziehungen ohne Metadaten zurückzugeben.
Lebenszyklusbeziehungstypen supersedes, refines und duplicates kennzeichnen den Zielspeicher als ungültig, während der Link vorhanden ist. Wenn Sie den letzten derartigen Link entfernen oder ändern, wird das Ziel wieder in einen gültigen Status versetzt. Such-APIs können ungültige Datensätze mit include_invalid_results=False ausschließen.
Klasse oracleagentmemory.apis.relations.RecordRelation
Basis: object
Beschreiben Sie eine gespeicherte, gerichtete Beziehung zwischen zwei Datensätzen.
- Parameter:
- id
str: Stabile ID der Beziehung. - source_record_id
str: Bezeichner des Datensatzes an der gespeicherten Quelle der Beziehung. - source_record_type
str: Der logische Typ des Quelldatensatzes. - target_record_id
str: ID des Datensatzes am gespeicherten Ziel der Beziehung. - target_record_type
str: Logischer Typ des Zieldatensatzes. - relation_type
str: Label, dessen Bedeutung der gespeicherten Richtung von Quelle zu Ziel folgt. - opposite_relation_type
str– Label, das verwendet wird, wenn eine Durchlaufbewegung von Ziel zu Quelle erfolgt. - timestamp
str | None– Optionaler Aufrufer-Zeitstempel, der mit der Beziehung verknüpft ist. - Metadaten
dict[str, Any] | None– Optionale JSON-ähnliche Metadaten, die mit der Beziehung gespeichert sind. - created_at
str: Zeitstempel der Datenbankerstellung für die Beziehung.
- id
Suchstrategie
Klasse oracleagentmemory.core.dbsearch.SearchStrategy
Basen: Enum
Suchverhalten für Oracle DB-Speicher.
Bei der Initialisierung des DB-Speichers wird die ausgewählte Strategie verwendet, um die Suchfunktion für das verwaltete Schema auszuwählen. Die VECTOR-Suche speichert lokale Einbettungen. Bei der KEYWORD-Suche werden durchsuchbarer Text und ein Textindex gespeichert. In der HYBRID-Suche werden durchsuchbarer Text und von Oracle verwalteter Hybridvektorindexstatus gespeichert. Der DB-Speicher validiert diese Schemafunktion beim Start, sodass eine inkompatible Strategie keine unvollständigen Ergebnisse zurückgibt.
VECTOR- Nur nach Vektorähnlichkeit suchen. Der Speicher bettet die Abfrage mit der konfigurierten Einbettung ein oder verwendet eine vom Aufrufer bereitgestellte
query_vectorund ordnet Datensätze nach Entfernung zu den gespeicherten Vektoren ein. Verwenden Sie dies mit einem DB-Schema, das für die Vektorsuche konfiguriert ist. HYBRID- Mit dem verwalteten Hybridindex von Oracle suchen. Oracle kombiniert Textabgleich über gespeicherten Suchtext mit Vektorrangfolge aus dem datenbankinternen Hybridindex. Verwenden Sie diese Option, wenn Benutzer nach natürlicher Sprache sowie nach genauen Kennungen, Aliasnamen oder Produktnamen suchen können. Für diese Strategie muss der Haupteinbettungsordner des Speichers ein
OracleDBEmbeddersein, sodass der verwaltete Index und der verwaltete Speicher ein datenbankinternes Modell gemeinsam verwenden. KEYWORD- Nur nach Stichwort/Text suchen, der über gespeicherten Suchtext übereinstimmt. In diesem Modus werden keine lokalen Abfrageeinbettungen erstellt, und es ist kein Oracle DB-Einbettung erforderlich. Wenn es für ein vorhandenes Hybridschema geöffnet wird, kann es die Textverzweigung dieses Hybridindex verwenden, ohne einen neuen Hybridindex zu erstellen. Verwenden Sie diese Option, wenn exakte Kennungen, Aliasnamen, Produktnamen oder kurze Phrasen den Abruf ohne Vektorfusion steuern sollen.
HYBRID = "HYBRID"
Schlüsselwort = "Schlüsselwort"
VECTOR = 'VECTOR'
Suchindex-Synchronisierungsmodus
Klasse oracleagentmemory.core.dbsearch.SearchIndexSyncMode
Basen: Enum
Aktualisierungsverhalten für verwaltete DB-Suchindizes.
Diese Einstellung steuert, wann Oracle neuen oder geänderten Suchtext für die DB-gestützte textbezogene Suche sichtbar macht. SearchStrategy.HYBRID verwendet den verwalteten Hybridvektorindex von Oracle. SearchStrategy.KEYWORD verwendet einen Oracle Text-Index. SearchStrategy.VECTOR verwendet diese Einstellung nicht.
ON_COMMIT- Aktualisieren Sie den Index, wenn die Schreibtransaktion festgeschrieben wird. Dies ist die Standardeinstellung und die einfachste Wahl für die meisten Anwendungen, da Datensätze unmittelbar nach einem erfolgreichen Schreibvorgang durchsucht werden können. Es kann Arbeit hinzufügen, um Transaktionen zu schreiben, da der Index sofort auf dem neuesten Stand gehalten wird.
MANUAL- Index nicht automatisch aktualisieren. Neue oder aktualisierte Datensätze werden möglicherweise erst dann in der Stichwort- oder Hybridsuche angezeigt, wenn Sie den datenbankseitigen Indexsynchronisierungsvorgang selbst ausführen. Dies ist nützlich für Bulk Loads oder Wartungsfenster, in denen Sie steuern möchten, wann Aktualisierungsarbeitsläufe ausgeführt werden.
AUTO- Lassen Sie Oracle den verwalteten Hybridindex asynchron aktualisieren. Schreibvorgänge können die unmittelbaren Aktualisierungskosten vermeiden. Die Suchergebnisse können jedoch hinter den letzten Schreibvorgängen zurückbleiben, bis Oracle die Hintergrundaktualisierung abgeschlossen hat. Dieser Modus wird nur mit
SearchStrategy.HYBRIDunterstützt.
Warnung: Diese Einstellung steuert die fortlaufende Wartung, nachdem der verwaltete Suchindex vorhanden ist. Die erste Indexerstellung wird nicht asynchron erstellt. Das Erstellen eines verwalteten Hybridindexes über vorhandenen gespeicherten Suchtext kann eine lange Ausführungszeit haben, da Oracle den verwalteten Hybridindexstatus aus diesem Text erstellt.
AUTO = 'AUTO'
MANUELL = 'manuell'
ON_COMMIT = 'ON_COMMIT'
Gültigkeitsdauer
Klasse oracleagentmemory.core.retention.MemoryRetentionConfig
Basis: object
Aufbewahrungseinstellungen auf Schemaebene für von Oracle DB unterstützte Datensätze.
- Parameter:
- default_ttl_days
int | None: Standarddauer für die Gültigkeitsdauer in Tagen. Behalten SieNOT_SET_MARKERbei, um den StandardwertNone(kein Maximum) zu verwenden. - max_ttl_days
int | None– Optionale maximale Gültigkeitsdauer in Tagen. Behalten SieNOT_SET_MARKERbei, um den StandardwertNonezu verwenden. Übergeben SieNonefür kein Maximum. Wenn diese Option festgelegt ist, handelt es sich um eine Hard Cap: Schreibvorgänge, die versuchen, einen größerenttl_days-Wert zu verwenden, werden mit einer Warnung auf dieses Maximum geklemmt, und Schreib-APIs, diettl_days=Noneübergeben, verwenden dieses Maximum, anstatt nicht ablaufende Datensätze zu erstellen.
- default_ttl_days
Klasse oracleagentmemory.apis.ttl.TimeToLiveAnchor
Basen: Enum
Anker zur Berechnung eines Ablaufzeitstempels von einer Gültigkeitsdauer.
CREATED_AT- Compute-Ablauf vom Zeitstempel der Datenbankerstellung des Datensatzes. Dies ist der Standardwert, wenn Aufrufer
ttl_anchorauslassen. TIMESTAMP- Berechnung des Ablaufs aus dem gespeicherten Ereigniszeitstempel des Datensatzes. Verwenden Sie diese Option, wenn eine Nachricht oder ein Speicher ein älteres Ereignis darstellt und relativ zu dieser Ereigniszeit anstatt der Einfügezeit ablaufen soll.
CREATED_AT = 'CREATED_AT'
Zeitstempel = 'Zeitstempel'
Schema-Policy
Klasse oracleagentmemory.core.SchemaPolicy
Basis: str, Enum
Schemaerstellungs-Policy für Oracle DB-Speicher.
ERFORDERLICH
Stellen Sie sicher, dass das vollständige verwaltete Schema bereits vorhanden ist und aktuell ist. Erstellen oder ändern Sie keine DB-Objekte.
CREATE_IF_LEER
Wenn keine verwalteten Objekte vorhanden sind, Bootstrap-Schema. Wenn bereits Objekte vorhanden sind, benötigen Sie ein vollständiges und aktuelles verwaltetes Schema.
ERSTELLEN_IF_NOTWENDIG
Erstellen Sie fehlende verwaltete Objekte, und wenden Sie unterstützte Upgrades verwalteter Schemas an.
NEU ERSTELLEN
Alle verwalteten Schemaobjekte löschen und neu erstellen. Das ist destruktiv.
NO_CHECK
Validierung und Erstellung des verwalteten Schemas überspringen. Verwenden Sie diese Policy für einen vorhandenen Deep Data Security-geschützten Speicher, während ein Endbenutzer-Sicherheitskontext aktiv ist. Ein unter einem Endbenutzerkontext geöffneter Speicher erfordert einen aktiven Kontext für jeden nachfolgenden Datenbankvorgang. Andere Schema-Policys lehnen Endbenutzerkontexte ab, da die Arbeit am Schemalebenszyklus über eine administrative Datenbankidentität ausgeführt werden muss.