Usa memoria dell'agente Oracle con Oracle Autonomous AI Database

Questa guida mostra come connettere oracleagentmemory a Oracle Autonomous Database (ADB).

In questa guida imparerai come:

Suggerimento: per l'impostazione dei package, vedere Introduzione alla memoria dell'agente. Per eseguire la memoria dell'agente Oracle su un database locale containerizzato, seguire Eseguire Oracle AI Database localmente.

Prerequisiti

Hai bisogno di un Oracle Autonomous AI Database disponibile che supporti Oracle AI Vector Search (Oracle AI Database 23ai o versioni successive), un amministratore ADB in grado di creare un utente del database e un ambiente Python con oracleagentmemory installato. Se non hai ancora un database, segui la Guida al provisioning di Autonomous AI Database di Oracle.

La memoria dell'agente Oracle utilizza la connessione o il pool fornito dall'applicazione; non configura la sicurezza del trasporto del database. ADB supporta due opzioni di connessione sicura:

Usa utenti di database separati in produzione

Utilizzare due utenti del database ADB in una distribuzione di produzione:

Non utilizzare le credenziali del proprietario dello schema per eseguire l'applicazione. Utilizzarli solo durante l'impostazione o l'aggiornamento dello schema gestito. In questa guida viene creato il proprietario dello schema. Dopo l'impostazione, configurare l'utente dell'applicazione con SchemaPolicy.REQUIRE_EXISTING. Nella guida alla risoluzione dei problemi sono elencate le autorizzazioni oggetto necessarie a un utente dell'applicazione.

Eseguire la creazione o l'aggiornamento di ogni schema come singola operazione di manutenzione prima di avviare le istanze dell'applicazione che scrivono nelle tabelle gestite. Utilizzare una connessione schema-proprietario per l'operazione; non consentire l'esecuzione contemporanea di SchemaPolicy.CREATE_IF_NECESSARY da parte di più client. Una volta completata la procedura, le istanze dell'applicazione devono utilizzare SchemaPolicy.REQUIRE_EXISTING.

Creare un utente di schema ADB

Utilizzare un utente di database ADB dedicato per essere proprietario dello schema di memoria dell'agente Oracle. In OCI Console, aprire Azioni database, connettersi come ADMIN e aprire il foglio di lavoro SQL. Creare un utente con una password sicura, concedere i privilegi utilizzati dall'impostazione dello schema gestito e impostare una quota di storage limitata per l'utente:

CREATE USER oam_owner IDENTIFIED BY "CHOOSE_A_STRONG_PASSWORD";
GRANT DWROLE TO oam_owner;
ALTER USER oam_owner QUOTA 1G ON DATA;

DWROLE include i normali privilegi di creazione degli oggetti utilizzati da Oracle Agent Memory, tra cui CREATE TABLE, CREATE SEQUENCE, CREATE PROCEDURE e CREATE JOB. CREATE JOB consente a Oracle Agent Memory di creare un job pianificato che elimina definitivamente i record alla scadenza.

La quota 1G è un limite iniziale per questa guida, non un suggerimento per il dimensionamento della produzione. Selezionare un limite in base alla quantità di memoria che si prevede di memorizzare e ai criteri di conservazione. Monitora l'uso dello storage e aumenta la quota quando necessario; le scritture non riescono quando l'utente raggiunge la quota. ADB gestisce le tablespace, pertanto questa guida non ne crea una.

Connetti con TLS senza wallet

In OCI Console aprire la pagina dei dettagli ADB. In Network, configurare un'ACL che consenta l'indirizzo IP in uscita dell'applicazione o utilizzare un endpoint privato. Modificare quindi Mutual TLS (mTLS) Authentication, deselezionare Require mutual TLS (mTLS) Authentication e attendere che il database torni a Available.

Aprire Connessione al database, selezionare TLS in Autenticazione TLS e selezionare uno dei servizi di connessione elencati. I servizi in genere hanno nomi quali myadb_low, myadb_medium e myadb_high e selezionano il modo in cui ADB condivide le risorse del database tra le connessioni. Iniziare con il livello di servizio consigliato dall'amministratore del database per il carico di lavoro dell'applicazione, quindi copiarne la stringa di connessione. Memorizzarlo e le credenziali del database nel sistema di gestione dei segreti:

