Oracle Autonomous AI DatabaseでのOracle Agent Memoryの使用

このガイドでは、oracleagentmemoryをOracle Autonomous Database (ADB)に接続する方法を示します。

このガイドでは、次のことを学習します。

ヒント:パッケージの設定については、エージェント・メモリーのスタート・ガイドを参照してください。かわりにコンテナ化されたローカル・データベースに対してOracle Agent Memoryを実行するには、「Oracle AI Databaseをローカルで実行」に従います。

前提条件

Oracle AI Vector Searchをサポートする使用可能なOracle Autonomous AI Database (Oracle AI Database 23ai以降)、データベース・ユーザーを作成できるADB管理者、およびoracleagentmemoryがインストールされているPython環境が必要です。データベースがまだない場合は、OracleのAutonomous AI Databaseプロビジョニング・ガイドに従ってください。

Oracle Agent Memoryは、アプリケーションによって提供される接続またはプールを使用します。データベース・トランスポート・セキュリティ自体は構成されません。ADBでは、2つのセキュアな接続の選択肢がサポートされています。

本番環境での個別のデータベース・ユーザーの使用

本番デプロイメントでは、2人のADBデータベース・ユーザーを使用します。

スキーマ所有者の資格証明を使用してアプリケーションを実行しないでください。これらは、管理対象スキーマを設定またはアップグレードする場合にのみ使用します。このガイドでは、最初にスキーマ所有者を作成します。設定後、SchemaPolicy.REQUIRE_EXISTINGを使用してアプリケーション・ユーザーを構成します。トラブルシューティング・ガイドに、アプリケーション・ユーザーが必要とするオブジェクト権限を示します。

管理対象表に書き込むアプリケーション・インスタンスを起動する前に、各スキーマの作成またはアップグレードを単一のメンテナンス操作として実行します。操作には1つのスキーマ所有者接続を使用します。複数のクライアントでSchemaPolicy.CREATE_IF_NECESSARYを同時に実行することはできません。成功した後、アプリケーション・インスタンスはSchemaPolicy.REQUIRE_EXISTINGを使用する必要があります。

ADBスキーマ・ユーザーの作成

Oracle Agent Memoryスキーマを所有するには、専用のADBデータベース・ユーザーを使用します。OCIコンソールで、「データベース・アクション」を開き、ADMINとしてサインインして、SQLワークシートを開きます。強力なパスワードを持つユーザーを作成し、管理対象スキーマ設定で使用される権限を付与し、そのユーザーにバインドされた記憶域割当て制限を設定します。

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

DWROLEには、Oracle Agent Memoryが使用する通常のオブジェクト作成権限(CREATE TABLE、CREATE SEQUENCE、CREATE PROCEDURE、CREATE JOBなど)が含まれます。CREATE JOBを使用すると、Oracle Agent Memoryは、期限切れ後にレコードを永続的に削除するスケジュール済ジョブを作成できます。

1G割当て制限は、本番サイズ設定の推奨事項ではなく、このガイドの開始制限です。格納するメモリー量および保存ポリシーに基づいて制限を選択します。ストレージの使用状況を監視し、必要に応じて割り当て制限を増やします。ユーザーが割り当て制限に達すると、書き込みが失敗します。ADBは表領域を管理するため、このガイドでは表領域を作成しません。

ウォレットなしでTLSで接続

OCIコンソールで、ADBの詳細ページを開きます。「ネットワーク」で、アプリケーションのエグレスIPアドレスを許可するACLを構成するか、プライベート・エンドポイントを使用します。次に、「相互TLS (mTLS)認証」を編集し、「相互TLS (mTLS)認証が必要」をクリアして、データベースがAvailableに戻るまで待機します。

「データベース接続」を開き、「TLS認証」で「TLS」を選択し、リストされている接続サービスのいずれかを選択します。通常、サービスにはmyadb_low、myadb_medium、myadb_highなどの名前があり、ADBが接続間でデータベース・リソースを共有する方法を選択します。データベース管理者がアプリケーションのワークロードに推奨するサービス・レベルから開始し、接続文字列をコピーします。これとデータベース資格証明をシークレット管理システムに格納します:

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

コピーしたとおりにTLS記述子を使用します。mTLS記述子はウォレットなしでは動作しません。

この例では、データベース接続の再利用可能なグループである接続プールを作成します。ORACLE_MEMORY_ADB_USE_MTLSがtrueでない場合、これらの接続はTLSを使用します。初回の設定にはSchemaPolicy.CREATE_IF_NECESSARYを使用し、スキーマの準備完了後の通常アプリケーションの起動にはSchemaPolicy.REQUIRE_EXISTINGを使用します。

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"

自動メモリー抽出は、この接続例にフォーカスしたままにするためにのみ無効になっています。LLMを構成し、アプリケーションで永続メモリーの自動抽出が必要な場合に抽出を有効にします。

APIリファレンス: OracleAgentMemory スキーマ・ポリシー

mTLSウォレットとの接続

このオプションは、ADBネットワーク構成にmTLSが必要な場合に使用します。OCIコンソールで、データベース接続を開き、インスタンス・ウォレットを選択してダウンロードします。ソース・コントロールにチェックインされていない保護されたディレクトリにウォレットを抽出します。Oracleドキュメントでは、ウォレット・ファイルに対する制限的なファイル権限を推奨しています(たとえば、LinuxまたはUnixではchmod 600を使用)。

データベース資格証明、ウォレット・ディレクトリおよびウォレット・ダウンロード・パスワードをエクスポートします。ORACLE_MEMORY_WALLET_PASSWORDは、ウォレットZIPファイルをダウンロードしたときに指定したパスワードで、データベース・ユーザーのパスワードではありません。ORACLE_MEMORY_DB_DSNをウォレットのtnsnames.oraファイルのサービス別名(myadb_lowなど)に設定します。このウォレット構成には、ADBコンソールからの長いTLS接続文字列を使用しないでください。

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'

python-oracledbシン・モードでは、ウォレット・ディレクトリにはtnsnames.oraおよびewallet.pemが必要です。ORACLE_MEMORY_ADB_USE_MTLSをtrueに設定すると、OracleAgentMemoryを初期化する前にmTLSプールが作成されます。

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

ADBでのメモリーの格納および検索

Oracle Agent Memoryクライアントがいずれかのプールで構成されたら、スレッドを作成し、永続メモリーを追加して再度検索します。

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)
APIリファレンス: OracleAgentMemory OracleThread OracleSearch結果

まとめ

このガイドでは、ADBユーザーの準備方法、ウォレットレスTLSまたはmTLSの選択方法、Oracle Agent Memoryとpython-oracledbプールの接続方法、およびメモリーをADBに格納および取得できることを確認する方法を学習しました。

→ Oracle Agent MemoryをADBに接続した後、メモリーの格納および検索に進むことができます。

完全コード

このガイドには、コピーして実行するための完全な例が含まれています。

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