Uso de la memoria del agente de Oracle con Oracle Autonomous AI Database

En esta guía se muestra cómo conectar oracleagentmemory a Oracle Autonomous Database (ADB).

En esta guía, aprenderá a:

Indicación: Para la configuración del paquete, consulte Get Started with Agent Memory. Para ejecutar la memoria del agente de Oracle en una base de datos local en contenedores, siga Ejecución local de Oracle AI Database.

Requisitos previos

Necesita una instancia de Oracle Autonomous AI Database disponible que admita Oracle AI Vector Search (Oracle AI Database 23ai o posterior), un administrador de ADB que pueda crear un usuario de base de datos y un entorno Python con oracleagentmemory instalado. Si aún no tiene una base de datos, siga la guía de aprovisionamiento de Autonomous AI Database de Oracle.

La memoria del agente de Oracle utiliza la conexión o el pool proporcionados por la aplicación; no configura la seguridad del transporte de la base de datos en sí. ADB soporta dos opciones de conexión segura:

Utilizar usuarios de base de datos independientes en producción

Utilizar dos usuarios de base de datos de ADB en un despliegue de producción:

No utilice las credenciales del propietario del esquema para ejecutar la aplicación. Utilícelos solo al configurar o actualizar el esquema gestionado. Esta guía crea primero el propietario del esquema. Después de la configuración, configure el usuario de la aplicación con SchemaPolicy.REQUIRE_EXISTING. La guía de resolución de problemas muestra los permisos de objeto necesarios para un usuario de aplicación.

Ejecute cada creación o actualización de esquema como una única operación de mantenimiento antes de iniciar las instancias de aplicación que escriben en las tablas gestionadas. Utilice una conexión de propietario de esquema para la operación; no permita que varios clientes ejecuten SchemaPolicy.CREATE_IF_NECESSARY simultáneamente. Una vez que se realiza correctamente, las instancias de aplicación deben utilizar SchemaPolicy.REQUIRE_EXISTING.

Crear un usuario de esquema de ADB

Utilice un usuario de base de datos de ADB dedicado para ser propietario del esquema de memoria del agente de Oracle. En la consola de OCI, abra Database Actions, conéctese como ADMIN y abra la hoja de trabajo SQL. Cree un usuario con una contraseña segura, otorgue los privilegios que utiliza la configuración del esquema gestionado y defina una cuota de almacenamiento enlazada para el usuario:

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

DWROLE incluye los privilegios normales de creación de objetos que utiliza la memoria del agente de Oracle, incluidos CREATE TABLE, CREATE SEQUENCE, CREATE PROCEDURE y CREATE JOB. CREATE JOB permite que la memoria del agente de Oracle cree un trabajo programado que suprima de forma permanente los registros una vez que caduquen.

La cuota 1G es un límite inicial para esta guía, no una recomendación de tamaño de producción. Seleccione un límite en función de la cantidad de memoria que espera almacenar y la política de retención. Supervise el uso del almacenamiento y aumente la cuota cuando sea necesario; las escrituras fallan cuando el usuario alcanza su cuota. ADB gestiona los tablespaces, por lo que esta guía no crea ninguno.

Conexión con TLS sin cartera

En la consola de OCI, abra la página de detalles de ADB. En Red, configure una ACL que permita la dirección IP de salida de la aplicación o utilice un punto final privado. A continuación, edite Autenticación TLS mutua (mTLS), borre Requerir autenticación TLS mutua (mTLS) y espere a que la base de datos vuelva a Available.

Abra Conexión de base de datos, seleccione TLS en Autenticación TLS y seleccione uno de los servicios de conexión mostrados. Los servicios suelen tener nombres como myadb_low, myadb_medium y myadb_high; seleccionan cómo ADB comparte los recursos de base de datos entre las conexiones. Comience con el nivel de servicio que el administrador de la base de datos recomienda para la carga de trabajo de la aplicación y, a continuación, copie la cadena de conexión. Almacénelo y las credenciales de la base de datos en el sistema de gestión de secretos:

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

Utilice el descriptor TLS exactamente como se ha copiado. Un descriptor mTLS no funciona sin una cartera.

En el ejemplo se crea un pool de conexiones, que es un grupo reutilizable de conexiones de base de datos. Cuando ORACLE_MEMORY_ADB_USE_MTLS no es true, esas conexiones utilizan TLS. Utiliza SchemaPolicy.CREATE_IF_NECESSARY para la primera configuración; utilice SchemaPolicy.REQUIRE_EXISTING en el inicio normal de la aplicación después de que el esquema esté listo.

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"

La extracción automática de memoria está desactivada solo para mantener este ejemplo de conexión enfocado. Configure un LLM y active la extracción cuando la aplicación necesite una extracción automática de memoria duradera.

Referencia de API: OracleAgentMemory Política de Esquema

Conectar con una cartera mTLS

Utilice esta opción si la configuración de red de ADB requiere mTLS. En la consola de OCI, abra Conexión de base de datos, seleccione una cartera de instancia y descárguela. Extraiga la cartera en un directorio protegido que no esté protegido en el control de origen. La documentación de Oracle recomienda permisos de archivo restrictivos en los archivos de cartera (por ejemplo, utilice chmod 600 en Linux o Unix).

Exporte las credenciales de la base de datos, el directorio de cartera y la contraseña de descarga de cartera. ORACLE_MEMORY_WALLET_PASSWORD es la contraseña que ha proporcionado al descargar el archivo ZIP de cartera; no es la contraseña del usuario de la base de datos. Defina ORACLE_MEMORY_DB_DSN en el alias de servicio en el archivo tnsnames.ora de la cartera, como myadb_low. No utilice la cadena de conexión TLS larga de la consola de ADB para esta configuración de cartera:

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'

En el modo ligero python-oracledb, el directorio de cartera necesita tnsnames.ora y ewallet.pem. Si se define ORACLE_MEMORY_ADB_USE_MTLS en true, en el ejemplo se crea el pool mTLS antes de inicializar 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,
)

Almacenar y buscar memoria en ADB

Una vez que el cliente de memoria del agente de Oracle se haya configurado con cualquiera de los pools, cree un thread, agregue una memoria duradera y realice una búsqueda posterior.

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)
Referencia de API: OracleAgentMemory OracleThread Resultado de búsqueda de Oracle

Conclusión

En esta guía hemos aprendido a preparar un usuario de ADB, seleccionar TLS o mTLS sin cartera, conectar la memoria del agente de Oracle con un pool python-oracledb y verificar que se puede almacenar y recuperar una memoria desde ADB.

→ Después de haber conectado la memoria de Oracle Agent a ADB, ahora puede continuar con Almacenar y buscar memoria.

Código Completo

El ejemplo completo se incluye en esta guía para que pueda copiar y ejecutar.

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