export ORACLE_MEMORY_DB_USER='oam_owner'
export ORACLE_MEMORY_DB_PASSWORD='<database-user-password>'
export ORACLE_MEMORY_DB_DSN='<copied TLS connection string>'

Utilizzare il descrittore TLS esattamente come copiato. Un descrittore mTLS non funziona senza un wallet.

Nell'esempio viene creato un connection pool, che è un gruppo riutilizzabile di connessioni al database. Se il file ORACLE_MEMORY_ADB_USE_MTLS non è true, tali connessioni utilizzano TLS. Utilizza SchemaPolicy.CREATE_IF_NECESSARY per la prima impostazione; utilizzare SchemaPolicy.REQUIRE_EXISTING nell'avvio normale dell'applicazione dopo che lo schema è pronto.

import os

import oracledb

from oracleagentmemory.core import (
    MemoryExtractionConfig,
    OracleAgentMemory,
    SchemaPolicy,
)
from oracleagentmemory.core.embedders import Embedder


def create_adb_tls_pool() -> oracledb.ConnectionPool:
    """Create an ADB TLS pool from securely injected environment variables."""
    return oracledb.create_pool(
        user=os.environ.get("ORACLE_MEMORY_DB_USER", "YOUR DB USER"),
        password=os.environ["ORACLE_MEMORY_DB_PASSWORD"],
        #Set ORACLE_MEMORY_DB_DSN to the TLS descriptor copied from the ADB console.
        dsn=os.environ["ORACLE_MEMORY_DB_DSN"],
        min=1,
        max=5,
        increment=1,
    )


embedder = Embedder(model="YOUR_EMBEDDING_MODEL")
MEMORY_STORE_ID = "APP_MEMORY"

L'estrazione automatica della memoria è disabilitata solo per mantenere attivo questo esempio di connessione. Configura un LLM e abilita l'estrazione quando l'applicazione richiede l'estrazione automatica della memoria permanente.

Riferimento API: OracleAgentMemory Criterio schema

Connettersi a un wallet mTLS

Utilizzare questa opzione se la configurazione di rete ADB richiede mTLS. In OCI Console, aprire Connessione al database, selezionare un wallet dell'istanza e scaricarlo. Estrarre il wallet in una directory protetta non sottoposta a check-in nel controllo dell'origine. La documentazione Oracle consiglia autorizzazioni di file restrittive per i file wallet (ad esempio, utilizzare chmod 600 su Linux o Unix).

Esportare le credenziali del database, la directory del wallet e la password di download del wallet. ORACLE_MEMORY_WALLET_PASSWORD è la password fornita quando è stato scaricato il file ZIP del wallet; non è la password dell'utente del database. Impostare ORACLE_MEMORY_DB_DSN sull'alias di servizio nel file tnsnames.ora del wallet, ad esempio myadb_low. Non utilizzare la stringa di connessione TLS lunga della console ADB per questa configurazione del wallet:

export ORACLE_MEMORY_DB_USER='oam_owner'
export ORACLE_MEMORY_DB_PASSWORD='<database-user-password>'
export ORACLE_MEMORY_DB_DSN='myadb_low'
export ORACLE_MEMORY_WALLET_DIR='/secure/path/to/wallet'
export ORACLE_MEMORY_WALLET_PASSWORD='<wallet-download-password>'
export ORACLE_MEMORY_ADB_USE_MTLS='true'

In modalità Thin python-oracledb, la directory del wallet richiede tnsnames.ora e ewallet.pem. L'impostazione di ORACLE_MEMORY_ADB_USE_MTLS su true fa sì che l'esempio crei il pool mTLS prima che inizializzi OracleAgentMemory.

def create_adb_mtls_pool() -> oracledb.ConnectionPool:
    """Create an ADB mTLS pool from securely injected environment variables."""
    return oracledb.create_pool(
        user=os.environ["ORACLE_MEMORY_DB_USER"],
        password=os.environ["ORACLE_MEMORY_DB_PASSWORD"],
        dsn=os.environ["ORACLE_MEMORY_DB_DSN"],
        config_dir=os.environ["ORACLE_MEMORY_WALLET_DIR"],
        wallet_location=os.environ["ORACLE_MEMORY_WALLET_DIR"],
        wallet_password=os.environ["ORACLE_MEMORY_WALLET_PASSWORD"],
        min=1,
        max=5,
        increment=1,
    )



if os.environ.get("ORACLE_MEMORY_ADB_USE_MTLS", "false").lower() == "true":
    db_pool = create_adb_mtls_pool()
