Magasins et schéma

Cette page présente les abstractions du magasin principal et les contrôles de schéma utilisés par la trousse SDK de mémoire de l'agent Oracle.

API de magasin

classe oracleagentmemory.core.OracleMemoryStore

Bases : IMemoryStore

Interface de magasin commune utilisée par OracleAgentMemory.

Une implémentation de magasin est responsable de la persistance des enregistrements de texte et de la recherche de similarité. Les points d'entrée synchrones et asynchrones sont définis afin que les API de niveau supérieur puissent exposer les surfaces de synchronisation/asynchrones correspondantes sans dupliquer la logique propre au magasin.

méthode search (résumé)

recherche d'enregistrements par similarité;

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'

Filtre 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

Correspondance exacte d'une valeur de liste, ordre compris :

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

Magasin Oracle DB

classe oracleagentmemory.core.OracleDBMemoryStore

Bases : OracleMemoryStore

Persistance soutenue par la base de données pour les messages, les souvenirs et les profils d'acteur.

Créez un magasin Oracle DB.

méthode add_agent

ajout d'une table de profil d'agent;

Notes

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'

méthode add_user

Ajouter un enregistrement de profil d'utilisateur.

Notes

La portée des enregistrements de profil d'utilisateur n'est pas définie. 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

Sert à supprimer un enregistrement géré et ses enregistrements de fragmentation par code.

Notes

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 du profil et toutes les suppressions enfants ciblées sont validées ou repositionné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

Supprimez un thread et les lignes stockées associées.

Notes

Utilisez cette opération lorsque vous avez besoin d'un nettoyage en cascade avec une portée de fil. Dans l'espace de stockage soutenu par la base de données, la suppression de l'unité d'exécution supprime la ligne d'unité d'exécution gérée ainsi que les lignes de message et de mémoire associées, plus les lignes de fragment de table mises à jour pour l'extraction. Ceci est plus large qu'une suppression au niveau du message, qui supprime uniquement l'enregistrement de message brut. La suppression d'unité d'exécution supprime les rangées dépendantes de message et de mémoire référencées dans THREAD ainsi que les rangées RECORD_CHUNKS correspondantes dans la même transaction.

Exemples

store.delete_thread("c1")
0

méthode get

Extraire un enregistrement stocké par identificateur.

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

Énumérer les enregistrements persistants pour un type d'enregistrement.

Notes

"user_profile" et "agent_profile" sont des types d'enregistrement sans portée. 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.

Exemples

store.list_thread_messages("c1")
[]

méthode search

recherche d'enregistrements par similarité;

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'

Filtre 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

Correspondance exacte d'une valeur de liste, ordre compris :

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

méthode update

mise à jour du contenu de la table stockée, de l'intégration des fragments et des valeurs des métadonnées;

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'

Politique de schéma

classe oracleagentmemory.core.SchemaPolicy

Bases : str, Enum

Politique de création de schéma pour les magasins Oracle DB.

EXIGENCES EXISTANTES

Vérifiez que le schéma géré complet existe déjà et qu'il est à jour. Ne créez ni ne modifiez les objets de base de données.

CREATE_IF_VIDE

S'il n'existe aucun objet géré, amorcer 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éer uniquement les objets gérés manquants, y compris les métadonnées.

RECRÉEZ

Supprimez et recréez tous les objets de schéma gérés. C'est destructeur.