Speicher und Schema

Auf dieser Seite werden die Core-Speicherabstraktionen und Schemakontrollen angezeigt, die vom Oracle Agent-Speicher-SDK verwendet werden.

Shop-API

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 search (Übung)

Datensätze nach Ähnlichkeit suchen

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-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

Oracle DB-Speicher

Klasse oracleagentmemory.core.OracleDBMemoryStore

Basis: OracleMemoryStore

Datenbankgestützte Persistenz für Nachrichten, Speicher und Akteurprofile.

Oracle DB-Speicher erstellen

Methode add_agent

Agent-Profildatensatz hinzufügen.

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_user

Benutzerprofildatensatz hinzufügen

Hinweise

Benutzerprofildatensätze werden nicht kopiert. Die eingefügte öffentliche Datensatz-ID ist derselbe Wert, der als user_id übergeben wird.

Beispiele

store.add_user("u-docs-profile", "Prefers concise answers.")
'u-docs-profile'

Methode delete

Löschen Sie einen verwalteten Datensatz und die zugehörigen Blockzeilen nach ID.

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_thread

Thread und die zugehörigen gespeicherten Zeilen löschen

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 verwaltete Threadzeile zusammen mit den zugehörigen Nachrichten- und Speicherzeilen sowie den Datensatz-Chunk-Zeilen entfernt, die für den Abruf verwaltet werden. 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 die abhängigen Nachrichten- und Speicherzeilen, die von THREAD referenziert werden, zusammen mit den übereinstimmenden RECORD_CHUNKS-Zeilen in derselben Transaktion entfernt.

Beispiele

store.delete_thread("c1")
0

Method get

Gespeicherten Datensatz nach Kennung abrufen

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 list

Permanente Datensätze für einen Datensatztyp auflisten.

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.

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_thread_messages

Permanente Nachrichten für einen Thread zurückgeben.

Beispiele

store.list_thread_messages("c1")
[]

Methode search

Datensätze nach Ähnlichkeit suchen

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

Methode update

Aktualisieren Sie gespeicherten Datensatzinhalt, Chunk-Einbettungen und Metadatenwerte.

Beispiele

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'

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 nur fehlende verwaltete Objekte, einschließlich Metadaten.

NEU ERSTELLEN

Alle verwalteten Schemaobjekte löschen und neu erstellen. Das ist destruktiv.