else:
    db_pool = create_adb_tls_pool()

memory = OracleAgentMemory(
    connection=db_pool,
    embedder=embedder,
    memory_extraction_config=MemoryExtractionConfig(extract_memories=False),
    schema_policy=SchemaPolicy.CREATE_IF_NECESSARY,
    memory_store_id=MEMORY_STORE_ID,
)

Memoria in memoria e ricerca in ADB

Una volta configurato il client di memoria dell'agente Oracle con uno dei due pool, creare un thread, aggiungere una memoria permanente e cercarlo di nuovo.

thread = memory.create_thread(user_id="user_123")
thread.add_memory("The user prefers concise answers.")

results = memory.search(
    query="concise answers",
    user_id="user_123",
    record_types=["memory"],
    max_results=5,
)

for result in results:
    print(result.content)
Riferimento API: OracleAgentMemory OracleThread Risultati ricerca Oracle

Conclusione

In questa guida viene illustrato come preparare un utente ADB, selezionare TLS o mTLS senza wallet, connettere la memoria dell'agente Oracle a un pool python-oracledb e verificare che una memoria possa essere memorizzata e recuperata da ADB.

→ Dopo aver connesso la memoria dell'agente Oracle ad ADB, ora è possibile passare a Memorizza e cerca memoria.

Codice completo

L'esempio completo è incluso in questa guida per la copia e l'esecuzione.

#Copyright © 2026 Oracle and/or its affiliates.
#This software is under the Apache License 2.0
#(LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) or Universal Permissive License
#(UPL) 1.0 (LICENSE-UPL or https://oss.oracle.com/licenses/upl), at your option.

#Oracle Agent Memory Code Example - Oracle Autonomous AI Database
#-------------------------------------------------------------

##Configure an Autonomous AI Database TLS connection pool

import os

import oracledb

from oracleagentmemory.core import (
    MemoryExtractionConfig,
    OracleAgentMemory,
    SchemaPolicy,
)
from oracleagentmemory.core.embedders import Embedder


def create_adb_tls_pool() -> oracledb.ConnectionPool:
    """Create an ADB TLS pool from securely injected environment variables."""
    return oracledb.create_pool(
        user=os.environ.get("ORACLE_MEMORY_DB_USER", "YOUR DB USER"),
        password=os.environ["ORACLE_MEMORY_DB_PASSWORD"],
        #Set ORACLE_MEMORY_DB_DSN to the TLS descriptor copied from the ADB console.
        dsn=os.environ["ORACLE_MEMORY_DB_DSN"],
        min=1,
        max=5,
        increment=1,
    )


embedder = Embedder(model="YOUR_EMBEDDING_MODEL")
MEMORY_STORE_ID = "APP_MEMORY"



##Configure an Autonomous AI Database mTLS connection pool

def create_adb_mtls_pool() -> oracledb.ConnectionPool:
    """Create an ADB mTLS pool from securely injected environment variables."""
    return oracledb.create_pool(
        user=os.environ["ORACLE_MEMORY_DB_USER"],
        password=os.environ["ORACLE_MEMORY_DB_PASSWORD"],
        dsn=os.environ["ORACLE_MEMORY_DB_DSN"],
        config_dir=os.environ["ORACLE_MEMORY_WALLET_DIR"],
        wallet_location=os.environ["ORACLE_MEMORY_WALLET_DIR"],
        wallet_password=os.environ["ORACLE_MEMORY_WALLET_PASSWORD"],
        min=1,
        max=5,
        increment=1,
    )



if os.environ.get("ORACLE_MEMORY_ADB_USE_MTLS", "false").lower() == "true":
    db_pool = create_adb_mtls_pool()
else:
    db_pool = create_adb_tls_pool()

memory = OracleAgentMemory(
    connection=db_pool,
    embedder=embedder,
    memory_extraction_config=MemoryExtractionConfig(extract_memories=False),
    schema_policy=SchemaPolicy.CREATE_IF_NECESSARY,
    memory_store_id=MEMORY_STORE_ID,
)



##Store and search memory in Autonomous AI Database

thread = memory.create_thread(user_id="user_123")
thread.add_memory("The user prefers concise answers.")

results = memory.search(
    query="concise answers",
    user_id="user_123",
    record_types=["memory"],
    max_results=5,
)

for result in results:
    print(result.content)