Magasins et schéma
Cette page présente les abstractions de l'emplacement de stockage principal et les contrôles de schéma utilisés par le kit SDK de mémoire d'agent Oracle.
API de stockage
Stocker la sémantique d'écriture
Les écritures de stockage conservent une séparation claire entre le texte stocké par une application et la charge utile utilisée par le stockage pour l'extraction. La plupart des applications peuvent utiliser les API de niveau mémoire et de niveau thread et laisser le magasin préparer les lignes de recherche dont il a besoin pour la récupération de vecteur, de mot-clé ou hybride. Les API de stockage de niveau inférieur affichent index_texts, index_text, embeddings et embedding pour les intégrations avancées qui savent déjà quel texte ou vecteurs doivent être utilisés pour l'extraction.
Considérez chaque écriture comme deux éléments connexes :
contentsdansadd()ettextdansupdate()contrôlent le texte d'enregistrement stocké renvoyé parget(),list()et les résultats de recherche.index_textsdansadd()etindex_textdansupdate()contrôlent le texte écrit dans les lignes d'extraction de la banque. La recherche utilise ces lignes, puis renvoie les enregistrements logiques d'origine.
Si aucun remplacement de recherche ou incorporation explicite n'est fourni, le magasin utilise le texte stocké résolu comme texte d'extraction. Le texte non vide est découpé par bloc par le magasin lors de la configuration du découpage par bloc. Le texte vide stocke le texte de l'enregistrement mais ne fournit aucun texte d'extraction.
Le tableau ci-dessous décrit comment le texte d'extraction est choisi avant la prise en compte des charges utiles vectorielles explicites.
Charge utile d'extraction au niveau du magasin
| Entrée | add() | update() |
|---|---|---|
index_texts ou index_text omis |
Chaque enregistrement utilise sa valeur contents résolue pour l'extraction. |
Une valeur text de remplacement est utilisée pour l'extraction. Si text est également omis, les mises à jour d'intégration uniquement réutilisent les lignes de texte d'extraction existantes de l'enregistrement. |
Chaîne index_texts entrée ou chaîne index_text |
La chaîne remplace le texte d'extraction de cet enregistrement. Le magasin peut le fragmenter avant d'écrire des lignes d'extraction. | La chaîne remplace le texte d'extraction de cet enregistrement. Le magasin peut le fragmenter avant d'écrire des lignes d'extraction. |
Entrée list[str] index_texts ou list[str] index_text |
La liste est traitée comme des blocs appartenant à l'appelant. Chaque chaîne non vide est écrite sous la forme d'une ligne d'extraction, et le magasin ne la fragmente pas à nouveau. | La liste est traitée comme des blocs appartenant à l'appelant. Chaque chaîne non vide est écrite sous la forme d'une ligne d'extraction, et le magasin ne la fragmente pas à nouveau. |
Entrée None index_texts ou index_text=None |
None dans la liste externe index_texts signifie "utiliser le contenu stocké pour cet enregistrement". |
index_text=None efface les lignes d'extraction tout en laissant le texte stocké inchangé, sauf si text est également fourni. |
| Chaîne vide ou liste de blocs vide | Stocke le texte de l'enregistrement et ne fournit aucun texte d'extraction pour cet enregistrement. | Met à jour le texte de l'enregistrement lorsque text est fourni et efface le texte d'extraction de cet enregistrement. |
Les intégrations explicites sont facultatives. Lorsqu'ils sont omis, le magasin dérive des vecteurs locaux du texte de récupération lorsque le stockage vectoriel local est configuré ; les magasins de mots-clés ou hybrides peuvent également utiliser des lignes de récupération de texte uniquement. Lorsque des valeurs embeddings ou embedding explicites sont fournies, le magasin écrit ces vecteurs directement et n'appelle pas son intégrateur pour ces vecteurs.
Dans add(), embeddings=None se comporte comme l'omission de embeddings. Dans update(), embedding=None est explicite : le magasin conserve ou réécrit le texte d'extraction en fonction de text et index_text, mais stocke ces lignes sans vecteurs locaux. Si text et index_text sont tous deux omis, cela efface les vecteurs des lignes d'extraction existantes.
La forme du vecteur indique au magasin combien de parts de propriété l'appelant prend :
- un vecteur signifie un vecteur pour l'ensemble du texte de récupération. Le magasin ne fractionne pas ce texte pour le vecteur explicite. Si ce texte de récupération est vide, le vecteur peut être stocké sans texte de bloc compagnon.
- plusieurs vecteurs signifient un vecteur par bloc appartenant à l'appelant. Fournissez des listes de blocs
index_textsouindex_textcorrespondantes, ou utilisez un élémentupdate()d'intégration uniquement qui réutilise les lignes de texte d'extraction existantes de l'enregistrement. - les nombres de vecteurs doivent correspondre aux nombres de blocs, et tous les vecteurs explicites d'un appel
add()doivent avoir la même dimension. - une charge utile de vecteur par enregistrement vide n'est autorisée que lorsqu'il n'existe aucune ligne de texte d'extraction à aligner sur celle-ci.
Certaines combinaisons sont rejetées de sorte que le texte stocké, le texte de récupération et les vecteurs ne s'écartent pas. La transmission de text=None efface le texte stocké et les lignes d'extraction. Elle ne peut donc pas être combinée avec des valeurs index_text ou embedding non NULL ; les enregistrements de profil d'acteur ne prennent pas en charge text=None. La transmission de index_text=None dans update() signifie "effacer les lignes d'extraction", de sorte que les incorporations explicites non vides ne sont pas autorisées dans le même appel. Plusieurs vecteurs explicites nécessitent un texte de bloc explicite, sauf si la mise à jour est incorporée uniquement et que les lignes d'extraction existantes fournissent déjà le texte de bloc.
classe oracleagentmemory.core.OracleMemoryStore
Bases : IMemoryStore
Interface de banque commune utilisée par OracleAgentMemory.
Une implémentation de magasin est responsable de la persistance des enregistrements de texte et de l'exécution de recherches de similarité sur ces enregistrements. Les points d'entrée synchrones et asynchrones sont définis de sorte que les API de niveau supérieur peuvent afficher les surfaces synchrones/asynchrones correspondantes sans dupliquer la logique propre au magasin.
méthode add
Ajoutez des enregistrements au magasin.
- Paramètres:
- contents
list[str | None]– Enregistrez la charge utile pour la persistance. Les valeurs de texte sont également utilisées pour l'indexation sémantique, sauf siindex_textsouembeddingssont fournis. Lorsqu'une valeur de texte estNone, les implémentations peuvent revenir àmetadata["content"]. Les chaînes vides explicites sont conservées. - record_type
str– Type d'enregistrement logique à créer, par exemple"message","memory","guideline","fact","preference","user_profile"ou"agent_profile". - index_texts
list[str | list[str] | None]: charge utile alternative facultative utilisée uniquement pour l'indexation sémantique. Lorsqu'elle est fournie, la liste externe doit correspondre aux entrées de texte. Chaque entrée peut être une chaîne, que le magasin peut diviser en interne, ou une liste de chaînes non vides, que le magasin traite comme des morceaux appartenant à l'appelant et ne doit pas diviser à nouveau. - embeddings
list[list[float] | ndarray | list[list[float] | ndarray]]: vecteurs d'intégration précalculés facultatifs alignés sur les entrées de texte. Chaque entrée d'enregistrement peut être soit un vecteur d'intégration, soit une liste de vecteurs d'intégration de blocs pour cet enregistrement. Lorsqu'il est fourni, le magasin doit utiliser ces vecteurs directement au lieu d'appeler son intégrateur. Plusieurs vecteurs pour un enregistrement nécessitent la mise en correspondance de listes de blocsindex_textsafin que les limites de blocs de texte et de vecteurs soient explicites. S'ils ne sont pas fournis, les magasins dérivent généralement l'état sémantique de leur intégrateur configuré, mais les modes d'indexation en mode texte spécifique à l'implémentation peuvent également autoriser les écritures en mode texte uniquement sans un. - record_ids
str | None | list[str | None]: identificateurs invisibles par l'appelant (facultatif). Une seule chaîne peut être utilisée pour les insertions d'un enregistrement, tandis que les listes doivent s'aligner sur les entrées de texte. Les identificateurs générés sont renvoyés lorsque ce champ est omis. - thread_ids
str | None | list[str | None]– Identificateurs de thread facultatifs associés aux enregistrements insérés. Les valeurs scalaires peuvent être diffusées sur des entrées de texte alignées. - user_ids
str | None | list[str | None]– Identificateurs utilisateur facultatifs associés aux enregistrements insérés. Les valeurs scalaires peuvent être diffusées sur des entrées de texte alignées. - agent_ids
str | None | list[str | None]: identificateurs d'agent facultatifs associés aux enregistrements insérés. Les valeurs scalaires peuvent être diffusées sur des entrées de texte alignées. - rôles
str | None | list[str | None]: rôles de message facultatifs tels que"user"ou"assistant". Les valeurs scalaires peuvent être diffusées sur des entrées de texte alignées. Utilisé uniquement si record_type est"message". - timestamps
str | None | list[str | None]: horodatages facultatifs à enregistrer avec les enregistrements. Chaque horodatage indique la date de création de l'enregistrement. Les valeurs scalaires peuvent être diffusées sur des entrées de texte alignées. Les entrées omises ouNoneutilisent l'heure actuelle. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Dictionnaires de métadonnées fournis par l'appelant facultatifs. Les métadonnées peuvent inclure"content"en tant que source de secours lorsqu'une valeur de texte est omise plutôt que définie explicitement sur"". - ttl_days
int | None | list[int | None]: durée de vie facultative en jours pour les enregistrements prenant en charge l'expiration. Omettez cet argument pour utiliser la valeur par défaut du magasin. TransmettezNonepour les enregistrements qui ne doivent pas expirer. Les valeurs scalaires peuvent être diffusées sur des entrées de texte alignées. - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor]: ancre de durée de vie facultative. UtilisezTimeToLiveAnchor.CREATED_ATpour expirer par rapport à l'heure de création stockée ouTimeToLiveAnchor.TIMESTAMPpour expirer par rapport à l'horodatage d'événement de chaque enregistrement. Lorsqu'elles sont omises, les implémentations utilisentTimeToLiveAnchor.CREATED_AT. - **store_kwargs (N'importe lequel) – Options d'écriture spécifiques à l'implémentation transmises au magasin concret.
- contents
- Type de retour : list[str]
Remarques
Utilisez add_batches() lorsque l'appelant comporte déjà un ou plusieurs objets PendingRecordBatch.
- Retours : Identificateurs des enregistrements insérés, dans le même ordre logique que l'entrée.
- Type de retour : List[str]
- Paramètres:
- contenu
list[str | None] - record_type
str - textes_index
list[str | list[str] | None] - embarquements
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] - rôles
str | None | list[str | None] - horodatages
str | None | list[str | None] - métadonnées
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - store_kwargs
Any
- contenu
method add_agent (résumé)
Ajoutez un enregistrement de profil d'agent.
- Paramètres:
- agent_id
str: identificateur stable du profil d'agent. - information
str: texte de forme libre décrivant l'agent. - metadata
dict[str, Any] | None– Mapping de métadonnées facultatif stocké sur la ligne de profil d'agent.
- agent_id
- Retours : Identifiant de l'enregistrement de profil d'agent créé.
- Type de retour : str
method add_async (async)
Ajoutez de manière asynchrone des enregistrements orientés ligne au magasin.
accepte les mêmes arguments et renvoie les mêmes identificateurs que add().
- Paramètres:
- contenu
list[str | None] - record_type
str - textes_index
list[str | list[str] | None] - embarquements
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] - rôles
str | None | list[str | None] - horodatages
str | None | list[str | None] - métadonnées
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - store_kwargs
Any
- contenu
- Type de retour : list[str]
méthode add_batches
Ajoutez des lots logiques préparés par l'appelant au magasin.
- Paramètres:
- batches
list[PendingRecordBatch]: lots logiques entièrement préparés pour persistance. Chaque lot doit contenir ses propres champs par enregistrement, tels querecord_type, les valeurs de portée, les rôles, les horodatages et les métadonnées. - **store_kwargs (N'importe lequel) – Options d'écriture spécifiques à l'implémentation transmises au magasin concret.
- batches
- Retours : Identifiants pour les enregistrements insérés, dans le même ordre logique que les lots et lignes d'entrée.
- Type de retour : List[str]
Exemples
store.add_batches(
[
PendingRecordBatch(
texts=["pizza batch"],
record_type="memory",
record_ids="mem-batch-docs",
)
]
)
['mem-batch-docs']
method add_batches_async (async)
Ajoutez de manière asynchrone des lots logiques préparés par l'appelant au magasin.
accepte les mêmes arguments et renvoie les mêmes identificateurs que add_batches().
- Paramètres:
- batchs
list[PendingRecordBatch] - store_kwargs
Any
- batchs
- Type de retour : list[str]
method add_user (résumé)
Ajouter un enregistrement de profil utilisateur.
- Paramètres:
- user_id
str– Identificateur stable du profil utilisateur. - information
str– Texte de forme libre décrivant l'utilisateur. - metadata
dict[str, Any] | None– Mapping de métadonnées facultatif stocké sur la ligne du profil utilisateur.
- user_id
- Retours : Identifiant de l'enregistrement de profil utilisateur créé.
- Type de retour : str
method delete (résumé)
Supprimer un enregistrement stocké par identifiant.
- Paramètres:
- record_type
str– Type logique de l'enregistrement à supprimer. - record_id
str– Identifiant de l'enregistrement à supprimer. - cascade
bool: lorsqueTrue, appliquez tout comportement de suppression en cascade pris en charge par le magasin pour les cibles de niveau supérieur demandées dans la même opération de suppression. Il est principalement utilisé pour les cibles telles que les profils d'acteur qui possèdent des enregistrements de portée supplémentaires. Par exemple, une cascade de profils utilisateur ou d'agents peut supprimer les threads propriétaires eux-mêmes, les messages de portée thread et les enregistrements de type mémoire supprimés avec ces threads, ainsi que tous les enregistrements de portée acteur directs restants tels que les messages, les mémoires, les directives, les faits ou les préférences. Pour les suppressions de profil d'acteur, ce nettoyage ciblé peut toujours être exécuté lorsque la ligne de profil correspondante est déjà absente.
- record_type
- Retours : nombre d'enregistrements de niveau supérieur demandés supprimés, généralement
0ou1. Les lignes enfant en cascade ne sont pas comptabilisées séparément. Il peut donc s'agir de0lorsqu'un profil d'acteur manquant déclenche un nettoyage ciblé. - Type de retour : int
method delete_thread (résumé)
Supprimer un thread et les données stockées associées.
- Paramètres : thread_id
str– Identificateur du thread à enlever. - Retours : nombre d'enregistrements de thread supprimés, généralement
0ou1. - Type de retour : int
Remarques
Il s'agit de l'opération de niveau magasin permettant de supprimer un thread et les enregistrements de niveau thread gérés par le magasin. Préférez la suppression de thread lorsque les exigences de conservation appellent la suppression des messages source et des données de mémoire dérivées de portée thread, car les suppressions au niveau message n'impliquent pas la suppression des enregistrements dérivés conservés séparément.
method get (résumé)
Extraire un enregistrement stocké par type et identifiant.
- Paramètres:
- record_type
str– Type logique de l'enregistrement à extraire. - record_id
str– Identificateur de l'enregistrement à extraire.
- record_type
- Retours : enregistrement stocké trouvé, sinon
None. - Type de retour : Enregistrement | Aucun
method list (résumé)
Répertoriez les enregistrements stockés pour un type d'enregistrement.
- Paramètres:
- record_type
str– Type d'enregistrement logique à énumérer. - limit
int | None: nombre maximal facultatif d'enregistrements les plus récents à renvoyer. Lorsqu'elles sont omises, les implémentations peuvent appliquer une limite supérieure sécurisée telle queMAX_LIST_LIMIT. TransmettezNonepour désactiver cette limite et renvoyer tous les enregistrements correspondants. - thread_id
str | None– Filtre de portée de thread exact. Lorsqu'il est omis, aucun filtrage n'est appliqué. Lorsqu'elle est définie surNone, seuls les enregistrements dontthread_idestNonesont renvoyés. Les types d'enregistrements non ciblés ignorent ce filtre. - user_id
str | None– Filtre de portée utilisateur exact. Lorsqu'il est omis, aucun filtrage n'est appliqué. Lorsqu'elle est définie surNone, seuls les enregistrements dontuser_idestNonesont renvoyés. Les types d'enregistrements non ciblés ignorent ce filtre. - agent_id
str | None: filtre de portée d'agent exact. Lorsqu'il est omis, aucun filtrage n'est appliqué. Lorsqu'elle est définie surNone, seuls les enregistrements dontagent_idestNonesont renvoyés. Les types d'enregistrements non ciblés ignorent ce filtre. -
metadata_filter
dict[str, Any] | None–Filtre de métadonnées. Lorsqu'il est omis, aucun filtrage n'est appliqué. Lorsqu'elle est définie sur
None, seuls les enregistrements dont les métadonnées sontNonesont renvoyés. Lorsqu'elle est définie sur une dictée, les entrées demetadata_filtersont combinées à la sémantique AND. Les entrées dont la valeur n'est pas un dictionnaire opérateur de niveau champ utilisent une sémantique de correspondance exacte : la clé demandée doit exister dans les métadonnées stockées. Les dictionnaires imbriqués sont mis en correspondance de manière récursive. Les valeurs scalaires et de liste sont mises en correspondance par égalité exacte ; l'ordre et la longueur de la liste doivent également correspondre. Pour tester l'appartenance à un tableau, utilisez un dictionnaire d'opérateurs de niveau champ tel que{"tags": {"$array_contains": "prod"}}. Un opérande de liste pour"$array_contains"signifie que toutes les valeurs répertoriées doivent être présentes ;"$array_contains_any"signifie qu'au moins une valeur répertoriée doit être présente. Utilisez"$not"pour annuler une autre expression de niveau champ sur le même champ, y compris un dictionnaire d'opérateur ou une valeur de correspondance exacte brute. Les expressions négatives correspondent lorsque l'expression positive échoue, y compris les champs manquants ; l'appartenance au tableau négatif correspond également aux champs non-tableau. Par exemple,metadata_filter={"source": "slack"}pour un champ scalaire,metadata_filter={"review": {"status": "open"}}pour un champ imbriqué etmetadata_filter={"tags": ["prod", "urgent"]}pour une correspondance de liste exacte. Combinez les conditions pour les exiger toutes :metadata_filter={ "source": "slack", "review": {"status": "open"}, "tags": ["prod", "urgent"], }
- record_type
- Retours : Enregistrements classés du plus ancien au plus récent dans la fenêtre renvoyée.
- Type de retour : Liste[Enregistrement]
method list_thread_messages (résumé)
Répertoriez l'historique des messages stockés pour un thread.
- Paramètres:
- thread_id
str– Identificateur du thread dont les messages doivent être renvoyés. - last_n
int | None: nombre facultatif de messages les plus récents à inclure. Lorsqu'il est omis, tous les messages stockés pour le thread sont renvoyés.
- thread_id
- Retours : Enregistrements de message classés du plus ancien au plus récent dans la fenêtre renvoyée.
- Type de retour : List[MessageRecord]
method search (résumé)
Rechercher des enregistrements par similarité.
- Paramètres:
- query
str | None: requête en langage naturel. Doit être fourni lorsquequery_vectorest omis. - query_vector
list[float] | None: intégration de requête précalculée facultative. Vous devez fournir exactement l'une des optionsqueryetquery_vector. - k
int– Nombre maximum de résultats à renvoyer. Les valeurs explicites doivent être au moins1. Limite supérieure : l'appel peut renvoyer moins de résultatsklorsque les filtres sont trop restrictifs, lorsqu'il existe moins d'enregistrements correspondants non expirés ou en raison d'un comportement de recherche propre à l'implémentation. - thread_id
str | None– Portée de thread facultative. - user_id
str | None: filtres de portée utilisateur et agent facultatifs. - agent_id
str | None: filtres de portée utilisateur et agent facultatifs. - exact_user_match
bool: indique si chaque identificateur de portée fourni doit correspondre exactement. - exact_agent_match
bool: indique si chaque identificateur de portée fourni doit correspondre exactement. - exact_thread_match
bool: indique si chaque identificateur de portée fourni doit correspondre exactement. - record_types
set[str] | None– Ensemble facultatif de types d'enregistrement à inclure. - metadata_filter
dict[str, Any] | None– Mappage de filtre de métadonnées facultatif. Les entrées dansmetadata_filtersont combinées avec la sémantique AND. Les entrées dont la valeur n'est pas un dictionnaire opérateur de niveau champ utilisent une sémantique de correspondance exacte : la clé demandée doit exister dans les métadonnées stockées. Les dictionnaires imbriqués sont mis en correspondance de manière récursive. Les valeurs scalaires et de liste sont mises en correspondance par égalité exacte ; l'ordre et la longueur de la liste doivent également correspondre. Pour tester l'appartenance à un tableau, utilisez un dictionnaire d'opérateurs de niveau champ tel que{"tags": {"$array_contains": "prod"}}. Un opérande de liste pour"$array_contains"signifie que toutes les valeurs répertoriées doivent être présentes ;"$array_contains_any"signifie qu'au moins une valeur répertoriée doit être présente. Utilisez"$not"pour annuler une autre expression de niveau champ sur le même champ, y compris un dictionnaire d'opérateur ou une valeur de correspondance exacte brute. Les expressions négatives correspondent lorsque l'expression positive échoue, y compris les champs manquants ; l'appartenance au tableau négatif correspond également aux champs non-tableau.
- query
- Renvoie : paires
(record, distance)triées par distance croissante. La liste peut contenir moins dekentrées. - Type de retour : list[tuple[Record, float]]
- Elèves : ValueError – Si
kest inférieur à1.
Exemples
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'
Filtrer sur une valeur de métadonnées scalaire :
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
Filtrer sur les métadonnées imbriquées :
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
Faites correspondre exactement une valeur de liste, y compris l'ordre :
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
Filtrer lorsqu'un tableau de métadonnées contient une valeur :
any(
record.id == "mem-search-meta-tags-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"tags": {"$array_contains": "prod"}},
)
)
True
Combinez plusieurs conditions de métadonnées. Un enregistrement doit satisfaire toutes les clés :
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
method search_async (async)
Rechercher des enregistrements de manière asynchrone par similarité sémantique.
- Paramètres:
- query
str | None: même texte de requête accepté parsearch. - k
int: nombre de résultats maximal identique accepté parsearch. Les valeurs explicites doivent être au moins1. - query_vector
list[float] | None– Même intégration de requête précalculée facultative acceptée parsearch. - thread_id
str | None– Les mêmes filtres de portée facultatifs acceptés parsearch. - user_id
str | None– Les mêmes filtres de portée facultatifs acceptés parsearch. - agent_id
str | None– Les mêmes filtres de portée facultatifs acceptés parsearch. - exact_user_match
bool– Les mêmes indicateurs de correspondance exacte acceptés parsearch. - exact_agent_match
bool: indicateurs de correspondance exacte acceptés parsearch. - exact_thread_match
bool: indicateurs de correspondance exacte acceptés parsearch. - record_types
set[str] | None– Même filtre facultatif de type d'enregistrement accepté parsearch. - metadata_filter
dict[str, Any] | None– Même filtre de métadonnées facultatif accepté parsearch, y compris scalaire, imbriqué, liste exacte, appartenance à un tableau et conditions combinées telles que{"source": "slack"},{"review": {"status": "open"}},{"tags": ["prod", "urgent"]}et{"tags": {"$array_contains": "prod"}}.
- query
- Renvoie : paires
(record, distance)renvoyées par l'appelsearchsous-jacent. - Type de retour : List[tuple[Record, float]]
- Elèves : ValueError – Si
kest inférieur à1.
method update (résumé)
Mettre à jour le contenu des enregistrements stockés, l'intégration des données, les métadonnées, l'horodatage ou l'expiration.
- Paramètres:
- record_type
str– Type logique de l'enregistrement à mettre à jour. - record_id
str– Identifiant de l'enregistrement à mettre à jour. - text
str | None: contenu de remplacement facultatif. TransmettezNonepour effacer explicitement le texte stocké lorsque le magasin le prend en charge. Les magasins peuvent également effacer l'état sémantique associé et rejeter les mises à jour non NULLindex_textouembeddingen conflit dans le même appel. Omettez l'argument pour laisser le contenu inchangé. - index_text
str | list[str] | None: charge utile sémantique alternative facultative utilisée pour recalculer ou remplacer l'état de recherche stocké sans modifier le texte persistant. Une chaîne peut être découpée en interne par le magasin. Une liste de chaînes non vides est traitée comme des blocs appartenant à l'appelant et ne doit pas être divisée à nouveau. Certaines implémentations peuvent également persister séparément en tant que texte de recherche hybride. - embedding
list[float] | ndarray | list[list[float] | ndarray] | None: vecteur d'intégration précalculé facultatif ou liste de vecteurs d'intégration de blocs. Lorsqu'elle est fournie, elle est utilisée directement et aucun appel d'intégration n'est effectué. Plusieurs vecteurs nécessitent la mise en correspondance de listes de blocsindex_textou de lignes de texte de bloc stockées existantes. TransmettezNonepour effacer explicitement l'intégration stockée lorsque l'emplacement de stockage la prend en charge. Les magasins avec indexation prenant en charge le texte peuvent également permettre des mises à jour sémantiques sans incorporation ou intégration explicite. - metadata
dict[str, Any] | None– Mappage de métadonnées de remplacement facultatif. TransmettezNonepour effacer les métadonnées lorsque la banque les prend en charge. - timestamp
str | None: nouvel horodatage facultatif à enregistrer avec l'enregistrement. Il indique la date de création de l'enregistrement. Omettez cet argument pour laisser l'horodatage stocké inchangé. TransmettezNonepour effacer l'horodatage enregistré et utiliser l'heure à laquelle l'enregistrement a été ajouté au magasin lorsque celui-ci est pris en charge par le magasin. - ttl_days
int | None: actualisation facultative de l'expiration en jours. Omettez cet argument avecttl_anchorpour conserver l'horodatage d'expiration en cours. TransmettezNonepour effacer l'expiration. - ttl_anchor
TimeToLiveAnchor: ancre de durée de vie facultative pour une actualisation d'expiration. UtilisezTimeToLiveAnchor.CREATED_ATpour l'heure de création de l'enregistrement ouTimeToLiveAnchor.TIMESTAMPpour le remplacementtimestampfourni dans la même mise à jour, ou l'horodatage de l'événement stocké lorsquetimestampest omis. Si vous indiquezttl_anchorsansttl_days, la durée de vie par défaut du stockage ou du schéma est utilisée. Lorsquettl_anchorest omis lors d'une actualisation, les implémentations utilisentTimeToLiveAnchor.CREATED_AT.
- record_type
- Retours : nombre d'enregistrements mis à jour, généralement
0ou1. Renvoie0lorsqu'aucun enregistrement stocké ne correspond à l'identificateur logique demandé. - Type de retour : int
- Elèves : ValueError – Si la charge utile de mise à jour n'est pas valide pour le magasin, par exemple en omettant tous les champs facultatifs ou en fournissant des arguments sémantiques contradictoires.
Banque Oracle DB
classe oracleagentmemory.core.OracleDBMemoryStore
Bases : OracleMemoryStore
Persistance basée sur la base de données pour les messages, les mémoires et les profils d'acteur.
Créez une banque Oracle DB.
- Paramètres:
- embedder
IEmbedder | None– Embedder utilisé lorsque le magasin a besoin d'intégrer des vecteurs locaux. Peut êtreNonelorsque les appelants fournissent toujours des vecteurs précalculés ou lorsque la recherche par mot-clé est utilisée avec des écritures de texte uniquement et des requêtes de texte.SearchStrategy.HYBRIDrequiertOracleDBEmbedderici afin que l'index hybride géré puisse utiliser le modèle dans la base de données de cette intégration. - pool
Any: connexion ou pool Oracle DB. La transmission d'une connexion brute active le mode de session unique pour cette instance de stockage : les appels de stockage simultanés sont sérialisés localement afin de préserver les hypothèses de verrouillage de ligne et de transaction utilisées par les opérations d'écriture. Utilisez un pool de connexions pour les demandes simultanées. - schema_policy
SchemaPolicy | str– Mode de configuration du schéma. Exige par défaut un schéma géré existant et à jour et n'effectue aucune modification LDD. UtilisezSchemaPolicy.CREATE_IF_NECESSARYpour remplir les objets manquants ouSchemaPolicy.RECREATEpour supprimer et recréer des objets gérés.SchemaPolicy.CREATE_IF_NECESSARYpeut appliquer des mises à niveau de version de schéma géré prises en charge, mettre à niveau un schéma vectoriel pour la recherche par mot-clé en ajoutant un index de texte ou pour la recherche hybride en ajoutant les structures de recherche gérée et l'index hybride. - vector_dim
int | None: dimension d'intégration facultative pour le stockage vectoriel local. Transmettez un entier positif pour créer la colonne d'intégration gérée et l'index vectoriel, et pour valider les métadonnées de schéma existantes par rapport à cette dimension. TransmettezNoneou omettez l'argument lorsque cette banque n'a pas besoin de stockage vectoriel local. La recherche par mot-clé et hybride peut fonctionner à partir de texte de recherche stocké sans la colonne d'intégration locale. La recherche vectorielle nécessite un stockage vectoriel local. -
table_name_prefix
str–Préfixe facultatif ajouté aux noms de table/index gérés. Transmettez ceci ou
memory_store_id, pas les deux.Remarque : obsolète depuis la version 26.6.0 : Ce paramètre est obsolète depuis la version 26.6.0 et sera supprimé depuis la version 27.1. Utilisez plutôt
memory_store_id. - memory_store_id
str– ID stable de la banque de mémoire de base de données gérée. Réutilisez le même ID pour rouvrir le même magasin géré. L'ID est joint aux noms d'objet de base de données gérée avec un trait de soulignement. Il doit donc commencer par une lettre, ne contenir que des lettres, des chiffres et des traits de soulignement et ne pas dépasser 16 caractères. Transmettez ceci outable_name_prefix, pas les deux. Si cette option est omise, le magasin utilisetable_name_prefixou la valeur par défaut sans préfixe lorsquetable_name_prefixest également omis. - search_strategy
SearchStrategy– ValeurSearchStrategyqui sélectionne le back-end poursearch(). UtilisezSearchStrategy.VECTOR(valeur par défaut) pour l'extraction vectorielle uniquement,SearchStrategy.HYBRIDpour interroger un index vectoriel hybride Oracle géré sur le texte de recherche stocké ouSearchStrategy.KEYWORDpour effectuer un classement par correspondance mot-clé/texte sur le texte de recherche stocké sans fusion vectorielle.KEYWORDne nécessite pas d'intégrateur.HYBRIDrequiert queembeddersoit une valeurOracleDBEmbedderafin que l'index hybride géré utilise le même modèle dans la base de données que l'intégrateur de banque principale. Si un client de mot-clé ouvre un schéma hybride existant, le magasin peut utiliser la branche de texte de cet index hybride. Le démarrage échoue lorsqu'une stratégie incompatible est utilisée avec un schéma existant car ce schéma peut ne pas contenir l'état de recherche stocké dont la stratégie a besoin. - search_index_sync
SearchIndexSyncMode– ValeurSearchIndexSyncModequi sélectionne le comportement d'actualisation de l'index de recherche géré pourSearchStrategy.HYBRIDetSearchStrategy.KEYWORD.SearchIndexSyncMode.ON_COMMITest la valeur par défaut et permet de rechercher des enregistrements dès que la transaction d'écriture est validée.SearchIndexSyncMode.MANUALlaisse l'actualisation à une opération de synchronisation explicite côté base de données.SearchIndexSyncMode.AUTOpermet à Oracle d'actualiser l'index hybride géré de manière asynchrone et n'est pris en charge qu'avecSearchStrategy.HYBRID; la recherche par mot-clé rejetteAUTO. - memory_retention_config
MemoryRetentionConfig: configuration facultative de la conservation de la mémoire pour les messages et les mémoires sauvegardés par la base de données.MemoryRetentionConfig.default_ttl_daysest utilisé lorsqu'une nouvelle écriture ometttl_days.MemoryRetentionConfig.max_ttl_daysfixe les durées explicites par enregistrement au-dessus de la valeur maximale configurée avec un avertissement et, lorsqu'il est défini,ttl_days=Noneutilise cette valeur maximale au lieu de créer des lignes qui n'expirent pas. AvecSchemaPolicy.CREATE_IF_NECESSARY, une configuration explicite actualise les métadonnées stockées sur un schéma géré à jour existant, mais elle ne met pas à jour les dates d'expiration existantes. Si vous omettez cette opération, le paramètre existant est conservé. Si une configuration explicite laissedefault_ttl_daysoumax_ttl_daysdansNOT_SET_MARKER, le kit SDK résout cet attribut à sa valeur par défaut (None) avant de comparer ou de stocker les métadonnées de schéma. Choisissez cette configuration en fonction des informations attendues stockées dans les enregistrements, des raisons pour lesquelles l'application la conserve et des engagements de conservation des applications ou des réglementations.
- embedder
Avertissement : SchemaPolicy.CREATE_IF_NECESSARY peut être plus coûteux que le démarrage normal de l'emplacement de stockage car il peut appliquer des instructions LDD de schéma géré et réécrire les données au mieux avant la réussite de l'initialisation. Planifiez la première ouverture d'un ancien schéma géré en tant qu'opération de migration ou de maintenance lorsque ce schéma peut contenir de nombreuses lignes.
Si la configuration du schéma doit créer le travail de purge géré des enregistrements expirés mais que l'utilisateur de base de données ne dispose pas du privilège Scheduler-job, l'initialisation avertit et continue. Les messages et les mémoires expirés restent masqués lors des lectures et des recherches, mais ils ne sont pas purgés physiquement tant que le travail n'est pas créé par un utilisateur disposant du privilège CREATE JOB ou d'un planificateur équivalent.
Lorsque SchemaPolicy.CREATE_IF_NECESSARY crée pour la première fois un index hybride géré sur un schéma existant, Oracle analyse le texte de recherche stocké et crée l'état de l'index hybride géré à partir du modèle dans la base de données configuré. L'initialisation du stockage attend la fin de ce script LDD. Planifiez donc la première mise à niveau hybride en tant qu'opération de migration ou de maintenance pour les schémas volumineux. SearchIndexSyncMode contrôle la maintenance en cours après l'existence de l'index. Il ne rend pas le premier build d'index asynchrone.
La création de cet index hybride géré crée également une préférence de vecteur DBMS_VECTOR_CHAIN nommée par le schéma géré. La préférence stocke les métadonnées de configuration du vecteur léger à partir du modèle OracleDBEmbedder configuré. Il peut être inspecté à l'aide des vues de préférences Oracle Text telles que CTX_USER_PREFERENCES et CTX_USER_PREFERENCE_VALUES.
méthode add
Ajoutez des enregistrements à la banque Oracle DB.
- Paramètres:
- contents
list[str | None]– Enregistrez la charge utile pour la persistance. Les valeurs de texte sont également utilisées pour le texte de recherche, sauf siindex_textsest fourni. Lorsqu'une valeur de texte estNone, le magasin peut revenir àmetadata["content"]. Les chaînes vides explicites sont conservées. - record_type
str– Type d'enregistrement logique à créer, tel que"message","memory","guideline","fact","preference","user_profile"ou"agent_profile". - index_texts
list[str | list[str] | None]– Charge utile alternative facultative utilisée comme texte de recherche. Utilisez cette option pour contrôler les index de recherche hybride ou par mot-clé soutenus par la base de données. Chaque entrée de liste externe correspond à un enregistrement. Une entrée de chaîne peut être découpée par bloc par le magasin. Une entrée de liste est traitée comme des blocs appartenant à l'appelant et écrite telle quelle àRECORD_CHUNKS.chunk_text. Lorsqueembeddingsest également fourni, les entrées de liste nécessitent exactement un vecteur par bloc ; les entrées de chaîne n'acceptent qu'un seul vecteur pour cet enregistrement. -
embeddings
list[list[float] | ndarray | list[list[float] | ndarray]]–vecteurs d'intégration précalculés facultatifs alignés sur
contents. Chaque entrée d'enregistrement peut être un vecteur ou une liste de vecteurs de bloc. Lorsque le stockage vectoriel local est configuré, ces vecteurs sont stockés directement en tant que représentation vectorielle de l'enregistrement au lieu d'appeler l'intégrateur du magasin pour créer des vecteurs locaux pour l'écriture. Un seul vecteur représente l'ensemble du texte sémantique, même lorsque le bloc configuré le diviserait autrement. Plusieurs vecteurs de bloc nécessitent des listes de blocsindex_textscorrespondantes.Dans
SearchStrategy.VECTOR, la recherche vectorielle se classe par rapport aux vecteurs stockés. DansSearchStrategy.HYBRIDouSearchStrategy.KEYWORD, la recherche soutenue par la base de données se classe par le texte de recherche stocké et l'état d'index hybride ou de texte géré par Oracle, de sorte que les incorporations d'ajout/d'ajout affectent uniquement tout stockage vectoriel local configuré, et non cette stratégie de recherche active. Si cette banque a été configurée sans stockage vectoriel local, indiquezindex_textsau lieu deembeddingspour remplacer le texte visible par ces index sensibles au texte. - record_ids
str | None | list[str | None]: identificateurs invisibles par l'appelant (facultatif). Une seule chaîne peut être utilisée pour les insertions d'un enregistrement, tandis que les listes doivent correspondre àcontents. Les identificateurs générés sont renvoyés lorsque ce champ est omis. - thread_ids
str | None | list[str | None]– Identificateurs de thread facultatifs associés aux enregistrements insérés. Les valeurs scalaires peuvent être diffusées sur des entrées alignées. - user_ids
str | None | list[str | None]– Identificateurs utilisateur facultatifs associés aux enregistrements insérés. Les valeurs scalaires peuvent être diffusées sur des entrées alignées. - agent_ids
str | None | list[str | None]: identificateurs d'agent facultatifs associés aux enregistrements insérés. Les valeurs scalaires peuvent être diffusées sur des entrées alignées. - rôles
str | None | list[str | None]: rôles de message facultatifs tels que"user"ou"assistant". Utilisé uniquement lorsquerecord_typeest"message". - timestamps
str | None | list[str | None]: horodatages facultatifs à enregistrer avec les enregistrements. Chaque horodatage indique la date de création de l'enregistrement. Les valeurs scalaires peuvent être diffusées sur des entrées alignées. Les entrées omises ouNonelaissent l'horodatage de l'événement non défini. Lorsquettl_anchorest défini surTimeToLiveAnchor.TIMESTAMP, chaque enregistrement affecté doit avoir une valeur d'horodatage ISO-8601 concrète. Les horodatages ISO-8601 sans fuseau horaire sont traités comme UTC. - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– Dictionnaires de métadonnées facultatifs. Les métadonnées peuvent inclure"content"en tant que source de secours lorsqu'une valeur de texte est omise plutôt que définie sur"". - ttl_days
int | None | list[int | None]: durée de vie facultative en jours pour les enregistrements de type message et mémoire. Omettez cet argument pour utiliserMemoryRetentionConfig.default_ttl_daysà partir du schéma géré. TransmettezNonepour utiliserMemoryRetentionConfig.max_ttl_dayslorsque la configuration de conservation en définit un ou pour créer un enregistrement qui n'expire pas lorsqu'il ne l'est pas. Les valeurs au-dessus deMemoryRetentionConfig.max_ttl_dayssont bloquées à ce maximum avec un avertissement. Les valeurs scalaires peuvent être diffusées sur des entrées alignées. - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor]: ancre de durée de vie facultative. UtilisezTimeToLiveAnchor.CREATED_ATpour expirer par rapport à l'heure de création de la base de données ouTimeToLiveAnchor.TIMESTAMPpour expirer par rapport à l'horodatage d'événement fourni. Lorsqu'elle est omise, l'expiration utiliseTimeToLiveAnchor.CREATED_AT. L'expiration ancrée dans l'horodatage nécessite un horodatage ISO-8601 concret pour chaque enregistrement inséré. Les horodatages ISO-8601 sans fuseau horaire sont traités comme UTC. - **store_kwargs (Any) – Options d'écriture de la base de données.
batch_sizecontrôle la taille de batch executemany et la valeur par défaut est256.
- contents
- Retours : Identifiants pour les enregistrements insérés, dans le même ordre logique que l'entrée.
- Type de retour : list[str]
Exemples
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']
méthode add_agent
Ajoutez un enregistrement de profil d'agent.
- Paramètres:
- agent_id
str: identificateur d'agent. - information
str: informations de forme libre sur l'agent. Ce texte est stocké en tant que contenu de profil et utilisé pour créer la représentation recherchable du profil. - metadata
dict[str, Any] | None– Mapping de métadonnées facultatif stocké sur la ligne de profil d'agent.
- agent_id
- Retours : Identificateur de l'enregistrement de profil d'agent inséré.
- Type de retour : str
Remarques
La portée des enregistrements de profil d'agent n'est pas définie. L'identificateur d'enregistrement public inséré est la même valeur transmise que agent_id.
Exemples
store.add_agent("a-docs-agent", "Support assistant")
'a-docs-agent'
method add_async (async)
Ajoutez de manière asynchrone des enregistrements orientés ligne au magasin.
accepte les mêmes arguments et renvoie les mêmes identificateurs que add().
- Paramètres:
- contenu
list[str | None] - record_type
str - textes_index
list[str | list[str] | None] - embarquements
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] - rôles
str | None | list[str | None] - horodatages
str | None | list[str | None] - métadonnées
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - store_kwargs
Any
- contenu
- Type de retour : list[str]
méthode add_batches
Ajoutez des lots logiques préparés par l'appelant au magasin.
- Paramètres:
- batches
list[PendingRecordBatch]: lots logiques entièrement préparés pour persistance. Chaque lot doit contenir ses propres champs par enregistrement, tels querecord_type, les valeurs de portée, les rôles, les horodatages et les métadonnées. - **store_kwargs (N'importe lequel) – Options d'écriture spécifiques à l'implémentation transmises au magasin concret.
- batches
- Retours : Identifiants pour les enregistrements insérés, dans le même ordre logique que les lots et lignes d'entrée.
- Type de retour : List[str]
Exemples
store.add_batches(
[
PendingRecordBatch(
texts=["pizza batch"],
record_type="memory",
record_ids="mem-batch-docs",
)
]
)
['mem-batch-docs']
method add_batches_async (async)
Ajoutez de manière asynchrone des lots logiques préparés par l'appelant au magasin.
accepte les mêmes arguments et renvoie les mêmes identificateurs que add_batches().
- Paramètres:
- batchs
list[PendingRecordBatch] - store_kwargs
Any
- batchs
- Type de retour : list[str]
méthode add_user
Ajouter un enregistrement de profil utilisateur.
- Paramètres:
- user_id
str: identificateur utilisateur. - information
str: informations de forme libre sur l'utilisateur. Ce texte est stocké en tant que contenu de profil et utilisé pour créer la représentation recherchable du profil. - metadata
dict[str, Any] | None– Mapping de métadonnées facultatif stocké sur la ligne du profil utilisateur.
- user_id
- Retours : Identifiant de l'enregistrement de profil utilisateur inséré.
- Type de retour : str
Remarques
Les enregistrements de profil utilisateur n'ont pas de portée. L'identificateur d'enregistrement public inséré est la même valeur transmise que user_id.
Exemples
store.add_user("u-docs-profile", "Prefers concise answers.")
'u-docs-profile'
méthode delete
Supprimez une ligne gérée et ses lignes de bloc par identificateur.
- Paramètres:
- record_type
str– Libellé de type d'enregistrement à supprimer. Les types pris en charge sont"thread","message","memory","guideline","fact","preference","user_profile"et"agent_profile". - record_id
str– Identificateur à supprimer. - cascade
bool: lorsqueTrue, développez les cibles de niveau supérieur prises en charge, telles que les profils d'acteur, jusqu'à leurs lignes enfant ciblées dans la même transaction. Pour une cible de profil utilisateur ou de profil d'agent, cela supprime d'abord les lignes de thread détenues, ce qui enlève leurs lignes de message de portée thread et de table de mémoire, puis supprime tous les messages de portée acteur directs restants et les lignes de type mémoire (memory,guideline,fact,preference). Ce nettoyage ciblé s'exécute quand la ligne de profil correspondante est déjà absente.
- record_type
- Retours : nombre de cibles de niveau supérieur demandées enlevées, généralement
0ou1. Les lignes enfant en cascade ne sont pas comptabilisées séparément. Il peut donc s'agir de0lorsqu'un profil d'acteur manquant déclenche un nettoyage ciblé. - Type de retour : int
Remarques
L'opération s'exécute dans une transaction. Lorsque cascade est activé pour une cible de niveau supérieur prise en charge, la suppression de profil et toutes les suppressions enfant ciblées sont validées ou annulées ensemble.
Exemples
store.add(["Delete me"], record_type="memory", record_ids="mem-delete-docs")
['mem-delete-docs']
store.delete("memory", "mem-delete-docs")
1
méthode delete_thread
Supprimer un thread et ses lignes stockées associées.
- Paramètres : thread_id
str: identificateur de thread dont les lignes doivent être enlevées, notamment la ligne de thread, les lignes enfant dépendantes et le nettoyage explicite des lignes de segment. - Renvoie : nombre de lignes de thread supprimées (
0ou1). - Type de retour : int
Remarques
Utilisez cette opération lorsque vous avez besoin d'un nettoyage en cascade de niveau thread. Dans la banque de données adossée à une base de données, la suppression du thread enlève la ligne de thread géré ainsi que les lignes de message et de mémoire associées, ainsi que les données de recherche gérées pour extraction. Elle est plus large qu'une suppression de niveau message, qui supprime uniquement la ligne de message brut. La suppression de thread enlève les lignes de message et de mémoire dépendantes ainsi que les données d'extraction associées dans la même transaction.
Exemples
store.delete_thread("c1")
0
method get
Extraire un enregistrement stocké par identifiant.
- Paramètres:
- record_type
str– Libellé de type d'enregistrement résolu en ligne gérée, telle que"message","memory","guideline","fact","preference","user_profile"ou"agent_profile". - record_id
str: identificateur à rechercher.
- record_type
- Retours : enregistrement rempli avec des métadonnées décodées lorsqu'elles sont trouvées, sinon
None. - Type de retour : Enregistrement | Aucun
Exemples
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'
méthode list
Enumérer les enregistrements persistants pour un type d'enregistrement.
- Paramètres:
- record_type
str– Libellé du type d'enregistrement (par exemple,"message","memory","guideline","fact","preference","user_profile"ou"agent_profile"). - limit
int | None– Nombre maximum d'enregistrements à renvoyer (facultatif). Lorsqu'il est omis, le magasin utilise sa limite de liste par défaut. TransmettezNonepour désactiver cette limite et renvoyer tous les enregistrements correspondants. - thread_id
str | None– Filtre de portée de thread exact. Lorsqu'il est omis, aucun filtrage n'est appliqué. Lorsqu'elle est définie surNone, seules les lignes dontthread_idest SQLNULLsont renvoyées. Les types d'enregistrements non ciblés ignorent ce filtre. - user_id
str | None– Filtre de portée utilisateur exact. Lorsqu'il est omis, aucun filtrage n'est appliqué. Lorsqu'elle est définie surNone, seules les lignes dontuser_idest SQLNULLsont renvoyées. Les types d'enregistrements non ciblés ignorent ce filtre. - agent_id
str | None: filtre de portée d'agent exact. Lorsqu'il est omis, aucun filtrage n'est appliqué. Lorsqu'elle est définie surNone, seules les lignes dontagent_idest SQLNULLsont renvoyées. Les types d'enregistrements non ciblés ignorent ce filtre. -
metadata_filter
dict[str, Any] | None–Filtre de métadonnées. Lorsqu'il est omis, aucun filtrage n'est appliqué. Lorsqu'elle est définie sur
None, seuls les enregistrements sans métadonnées stockées sont renvoyés. Lorsqu'elle est définie sur une dictée, les entrées demetadata_filtersont combinées à la sémantique AND. Les entrées dont la valeur n'est pas un dictionnaire opérateur de niveau champ utilisent une sémantique de correspondance exacte : la clé demandée doit exister dans les métadonnées stockées. Les dictionnaires imbriqués sont mis en correspondance de manière récursive. Les valeurs scalaires et de liste sont mises en correspondance par égalité exacte ; l'ordre et la longueur de la liste doivent également correspondre. Pour tester l'appartenance à un tableau, utilisez un dictionnaire d'opérateurs de niveau champ tel que{"tags": {"$array_contains": "prod"}}. Un opérande de liste pour"$array_contains"signifie que toutes les valeurs répertoriées doivent être présentes ;"$array_contains_any"signifie qu'au moins une valeur répertoriée doit être présente. Utilisez"$not"pour annuler une autre expression de niveau champ sur le même champ, y compris un dictionnaire d'opérateur ou une valeur de correspondance exacte brute. Les expressions négatives correspondent lorsque l'expression positive échoue, y compris les champs manquants ; l'appartenance au tableau négatif correspond également aux champs non-tableau. Par exemple,metadata_filter={"source": "slack"}pour un champ scalaire,metadata_filter={"review": {"status": "open"}}pour un champ imbriqué etmetadata_filter={"tags": ["prod", "urgent"]}pour une correspondance de liste exacte. Combinez les conditions pour les exiger toutes :metadata_filter={ "source": "slack", "review": {"status": "open"}, "tags": ["prod", "urgent"], }
- record_type
- Retours : Enregistrements triés par ordre d'insertion.
- Type de retour : list[Enregistrement]
Remarques
"user_profile" et "agent_profile" sont des types d'enregistrement non ciblés. Pour ces types d'enregistrement, thread_id, user_id et agent_id sont ignorés et l'identité de l'acteur reste dans record.id.
Exemples
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
méthode list_thread_messages
Renvoyer les messages persistants pour un thread.
- Paramètres:
- thread_id
str: identificateur de thread dont les messages doivent être renvoyés. - last_n
int | None: nombre facultatif de messages les plus récents à renvoyer.
- thread_id
- Retours : Enregistrements de message triés par ordre d'insertion.
- Type de retour : list[MessageRecord]
Exemples
store.list_thread_messages("c1")
[]
méthode search
Rechercher des enregistrements par similarité.
Le back-end de recherche actif dépend de l'adresse SearchStrategy configurée de la banque. SearchStrategy.VECTOR classe le vecteur de requête par rapport aux vecteurs d'enregistrement stockés. SearchStrategy.HYBRID interroge l'index hybride géré d'Oracle sur le texte de recherche stocké et son état d'index géré. SearchStrategy.KEYWORD se classe uniquement par le texte correspondant au texte de recherche stocké.
- Paramètres:
- query
str | None: texte en langage naturel facultatif utilisé pour rechercher des enregistrements correspondants ou similaires. Indiquez au moins un caractère autre qu'un espace lorsquequery_vectorest omis. La recherche vectorielle intègre ce texte ; la recherche par mot clé le compare au texte de recherche stocké ; la recherche hybride l'utilise à la fois pour la récupération de texte et de vecteur. - query_vector
list[float] | None: intégration de requête précalculée facultative. Vous devez fournir exactement l'une des optionsqueryetquery_vector. Dans la recherche vectorielle, cela est comparé aux vecteurs d'enregistrement stockés. Dans la recherche hybride, elle est envoyée à l'index hybride géré d'Oracle en tant qu'entrée vectorielle côté requête et ne permet pas à la banque de base de données de comparer directement les vecteurs stockés d'ajout ou de mise à jour. La recherche par mot-clé n'accepte pasquery_vector. Le vecteur doit être non vide, unidimensionnel et ne contenir que des valeurs numériques finies. Dans la recherche hybride, sa dimension doit correspondre au modèleOracleDBEmbedderconfiguré. - k
int– Nombre maximum de résultats à renvoyer. Les valeurs explicites doivent être au moins1. Limite supérieure : l'appel peut renvoyer moins de résultatsklorsque les filtres sont trop restrictifs, lorsqu'il existe moins d'enregistrements correspondants non expirés ou en raison d'un comportement de recherche propre à l'implémentation. - thread_id
str | None: identificateur de portée de thread facultatif.exact_thread_match=Falselaisse la dimension de thread sans contrainte.exact_thread_match=Truecorrespond exactement au paramètrethread_idfourni. Si la valeur estthread_id=None, elle correspond uniquement aux enregistrements non ciblés sur la dimension de thread. - user_id
str | None: identificateurs de portée utilisateur et agent facultatifs. L'indicateurexact_*_match=Falsecorrespondant laisse cette dimension sans contrainte.exact_*_match=Truecorrespond exactement à l'ID fourni. Si l'ID estNone, il correspond uniquement aux enregistrements non ciblés sur cette dimension. - agent_id
str | None: identificateurs de portée d'agent et d'utilisateur facultatifs. L'indicateurexact_*_match=Falsecorrespondant laisse cette dimension sans contrainte.exact_*_match=Truecorrespond exactement à l'ID fourni. Si l'ID estNone, il correspond uniquement aux enregistrements non ciblés sur cette dimension. - exact_user_match
bool– Indique si chaque identificateur de portée doit correspondre exactement.Falselaisse cette dimension sans contrainte.Truecorrespond exactement à la valeur fournie. Si cette valeur estNone, elle ne correspond qu'aux enregistrements non ciblés de cette dimension. - exact_agent_match
bool– Indique si chaque identificateur de portée doit être mis en correspondance exactement.Falselaisse cette dimension sans contrainte.Truecorrespond exactement à la valeur fournie. Si cette valeur estNone, elle ne correspond qu'aux enregistrements non ciblés de cette dimension. - exact_thread_match
bool: indique si chaque identificateur de portée doit être mis en correspondance exactement.Falselaisse cette dimension sans contrainte.Truecorrespond exactement à la valeur fournie. Si cette valeur estNone, elle ne correspond qu'aux enregistrements non ciblés de cette dimension. - record_types
set[str] | None– Ensemble facultatif de types d'enregistrement recherchables à inclure. Lorsqu'elle est omise, la recherche de base de données couvre les messages, les lignes de la table mémoire et les profils d'acteur. Les profils d'acteur fournissent leur charge utileinformation, tandis que les lignes de message et de mémoire fournissent leur charge utilecontent. Au cours de la recherche, les types d'enregistrement de profil utilisent leur identifiant d'acteur pour la dimension de portée applicable, tandis que les dimensions de portée restantes se comportent commeNone. - metadata_filter
dict[str, Any] | None– Mappage de filtre de métadonnées facultatif. Les entrées dansmetadata_filtersont combinées avec la sémantique AND. Les entrées dont la valeur n'est pas un dictionnaire opérateur de niveau champ utilisent une sémantique de correspondance exacte : la clé demandée doit exister dans les métadonnées stockées. Les dictionnaires imbriqués sont mis en correspondance de manière récursive. Les valeurs scalaires et de liste sont mises en correspondance par égalité exacte ; l'ordre et la longueur de la liste doivent également correspondre. Pour tester l'appartenance à un tableau, utilisez un dictionnaire d'opérateurs de niveau champ tel que{"tags": {"$array_contains": "prod"}}. Un opérande de liste pour"$array_contains"signifie que toutes les valeurs répertoriées doivent être présentes ;"$array_contains_any"signifie qu'au moins une valeur répertoriée doit être présente. Utilisez"$not"pour annuler une autre expression de niveau champ sur le même champ, y compris un dictionnaire d'opérateur ou une valeur de correspondance exacte brute. Les expressions négatives correspondent lorsque l'expression positive échoue, y compris les champs manquants ; l'appartenance au tableau négatif correspond également aux champs non-tableau.
- query
- Renvoie : paires
(record, distance)triées par distance croissante. La liste peut contenir moins dekentrées. - Type de retour : list[tuple[Record, float]]
- Elèves : ValueError – Si
kest inférieur à1, siqueryetquery_vectorsont tous deux ou aucun d'entre eux, siqueryest vide, si le mode vectoriel ne peut pas résoudre une intégration de requête, siquery_vectorn'est pas valide ou simetadata_filtern'est pas valide.
Exemples
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'
Filtrer sur une valeur de métadonnées scalaire :
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
Filtrer sur les métadonnées imbriquées :
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
Faites correspondre exactement une valeur de liste, y compris l'ordre :
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
Filtrer lorsqu'un tableau de métadonnées contient une valeur :
any(
record.id == "mem-search-meta-tags-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"tags": {"$array_contains": "prod"}},
)
)
True
Combinez plusieurs conditions de métadonnées. Un enregistrement doit satisfaire toutes les clés :
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
method search_async (async)
Rechercher des enregistrements de manière asynchrone par similarité sémantique.
- Paramètres:
- query
str | None: même texte de requête accepté parsearch. - k
int: nombre de résultats maximal identique accepté parsearch. Les valeurs explicites doivent être au moins1. - query_vector
list[float] | None– Même intégration de requête précalculée facultative acceptée parsearch. - thread_id
str | None– Les mêmes filtres de portée facultatifs acceptés parsearch. - user_id
str | None– Les mêmes filtres de portée facultatifs acceptés parsearch. - agent_id
str | None– Les mêmes filtres de portée facultatifs acceptés parsearch. - exact_user_match
bool– Les mêmes indicateurs de correspondance exacte acceptés parsearch. - exact_agent_match
bool: indicateurs de correspondance exacte acceptés parsearch. - exact_thread_match
bool: indicateurs de correspondance exacte acceptés parsearch. - record_types
set[str] | None– Même filtre facultatif de type d'enregistrement accepté parsearch. - metadata_filter
dict[str, Any] | None– Même filtre de métadonnées facultatif accepté parsearch, y compris scalaire, imbriqué, liste exacte, appartenance à un tableau et conditions combinées telles que{"source": "slack"},{"review": {"status": "open"}},{"tags": ["prod", "urgent"]}et{"tags": {"$array_contains": "prod"}}.
- query
- Renvoie : paires
(record, distance)renvoyées par l'appelsearchsous-jacent. - Type de retour : List[tuple[Record, float]]
- Elèves : ValueError – Si
kest inférieur à1.
méthode update
Mettre à jour le contenu des enregistrements stockés, l'état de la recherche, les métadonnées et les valeurs d'horodatage.
- Paramètres:
- record_type
str– Libellé de type d'enregistrement de la ligne en cours de modification (par exemple,"message","memory","guideline","fact","preference","user_profile"ou"agent_profile") - record_id
str– Identificateur de la ligne stockée à mettre à jour. - text
str | None– Texte de remplacement facultatif conservé dans la colonnecontent. TransmettezNonepour effacer le texte stocké et effacer l'intégration stockée. Transmettez uniquementNoneou les arguments sémantiques omis dans le même appel. Transmettez""pour conserver le contenu vide explicite tout en effaçant toute représentation de vecteur stockée pour cet enregistrement. Lorsqu'il est omis, le contenu existant reste inchangé. - index_text
str | list[str] | None: charge utile sémantique uniquement facultative. Lorsqu'elle est omise,textest utilisé pour l'indexation sémantique. Sur les schémas à capacité hybride, cela devient également le texte de recherche stocké utilisé par le composant de texte d'Oracle. Une valeur de chaîne peut être découpée en blocs par le magasin. Une valeur de liste est traitée comme des blocs appartenant à l'appelant et écrite telle quelle dansRECORD_CHUNKS. Lorsque seulembeddingest fourni, le texte de recherche existant est réutilisé. -
embedding
list[float] | ndarray | list[list[float] | ndarray] | None–Facultatif vecteur d'intégration précalculé ou liste de vecteurs d'intégration de blocs. Lorsque le stockage vectoriel local est configuré, il est utilisé directement et aucun appel d'intégration n'est effectué. Transmettez
Nonepour effacer l'intégration stockée. Un seul vecteur représente l'ensemble du texte de remplacement lorsquetextest fourni, même lorsque le bloc configuré fractionne ce texte. Plusieurs vecteurs de bloc sont rejetés lors du remplacement du texte, sauf siindex_textest une liste de blocs. Lorsque seulembeddingest fourni, le nombre d'incorporation doit correspondre aux lignes de bloc existantes de l'enregistrement.Dans
SearchStrategy.VECTOR, la recherche vectorielle se classe par rapport à l'intégration stockée. DansSearchStrategy.HYBRIDouSearchStrategy.KEYWORD, la recherche soutenue par la base de données se classe par le texte de recherche stocké et l'état d'index hybride ou de texte géré par Oracle, de sorte que les incorporations de mise à jour n'affectent que tout stockage vectoriel local configuré, et non cette stratégie de recherche active. Si cette banque a été configurée sans stockage vectoriel local, indiquezindex_textau lieu deembeddingpour mettre à jour le texte visible par ces index sensibles au texte. Les mises à jour sémantiques en texte uniquement peuvent omettreembeddingentièrement dans ces modes. - metadata
dict[str, Any] | None– Mise en correspondance de métadonnées facultative sérialisée avec JSON et stockée dansmetadata. - timestamp
str | None: nouvel horodatage facultatif à enregistrer avec l'enregistrement. Il indique la date de création de l'enregistrement. Lorsqu'il est omis, l'horodatage existant est conservé. TransmettezNonepour effacer l'horodatage enregistré et utiliser l'heure de création de la base de données pour les futures actualisations d'expirationTimeToLiveAnchor.CREATED_AT. Lorsquettl_anchorest défini surTimeToLiveAnchor.TIMESTAMP, les horodatages ISO-8601 sans fuseau horaire sont traités comme UTC. - ttl_days
int | None: actualisation facultative de l'expiration en jours. Omettez cet argument avecttl_anchorpour conserver l'horodatage d'expiration en cours. TransmettezNonepour utiliserMemoryRetentionConfig.max_ttl_dayslorsque la configuration de conservation en définit une ou pour effacer l'expiration lorsqu'elle ne le fait pas. Les valeurs au-dessus deMemoryRetentionConfig.max_ttl_dayssont bloquées à ce maximum avec un avertissement. L'actualisation de l'expiration peut rendre un enregistrement expiré visible à nouveau s'il n'a pas encore été purgé. - ttl_anchor
TimeToLiveAnchor: ancre de durée de vie facultative pour une actualisation d'expiration. UtilisezTimeToLiveAnchor.CREATED_ATpour compter à partir de l'heure de création stockée ouTimeToLiveAnchor.TIMESTAMPpour compter à partir de l'élémenttimestampde remplacement fourni dans la même mise à jour ou de l'horodatage de l'événement stocké lorsquetimestampest omis. La fourniture dettl_anchorsansttl_daysactualise l'expiration à l'aide deMemoryRetentionConfig.default_ttl_daysdu schéma. Lorsquettl_anchorest omis lors d'une actualisation, le magasin utiliseTimeToLiveAnchor.CREATED_AT. Les actualisations ancrées dans l'horodatage nécessitent un horodatage ISO-8601 de remplacement dans le même appel ou un horodatage d'événement stocké existant dans ce format. Les horodatages ISO-8601 sans fuseau horaire sont traités comme UTC.
- record_type
- Retours : nombre de lignes mises à jour (
0ou1). Renvoie0lorsqu'aucun enregistrement logique ne correspond àrecord_typeetrecord_id. - Type de retour : int
- Elèves : ValueError – Si
record_typen'est pas pris en charge, si aucune charge utile de mise à jour n'est fournie ou si les arguments de mise à jour sémantique sont incompatibles.
Exemples
store.add(["Original note"], record_type="memory", record_ids="mem-update-docs")
['mem-update-docs']
store.update("memory", "mem-update-docs", text="Updated note")
1
store.get("memory", "mem-update-docs").content
'Updated note'
Stratégie de recherche
classe oracleagentmemory.core.dbsearch.SearchStrategy
Bases : Enum
Comportement de recherche pour les banques Oracle DB.
L'initialisation de la banque de données utilise la stratégie sélectionnée pour choisir la fonction de recherche de schéma géré. La recherche VECTOR stocke les incorporations locales. La recherche KEYWORD stocke le texte recherchable et un index de texte. La recherche HYBRID stocke le texte recherchable plus l'état d'index vectoriel hybride géré par Oracle. La banque de base de données valide cette fonctionnalité de schéma au démarrage afin qu'une stratégie incompatible ne renvoie pas de résultats incomplets en mode silencieux.
VECTOR- Recherche par similarité vectorielle uniquement. Le magasin intègre la requête avec l'intégrateur configuré, ou utilise un
query_vectorfourni par l'appelant, et classe les enregistrements en fonction de la distance par rapport aux vecteurs stockés. Utilisez-le avec un schéma de base de données configuré pour la recherche vectorielle. HYBRID- Recherchez avec l'index hybride géré d'Oracle. Oracle combine la correspondance de texte sur le texte de recherche stocké avec le classement vectoriel à partir de l'index hybride dans la base de données. Utilisez cette option lorsque les utilisateurs peuvent effectuer une recherche par langage naturel, ainsi que par identifiants, alias ou noms de produit exacts. Cette stratégie exige que l'intégrateur principal du magasin soit un
OracleDBEmbedderafin que l'index géré et le magasin partagent un modèle dans la base de données. KEYWORD- Effectuez une recherche uniquement par mot-clé/texte sur le texte de recherche stocké. Ce mode ne crée pas d'intégrations de requête locale et n'a pas besoin d'un intégrateur Oracle DB. Lorsqu'il est ouvert sur un schéma hybride existant, il peut utiliser la branche de texte de cet index hybride sans créer de nouvel index hybride. Utilisez-le lorsque les identificateurs exacts, les alias, les noms de produit ou les expressions courtes doivent conduire à la récupération sans fusion vectorielle.
HYBRIDE = 'hybride'
MOT-clé = 'mot-clé'
VECTEUR = 'vecteur'
Mode de synchronisation d'index de recherche
classe oracleagentmemory.core.dbsearch.SearchIndexSyncMode
Bases : Enum
Comportement d'actualisation des index de recherche de base de données gérée.
Ce paramètre détermine quand Oracle rend le texte de recherche nouveau ou modifié visible pour la recherche en mode texte adossée à une base de données. SearchStrategy.HYBRID utilise l'index vectoriel hybride géré d'Oracle. SearchStrategy.KEYWORD utilise un index Oracle Text. SearchStrategy.VECTOR n'utilise pas ce paramètre.
ON_COMMIT- Actualisez l'index lors de la validation de la transaction d'écriture. Il s'agit du choix par défaut et du plus simple pour la plupart des applications, car les enregistrements peuvent faire l'objet d'une recherche immédiatement après une écriture réussie. Il peut ajouter du travail pour écrire des transactions car l'index est immédiatement mis à jour.
MANUAL- N'actualisez pas l'index automatiquement. Les enregistrements nouveaux ou mis à jour peuvent ne pas apparaître dans la recherche par mot clé ou hybride tant que vous n'avez pas exécuté vous-même l'opération de synchronisation d'index côté base de données. Cela est utile pour les chargements en masse ou les fenêtres de maintenance dans lesquelles vous souhaitez contrôler l'actualisation des exécutions de travail.
AUTO- Laissez Oracle actualiser l'index hybride géré de manière asynchrone. Les écritures peuvent éviter le coût d'actualisation immédiat, mais les résultats de la recherche peuvent différer des écritures récentes jusqu'à ce qu'Oracle termine l'actualisation en arrière-plan. Ce mode est pris en charge uniquement avec
SearchStrategy.HYBRID.
Avertissement : ce paramètre contrôle la maintenance continue après l'existence de l'index de recherche géré. Il ne rend pas le premier build d'index asynchrone. La création d'un index hybride géré sur du texte de recherche stocké existant peut être longue car Oracle construit l'état de l'index hybride géré à partir de ce texte.
AUTO = 'AUTO'
MANUEL = 'manuel'
ON_COMMIT = 'ON_COMMIT'
Durée de vie
classe oracleagentmemory.core.retention.MemoryRetentionConfig
Bases : object
Paramètres de conservation de niveau schéma pour les enregistrements sauvegardés par Oracle DB.
- Paramètres:
- default_ttl_days
int | None: durée de vie par défaut, en jours. Conservez la valeurNOT_SET_MARKERpour utiliser la valeur par défautNone(pas de valeur maximale). - max_ttl_days
int | None: durée de vie maximale (en jours) facultative. Conservez la valeurNOT_SET_MARKERpour utiliser la valeur par défaut deNone. TransmettezNonesans limite maximale. Lorsqu'elle est définie, il s'agit d'une limitation stricte : les écritures qui tentent d'utiliser une valeurttl_dayssupérieure sont bloquées à cette valeur maximale avec un avertissement, et les API d'écriture qui transmettentttl_days=Noneutilisent cette valeur maximale au lieu de créer des enregistrements qui n'expirent pas.
- default_ttl_days
classe oracleagentmemory.apis.ttl.TimeToLiveAnchor
Bases : Enum
Ancrage utilisé pour calculer un horodatage d'expiration à partir d'une durée de vie.
CREATED_AT- Calculer l'expiration à partir de l'horodatage de création de la base de données de l'enregistrement. Il s'agit de la valeur par défaut lorsque les appelants omettent
ttl_anchor. TIMESTAMP- Calculer l'expiration à partir de l'horodatage de l'événement stocké de l'enregistrement. Utilisez cette option lorsqu'un message ou une mémoire représente un événement plus ancien et doit expirer par rapport à l'heure de l'événement au lieu de l'heure d'insertion.
CREATED_AT = 'CREATED_AT'
TIMESTAMP = 'TIMESTAMP'
Stratégie de schéma
classe oracleagentmemory.core.SchemaPolicy
Bases : str, Enum
Stratégie de création de schéma pour les banques Oracle DB.
EXIGER_EXISTANT
Vérifiez que le schéma géré complet existe déjà et qu'il est à jour. Ne créez ni ne modifiez des objets de base de données.
CREATE_IF_EMPTY
S'il n'existe aucun objet géré, initialisez le schéma. Si des objets existent déjà, vous devez disposer d'un schéma géré complet et à jour.
CRÉER_SI_NÉCESSAIRE
Créez les objets gérés manquants et appliquez les mises à niveau de schéma géré prises en charge.
RECRÉER
Supprimez et recréez tous les objets de schéma gérés. C'est destructeur.