ストアおよびスキーマ
このページには、Oracle Agent Memory SDKで使用されるコア・ストアの抽象化およびスキーマ・コントロールが表示されます。
ストアAPI
ストア書込みセマンティクス
ストア書込みでは、アプリケーションが格納するテキストと、ストアが取得に使用するペイロードが明確に分離されます。ほとんどのアプリケーションでは、メモリー・レベルおよびスレッド・レベルのAPIを使用し、ベクトル、キーワードまたはハイブリッド取得に必要な検索行をストアで準備できます。下位レベルのストアAPIでは、index_texts、index_text、embeddingsおよびembeddingが公開され、取得にどのテキストまたはベクトルを使用する必要があるかをすでに認識している高度な統合に使用されます。
各書込みは、次の2つの関連部分と考えてください。
add()のcontentsおよびupdate()のtextは、get()、list()および検索結果によって返される格納済レコード・テキストを制御します。add()のindex_textsおよびupdate()のindex_textは、ストアの取得行に書き込まれるテキストを制御します。検索ではこれらの行が使用され、元の論理レコードが返されます。
検索オーバーライドまたは明示的な埋込みが指定されていない場合、ストアは解決された格納済テキストを取得テキストとして使用します。チャンク化が構成されている場合、空でないテキストはストアによってチャンク化されます。空のテキストはレコード・テキストを格納しますが、検索テキストは提供しません。
次の表は、明示的なベクトル・ペイロードが考慮される前に取得テキストを選択する方法を示しています。
ストア・レベルの取得ペイロード
| 入力 | add() | update() |
|---|---|---|
index_textsまたはindex_textを省略 |
各レコードは、その解決されたcontents値を取得に使用します。 |
置換text値が取得に使用されます。textも省略した場合、埋込みのみの更新では、レコードの既存の取得テキスト行が再利用されます。 |
文字列index_textsエントリまたは文字列index_text |
この文字列は、そのレコードの検索テキストを置換します。ストアは、取得行を書き込む前にチャンク化することがあります。 | この文字列は、そのレコードの検索テキストを置換します。ストアは、取得行を書き込む前にチャンク化することがあります。 |
list[str] index_textsエントリまたはlist[str] index_text |
リストは、呼び出し元が所有するチャンクとして扱われます。空でない各文字列は1つの取得行として書き込まれ、ストアは再度チャンク化しません。 | リストは、呼び出し元が所有するチャンクとして扱われます。空でない各文字列は1つの取得行として書き込まれ、ストアは再度チャンク化しません。 |
None index_textsエントリまたはindex_text=None |
外部index_textsリストのNoneは、「このレコード用に格納されたコンテンツを使用」を意味します。 |
index_text=Noneは、textも指定されていないかぎり、格納されたテキストを変更せずに取得行をクリアします。 |
| 空の文字列または空のチャンク・リスト | レコード・テキストを格納し、そのレコードの取得テキストは提供しません。 | textが指定されるとレコード・テキストが更新され、そのレコードの取得テキストがクリアされます。 |
明示的な埋込みはオプションです。これらを省略すると、ストアは、ローカル・ベクトル・ストレージの構成時に取得テキストからローカル・ベクトルを導出します。キーワード・ストアまたはハイブリッド・ストアでは、テキストのみの取得行を使用することもできます。明示的なembeddingsまたはembedding値が指定されている場合、ストアはそれらのベクトルを直接書き込み、それらのベクトルの埋込みをコールしません。
add()では、embeddings=Noneはembeddingsを省略する場合と同様に動作します。update()では、embedding=Noneは明示的です。ストアは、取得テキストをtextおよびindex_textに従って保持またはリライトしますが、これらの行はローカル・ベクトルなしで格納します。textとindex_textの両方を省略すると、既存の取得行からベクトルがクリアされます。
ベクトル・シェイプは、コール元がどのくらいのチャンク所有権を取得しているかを示します。
- 1つのベクトルは、取得テキスト全体に対して1つのベクトルを意味します。ストアは、明示的なベクトルのテキストを分割しません。その検索テキストが空の場合、ベクトルはコンパニオン・チャンク・テキストなしで格納できます。
- 複数のベクトルは、呼び出し元が所有するチャンクごとに1つのベクトルを意味します。一致する
index_textsまたはindex_textチャンク・リストを指定するか、レコードの既存の取得テキスト行を再利用する埋込み専用のupdate()を使用します。 - ベクトル数はチャンク数と一致する必要があり、1つの
add()コールのすべての明示的なベクトルは同じディメンションである必要があります。 - 空のレコードごとのベクトル・ペイロードは、それと一致する取得テキスト行がない場合にのみ許可されます。
一部の組合せは拒否されるため、格納されたテキスト、検索テキストおよびベクトルは離れて移動しません。text=Noneを渡すと、格納されたテキスト行と取得行がクリアされるため、null以外のindex_textまたはembedding値と組み合せることはできません。アクター・プロファイル・レコードはtext=Noneをサポートしていません。update()にindex_text=Noneを渡すことは、取得行のクリアを意味するため、空でない明示的な埋込みは同じコールでは許可されません。複数の明示的なベクトルでは、更新が埋込み専用であり、既存の取得行ですでにチャンク・テキストが提供されていないかぎり、明示的なチャンク・テキストが必要です。
クラス oracleagentmemory.core.OracleMemoryStore
ベース: IMemoryStore
OracleAgentMemoryで使用される共通ストア・インタフェース。
ストア実装は、テキスト・レコードの永続化と類似性検索の実行を担当します。同期エントリ・ポイントと非同期エントリ・ポイントの両方が定義されているため、上位レベルのAPIは、ストア固有のロジックを複製せずに、一致する同期/非同期サーフェスを公開できます。
メソッド add
レコードをストアに追加します。
- パラメータ:
- contents
list[str | None]– 永続化するペイロードを記録します。テキスト値は、index_textsまたはembeddingsが指定されていないかぎり、セマンティク索引付けにも使用されます。テキスト値がNoneの場合、実装はmetadata["content"]にフォールバックする可能性があります。明示的な空の文字列は保持されます。 - record_type
str– 作成する論理レコード・タイプ(たとえば、"message"、"memory"、"guideline"、"fact"、"preference"、"user_profile"または"agent_profile")。 - index_texts
list[str | list[str] | None]– セマンティック索引付けにのみ使用されるオプションの代替ペイロード。指定した場合、外部リストはテキスト入力と一致する必要があります。各エントリは、ストアが内部的にチャンク化できる文字列、またはストアがコール元所有のチャンクとして処理し、再度分割できない空でない文字列のリストです。 - 埋込み
list[list[float] | ndarray | list[list[float] | ndarray]]– テキスト入力に合せたオプションの事前計算埋込みベクトル。各レコード・エントリは、1つの埋込みベクトルまたはそのレコードのチャンク埋込みベクトルのリストのいずれかです。指定した場合、ストアは埋込み機能を呼び出すのではなく、これらのベクトルを直接使用する必要があります。1つのレコードの複数のベクトルでは、テキストおよびベクトル・チャンクの境界が明示されるように、一致するindex_textsチャンク・リストが必要です。指定しない場合、ストアは通常、構成された埋込みからセマンティク状態を導出しますが、実装固有のテキスト対応索引付けモードでは、テキストのみの書込みを1つなしで許可することもできます。 - record_ids
str | None | list[str | None]– オプションの呼び出し元表示識別子。1つの文字列を1レコード挿入に使用できますが、リストはテキスト入力と一致している必要があります。このフィールドを省略すると、生成された識別子が返されます。 - thread_ids
str | None | list[str | None]– 挿入されたレコードに関連付けられたオプションのスレッド識別子。スカラー値は、整列されたテキスト入力間でブロードキャストできます。 - user_ids
str | None | list[str | None]– 挿入されたレコードに関連付けられたオプションのユーザー識別子。スカラー値は、整列されたテキスト入力間でブロードキャストできます。 - agent_ids
str | None | list[str | None]– 挿入されたレコードに関連付けられたオプションのエージェント識別子。スカラー値は、整列されたテキスト入力間でブロードキャストできます。 - roles
str | None | list[str | None]– オプションのメッセージ・ロール("user"や"assistant"など)。スカラー値は、整列されたテキスト入力間でブロードキャストできます。record_typeが"message"の場合にのみ使用されます。 - timestamps
str | None | list[str | None]– レコードとともに保存するオプションのタイムスタンプ。各タイムスタンプは、レコードが作成された時刻を表します。スカラー値は、整列されたテキスト入力間でブロードキャストできます。省略されたエントリまたはNoneエントリは、現在の時間を使用します。 - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– オプションのコール元提供のメタデータ・ディクショナリ。明示的に""に設定するのではなく、テキスト値を省略した場合、メタデータにはフォールバック・ソースとして"content"を含めることができます。 - ttl_days
int | None | list[int | None]– 有効期限をサポートするレコードのオプションの存続期間(日数)。store defaultを使用するには、この引数を省略します。期限切れにならないレコードに対してNoneを渡します。スカラー値は、整列されたテキスト入力間でブロードキャストできます。 - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor]– オプションの稼働時間アンカー。TimeToLiveAnchor.CREATED_ATを使用して、格納された作成時間を基準にして期限切れにするか、TimeToLiveAnchor.TIMESTAMPを使用して各レコードのイベント・タイムスタンプを基準にして期限切れにします。省略すると、実装はTimeToLiveAnchor.CREATED_ATを使用します。 - **store_kwargs (Any)– 具象ストアに転送される実装固有の書き込みオプション。
- contents
- 戻り型: list[str]
ノート:
add_batches()は、コール元にすでに1つ以上のPendingRecordBatchオブジェクトがある場合に使用します。
- 戻り値:入力と同じ論理的な順序で挿入されたレコードの識別子。
- 戻り型: List[str]
- パラメータ:
- コンテンツ
list[str | None] - record_type
str - index_texts
list[str | list[str] | None] - 埋込み
list[list[float] | ndarray | list[list[float] | ndarray]] - record_ids
str | None | list[str | None] - thread_ids
str | None | list[str | None] - user_ids
str | None | list[str | None] - agent_ids
str | None | list[str | None] - ロール
str | None | list[str | None] - タイムスタンプ
str | None | list[str | None] - メタデータ
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - store_kwargs
Any
- コンテンツ
method add_agent (抽象)
エージェント・プロファイル・レコードを追加します。
- パラメータ:
- agent_id
str– エージェントプロファイルの安定した識別子。 - information
str– エージェントを説明する自由形式のテキスト。 - metadata
dict[str, Any] | None– エージェント・プロファイル行に格納されているオプションのメタデータ・マッピング。
- agent_id
- 戻り値:作成されたエージェント・プロファイル・レコードの識別子。
- 戻り型: str
method add_async (非同期)
行指向レコードをストアに非同期的に追加します。
同じ引数を受け入れ、add()と同じ識別子を返します。
- パラメータ:
- コンテンツ
list[str | None] - record_type
str - index_texts
list[str | list[str] | None] - 埋込み
list[list[float] | ndarray | list[list[float] | ndarray]] - record_ids
str | None | list[str | None] - thread_ids
str | None | list[str | None] - user_ids
str | None | list[str | None] - agent_ids
str | None | list[str | None] - ロール
str | None | list[str | None] - タイムスタンプ
str | None | list[str | None] - メタデータ
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - store_kwargs
Any
- コンテンツ
- 戻り型: list[str]
メソッド add_batches
コール元準備の論理バッチをストアに追加します。
- パラメータ:
- batches
list[PendingRecordBatch]– 永続化する完全に準備された論理バッチ。各バッチには、record_type、スコープ値、ロール、タイムスタンプ、メタデータなどのレコードごとに独自のフィールドが必要です。 - **store_kwargs (Any)– 具象ストアに転送される実装固有の書き込みオプション。
- batches
- 戻り値:入力バッチおよび行と同じ論理的な順序で挿入されたレコードの識別子。
- 戻り型: List[str]
例
store.add_batches(
[
PendingRecordBatch(
texts=["pizza batch"],
record_type="memory",
record_ids="mem-batch-docs",
)
]
)
['mem-batch-docs']
method add_batches_async (非同期)
コール元準備の論理バッチをストアに非同期で追加します。
同じ引数を受け入れ、add_batches()と同じ識別子を返します。
- パラメータ:
- バッチ
list[PendingRecordBatch] - store_kwargs
Any
- バッチ
- 戻り型: list[str]
method add_user (抽象)
ユーザープロファイルレコードを追加します。
- パラメータ:
- user_id
str– ユーザープロファイルの安定した識別子。 - information
str– ユーザーを説明する自由形式のテキスト。 - metadata
dict[str, Any] | None– ユーザープロファイル行に格納されているオプションのメタデータマッピング。
- user_id
- 戻り値:作成されたユーザー・プロファイル・レコードの識別子。
- 戻り型: str
method delete (抽象)
1つの格納済レコードを識別子で削除します。
- パラメータ:
- record_type
str– 削除するレコードの論理型。 - record_id
str– 削除するレコードの識別子。 - カスケード
bool–Trueの場合、同じ削除操作内でリクエストされたトップレベル・ターゲットに対して、ストアでサポートされているカスケード削除動作を適用します。これは主に、追加のスコープ付きレコードを所有するアクター・プロファイルなどのターゲットに使用されます。たとえば、ユーザー・プロファイル・カスケードまたはエージェント・プロファイル・カスケードでは、所有されているスレッド自体、スレッド・スコープのメッセージおよびそれらのスレッドで削除されたメモリーのようなレコード、およびメッセージ、メモリー、ガイドライン、ファクト、プリファレンスなどのアクター・スコープの残りの直接レコードを削除できます。アクタープロファイル削除の場合、一致するプロファイル行がすでに存在していなくても、このスコープ指定クリーンアップが実行される場合があります。
- record_type
- 戻り値:削除されたリクエストされたトップレベル・レコードの数(通常は
0または1)。カスケードされた子行は個別にカウントされないため、欠落しているアクター・プロファイルによってスコープ指定クリーン・アップがトリガーされた場合でも、これは0になることがあります。 - 戻り型: int
method delete_thread (抽象)
スレッドとそれに関連付けられた格納データを削除します。
- パラメータ: thread_id
str– 削除するスレッドの識別子。 - 戻り値:削除されたスレッド・レコードの数(通常は
0または1)。 - 戻り型: int
ノート:
これは、ストアによって管理されるスレッドおよびスレッド・スコープのレコードを削除するためのストア・レベルの操作です。保存要件でソース・メッセージと導出されたスレッド・スコープのメモリー・データの両方を削除する場合に、スレッドの削除を優先します。メッセージ・レベルの削除は、個別に永続化された導出レコードが削除されることを意味しないためです。
method get (抽象)
格納されているレコードをタイプおよび識別子別に取得します。
- パラメータ:
- record_type
str– 取得するレコードの論理型。 - record_id
str– 取得するレコードの識別子。
- record_type
- 戻り値:格納されたレコードが見つかった場合、それ以外の場合は
None。 - 戻りタイプ: レコード |なし
method list (抽象)
1つのレコードタイプの格納済みレコードをリストします。
- パラメータ:
- record_type
str– 列挙する論理レコードタイプ。 - limit
int | None– 返される最新のレコードの最大数(オプション)。省略すると、実装はMAX_LIST_LIMITなどの安全な上限を適用できます。Noneを渡して、その上限を無効にし、一致するすべてのレコードを返します。 - thread_id
str | None– 正確なスレッドスコープフィルタ。省略した場合、フィルタリングは適用されません。Noneに設定すると、thread_idがNoneのレコードのみが返されます。スコープなしレコードの種類では、このフィルターは無視されます。 - user_id
str | None– 正確なユーザースコープフィルタ。省略した場合、フィルタリングは適用されません。Noneに設定すると、user_idがNoneのレコードのみが返されます。スコープなしレコードの種類では、このフィルターは無視されます。 - agent_id
str | None– 正確なエージェントスコープフィルタ。省略した場合、フィルタリングは適用されません。Noneに設定すると、agent_idがNoneのレコードのみが返されます。スコープなしレコードの種類では、このフィルターは無視されます。 -
metadata_filter
dict[str, Any] | None–メタデータ・フィルタ。省略した場合、フィルタリングは適用されません。
Noneに設定すると、メタデータがNoneのレコードのみが返されます。dictに設定すると、metadata_filterのエントリはANDセマンティクスと結合されます。値がフィールド・レベルの演算子ディクショナリではないエントリは、完全一致セマンティクスを使用します。つまり、リクエストされたキーは格納されたメタデータに存在する必要があります。ネストされたディクショナリは再帰的に照合されます。スカラー値とリスト値は完全一致で照合され、リストの順序と長さも一致する必要があります。配列メンバーシップをテストするには、{"tags": {"$array_contains": "prod"}}などのフィールド・レベルの演算子ディクショナリを使用します。"$array_contains"のリスト・オペランドは、リストされたすべての値が存在する必要があることを意味します。"$array_contains_any"は、リストされた値が少なくとも1つ存在する必要があることを意味します。"$not"を使用して、演算子ディクショナリやRAWの完全一致値など、同じフィールドの別のフィールド・レベル式を否定します。負の式は、欠落しているフィールドを含め、正の式が失敗すると一致します。負の配列メンバーシップも非配列フィールドと一致します。例として、スカラー・フィールドの場合はmetadata_filter={"source": "slack"}、ネストしたフィールドの場合はmetadata_filter={"review": {"status": "open"}}、完全リスト一致の場合はmetadata_filter={"tags": ["prod", "urgent"]}があります。条件を結合して、これらすべてを要求します。metadata_filter={ "source": "slack", "review": {"status": "open"}, "tags": ["prod", "urgent"], }
- record_type
- 戻り値:返されたウィンドウ内で最も古いものから新しいものの順に並べられたレコード。
- 戻りタイプ: List[Record]
method list_thread_messages (抽象)
1つのスレッドについて格納されているメッセージ履歴を一覧表示します。
- パラメータ:
- thread_id
str– メッセージが返されるスレッドの識別子。 - last_n
int | None– 含める最新のメッセージの数(オプション)。省略すると、スレッドの格納されているすべてのメッセージが返されます。
- thread_id
- 戻り値:返されるウィンドウ内で最も古いものから新しいものの順に並べられたメッセージ・レコード。
- 戻り型: List[MessageRecord]
method search (抽象)
類似性でレコードを検索します。
- パラメータ:
- query
str | None– 自然言語問合せ。query_vectorを省略する場合は、指定する必要があります。 - query_vector
list[float] | None– オプションの事前計算済問合せ埋込み。queryおよびquery_vectorのいずれかを指定する必要があります。 - k
int– 戻す結果の最大数。明示的な値は、1以上である必要があります。これは上限です。フィルタが制限しすぎている場合、有効期限が切れていない一致レコードが少ない場合、または実装固有の検索動作のために、コールで返される結果がkより少ない場合があります。 - thread_id
str | None– オプションのスレッドスコープ。 - user_id
str | None– オプションのユーザーおよびエージェントのスコープフィルタ。 - agent_id
str | None– オプションのユーザーおよびエージェントのスコープフィルタ。 - exact_user_match
bool– 指定された各スコープ識別子を正確に一致させる必要があるかどうか。 - exact_agent_match
bool– 指定された各スコープ識別子を正確に一致させる必要があるかどうか。 - exact_thread_match
bool– 指定された各スコープ識別子を正確に一致させる必要があるかどうか。 - record_types
set[str] | None– 含めるレコード・タイプのオプション・セット。 - metadata_filter
dict[str, Any] | None– オプションのメタデータフィルタマッピング。metadata_filterのエントリはANDセマンティクスと結合されます。値がフィールド・レベルの演算子ディクショナリではないエントリは、完全一致セマンティクスを使用します。つまり、リクエストされたキーは格納されたメタデータに存在する必要があります。ネストされたディクショナリは再帰的に照合されます。スカラー値とリスト値は完全一致で照合され、リストの順序と長さも一致する必要があります。配列メンバーシップをテストするには、{"tags": {"$array_contains": "prod"}}などのフィールド・レベルの演算子ディクショナリを使用します。"$array_contains"のリスト・オペランドは、リストされたすべての値が存在する必要があることを意味します。"$array_contains_any"は、リストされた値が少なくとも1つ存在する必要があることを意味します。"$not"を使用して、演算子ディクショナリやRAWの完全一致値など、同じフィールドの別のフィールド・レベル式を否定します。負の式は、欠落しているフィールドを含め、正の式が失敗すると一致します。負の配列メンバーシップも非配列フィールドと一致します。
- query
- 戻り値:距離の増加でソートされた
(record, distance)ペア。リストに含まれるエントリ数はk未満です。 - 戻り型: list[tuple[Record、 float]]
- Raises: ValueError–
kが1未満の場合。
例
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'
スカラー・メタデータ値をフィルタします。
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
ネストされたメタデータに対するフィルタ:
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
次の順序を含むリスト値を完全に一致させます。
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
メタデータ配列に値が含まれている場合にフィルタします。
any(
record.id == "mem-search-meta-tags-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"tags": {"$array_contains": "prod"}},
)
)
True
複数のメタデータ条件を結合します。レコードはすべてのキーを満たす必要があります。
store.add(
["pizza rollout"],
record_type="memory",
record_ids="mem-search-meta-combined-docs",
metadata={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
['mem-search-meta-combined-docs']
any(
record.id == "mem-search-meta-combined-docs"
for record, _ in store.search(
"pizza",
k=5,
metadata_filter={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
)
True
method search_async (非同期)
セマンティックの類似性によってレコードを非同期で検索します。
- パラメータ:
- query
str | None–searchで受け入れられる問合せテキストと同じです。 - k
int–searchで受け入れられる同じ最大結果数。明示的な値は、1以上である必要があります。 - query_vector
list[float] | None–searchで受け入れられる、オプションの事前計算済みクエリー埋め込みと同じです。 - thread_id
str | None–searchで受け入れられるオプションのスコープフィルタと同じです。 - user_id
str | None–searchで受け入れられるオプションスコープフィルタと同じです。 - agent_id
str | None–searchで受け入れられるオプションのスコープフィルタと同じです。 - exact_user_match
bool–searchで受け入れられる完全一致フラグと同じです。 - exact_agent_match
bool–searchで受け入れられる完全一致フラグと同じです。 - exact_thread_match
bool–searchで受け入れられる完全一致フラグと同じです。 - record_types
set[str] | None–searchで受け入れられるオプションのレコードタイプフィルタと同じです。 - metadata_filter
dict[str, Any] | None– スカラー、ネスト、完全リスト、配列メンバーシップ、および{"source": "slack"}、{"review": {"status": "open"}}、{"tags": ["prod", "urgent"]}、{"tags": {"$array_contains": "prod"}}などの結合条件を含む、searchで受け入れられる同じオプションのメタデータフィルタ。
- query
- 戻り値:基礎となる
searchコールによって戻される(record, distance)ペア。 - 戻り型: List[tuple[Record、 float]]
- Raises: ValueError–
kが1未満の場合。
method update (抽象)
格納されたレコード・コンテンツの更新、データ、メタデータ、タイムスタンプまたは有効期限の埋込み。
- パラメータ:
- record_type
str– 更新するレコードの論理型。 - record_id
str– 更新するレコードの識別子。 - text
str | None– オプションの置換コンテンツ。ストアがサポートする場合は、Noneを渡して、格納されたテキストを明示的にクリアします。ストアは、関連するセマンティク状態をクリアし、同じコールで競合するnull以外のindex_textまたはembedding更新を拒否することもできます。コンテンツを変更しないままにするには、引数を省略します。 - index_text
str | list[str] | None– 永続テキストを変更せずに、格納された検索状態を再計算または置換するために使用されるオプションの代替セマンティックペイロード。文字列はストアによって内部的にチャンク化される場合があります。空でない文字列のリストは、呼び出し元が所有するチャンクとして扱われ、再度分割することはできません。一部の実装では、これをハイブリッド検索テキストとして個別に永続化することもできます。 - 埋込み
list[float] | ndarray | list[list[float] | ndarray] | None– オプションの事前計算済埋込みベクトルまたはチャンク埋込みベクトルのリスト。指定した場合、これは直接使用され、埋込みコールは行われません。複数のベクトルでは、一致するindex_textチャンク・リストまたは既存の格納済チャンク・テキスト行が必要です。ストアがサポートする場合は、Noneを渡して、格納された埋込みを明示的にクリアします。テキスト対応索引付けのストアでは、埋込みや明示的な埋込みなしでのセマンティック更新も許可されます。 - metadata
dict[str, Any] | None– オプションの置換メタデータマッピング。ストアがサポートするときにメタデータをクリアするには、Noneを渡します。 - timestamp
str | None– レコードとともに保存するオプションの新しいタイムスタンプ。これは、レコードが作成された時間を表します。この引数を省略すると、格納されているタイムスタンプは変更されません。Noneを渡して、保存されたタイムスタンプをクリアし、ストアがサポートしているときにレコードがストアに追加された時刻を使用します。 - ttl_days
int | None– オプションの有効期限のリフレッシュ(日数)。現在の有効期限タイムスタンプを保持するには、ttl_anchorとともにこの引数を省略します。Noneを渡して有効期限をクリアします。 - ttl_anchor
TimeToLiveAnchor– 有効期限リフレッシュのオプションの存続時間アンカー。レコード作成時間にはTimeToLiveAnchor.CREATED_ATを、同じ更新で指定された置換timestampにはTimeToLiveAnchor.TIMESTAMPを、timestampを省略した場合は格納されたイベント・タイムスタンプを使用します。ttl_daysを指定せずにttl_anchorを指定すると、ストアまたはスキーマのデフォルトの存続期間が使用されます。リフレッシュ中にttl_anchorを省略すると、実装ではTimeToLiveAnchor.CREATED_ATが使用されます。
- record_type
- 戻り値:更新されたレコードの数(通常は
0または1)。要求された論理識別子と一致する格納済レコードがない場合、0を返します。 - 戻り型: int
- Raises: ValueError– すべてのオプション・フィールドを省略したり、競合するセマンティック引数を指定したりするなど、更新ペイロードがストアに対して無効な場合。
Oracle DBストア
クラス oracleagentmemory.core.OracleDBMemoryStore
ベース: OracleMemoryStore
メッセージ、メモリーおよびアクター・プロファイルのデータベース・バックアップの永続性。
Oracle DBストアを作成します。
- パラメータ:
- embedder
IEmbedder | None– ストアでローカル・ベクトル埋込みが必要な場合に使用される埋込み。呼出し側が常に事前計算されたベクトルを提供する場合、またはキーワード検索をテキストのみの書込みおよびテキスト問合せとともに使用する場合は、Noneになります。SearchStrategy.HYBRIDでは、管理対象ハイブリッド索引でこの埋込み者のデータベース内モデルを使用できるように、ここにOracleDBEmbedderが必要です。 - pool
Any– Oracle DB接続またはプール。RAW接続を渡すと、このストア・インスタンスに対してシングル・セッション・モードが有効になります。コンカレント・ストア・コールは、書込み操作で使用される行ロックおよびトランザクションの仮定を保持するためにローカルにシリアライズされます。コンカレント要求には接続プールを使用します。 - schema_policy
SchemaPolicy | str– スキーマ設定モード。デフォルトでは、既存の最新の管理対象スキーマが必要であり、DDLの変更は実行されません。欠落しているオブジェクトを埋めるにはSchemaPolicy.CREATE_IF_NECESSARYを使用し、管理対象オブジェクトを削除して再作成するにはSchemaPolicy.RECREATEを使用します。SchemaPolicy.CREATE_IF_NECESSARYは、サポートされている管理対象スキーマ・バージョン・アップグレードを適用したり、テキスト索引を追加してキーワード検索用にベクトル・スキーマをアップグレードしたり、管理対象検索構造およびハイブリッド索引を追加することでハイブリッド検索用にアップグレードできます。 - vector_dim
int | None– ローカル・ベクトル・ストレージの埋込みディメンション(オプション)。正の整数を渡して、管理対象埋込み列およびベクトル索引を作成し、そのディメンションに対して既存のスキーマ・メタデータを検証します。Noneを渡すか、このストアにローカル・ベクトル記憶域が必要ない場合は引数を省略します。キーワードおよびハイブリッド検索は、ローカル埋込み列なしで格納された検索テキストから操作できます。ベクトル検索にはローカル・ベクトル・ストレージが必要です。 -
table_name_prefix
str–管理対象表/索引名に追加されるオプションの接頭辞。これまたは
memory_store_idのいずれかを渡します。両方は渡しません。ノート:バージョン26.6.0以降非推奨: このパラメータは26.6.0で非推奨になり、27.1で削除されます。かわりに
memory_store_idを使用してください。 - memory_store_id
str– 管理対象DBメモリー・ストアの安定したID。同じIDを再利用して、同じ管理対象ストアを再オープンします。IDはアンダースコアを使用して管理対象DBオブジェクト名に結合されるため、先頭は文字で、使用できるのは文字、数字およびアンダースコアのみで、最大16文字である必要があります。これまたはtable_name_prefixのいずれかを渡します。両方は渡しません。省略した場合、table_name_prefixも省略すると、ストアはtable_name_prefixまたは接頭辞なしのデフォルトを使用します。 - search_strategy
SearchStrategy–search()のバックエンドを選択するSearchStrategy値。ベクトルのみの取得にはSearchStrategy.VECTOR(デフォルト)、格納された検索テキストに対して管理されたOracleハイブリッド・ベクトル索引を問い合せるにはSearchStrategy.HYBRID、ベクトル・フュージョンのない格納された検索テキストに対してキーワード/テキスト一致でランク付けするにはSearchStrategy.KEYWORDを使用します。KEYWORDには埋込みは必要ありません。HYBRIDでは、管理対象ハイブリッド索引がメイン・ストア・埋込みと同じデータベース内モデルを使用するように、embedderをOracleDBEmbedderにする必要があります。キーワード・クライアントが既存のハイブリッド・スキーマを開く場合、ストアはそのハイブリッド索引のテキスト・ブランチを使用できます。既存のスキーマで互換性のない戦略が使用されている場合、そのスキーマには戦略に必要なストアド・サーチ状態が含まれていない可能性があるため、起動に失敗します。 - search_index_sync
SearchIndexSyncMode–SearchStrategy.HYBRIDおよびSearchStrategy.KEYWORDの管理対象検索索引リフレッシュ動作を選択するSearchIndexSyncMode値。SearchIndexSyncMode.ON_COMMITがデフォルトであり、書込みトランザクションがコミットされるとすぐにレコードを検索可能にします。SearchIndexSyncMode.MANUALは、明示的なデータベース側の同期操作へのリフレッシュを残します。SearchIndexSyncMode.AUTOを使用すると、Oracleは管理対象ハイブリッド索引を非同期的にリフレッシュでき、SearchStrategy.HYBRIDでのみサポートされます。キーワード検索ではAUTOが拒否されます。 - memory_retention_config
MemoryRetentionConfig–DBでバックアップされたメッセージおよびメモリーのオプションのメモリー保持構成。MemoryRetentionConfig.default_ttl_daysは、新しい書込みがttl_daysを省略する場合に使用されます。MemoryRetentionConfig.max_ttl_daysは、構成済の最大値を上回る明示的なレコードごとの期間を警告付きでクランプし、設定されている場合、ttl_days=Noneは失効しない行を作成するかわりにその最大値を使用します。SchemaPolicy.CREATE_IF_NECESSARYを使用すると、明示的な構成では、既存の管理対象スキーマに格納されているメタデータがリフレッシュされますが、既存の有効期限は更新されず、省略すると既存の設定が維持されます。明示的な構成がNOT_SET_MARKERにdefault_ttl_daysまたはmax_ttl_daysを残す場合、SDKはスキーマ・メタデータを比較または格納する前に、その属性をデフォルト値(None)に解決します。この構成は、レコードに格納される予想情報、アプリケーションが保持する理由、およびアプリケーションまたは規制保持のコミットメントに基づいて選択します。
- embedder
警告: SchemaPolicy.CREATE_IF_NECESSARYは、初期化が成功する前に管理対象スキーマDDLおよびベストエフォート・データ・リライトを適用する可能性があるため、通常のストアの起動よりもコストがかかることがあります。古い管理対象スキーマの最初のオープンを移行またはメンテナンス操作として計画します(そのスキーマに多数の行が含まれている可能性がある場合)。
スキーマ設定で管理対象の期限切れレコード・パージ・ジョブを作成する必要があるが、データベース・ユーザーにスケジューラ・ジョブ権限がない場合、初期化は警告して続行します。期限切れのメッセージおよびメモリーは読取りおよび検索から非表示のままですが、ジョブがCREATE JOBまたは同等のスケジューラ権限を持つユーザーによって作成されるまでは物理的にパージされません。
SchemaPolicy.CREATE_IF_NECESSARYが最初に既存のスキーマに対して管理対象ハイブリッド索引を作成する場合、Oracleは格納された検索テキストをスキャンし、構成済のデータベース内モデルから管理対象ハイブリッド索引状態を構築します。ストア初期化はそのDDLが終了するまで待機するため、大規模なスキーマの移行またはメンテナンス操作として最初のハイブリッド・アップグレードを計画します。SearchIndexSyncModeは、索引が存在した後の継続的なメンテナンスを制御します。最初の索引ビルドを非同期にすることはありません。
その管理対象ハイブリッド索引を作成すると、管理対象スキーマによって名前が付けられたDBMS_VECTOR_CHAINベクトル化プリファレンスも作成されます。このプリファレンスには、構成されたOracleDBEmbedderモデルからの軽量ベクトル化構成メタデータが格納されます。これは、CTX_USER_PREFERENCESやCTX_USER_PREFERENCE_VALUESなどのOracle Textプリファレンス・ビューで検査できます。
メソッド add
Oracle DBストアにレコードを追加します。
- パラメータ:
- contents
list[str | None]– 永続化するペイロードを記録します。テキスト値は、index_textsが指定されていないかぎり、検索テキストにも使用されます。テキスト値がNoneの場合、ストアはmetadata["content"]にフォールバックする可能性があります。明示的な空の文字列は保持されます。 - record_type
str– 作成する論理レコード・タイプ("message"、"memory"、"guideline"、"fact"、"preference"、"user_profile"、"agent_profile"など)。 - index_texts
list[str | list[str] | None]– 検索テキストとして使用されるオプションの代替ペイロード。これを使用して、DBバックのキーワード索引またはハイブリッド検索索引を制御します。各外部リスト・エントリは、1つのレコードに揃っています。文字列エントリはストアによってチャンク化できます。リスト・エントリは、コール元が所有するチャンクとして扱われ、そのままRECORD_CHUNKS.chunk_textに書き込まれます。embeddingsも指定されている場合、リスト・エントリはチャンクごとに1つのベクトルのみを必要とします。文字列エントリは、そのレコードに対して1つのベクトルのみを受け入れます。 -
埋込み
list[list[float] | ndarray | list[list[float] | ndarray]]–contentsに整列されたオプションの事前計算済埋込みベクトル。各レコード・エントリは、1つのベクトルまたはチャンク・ベクトルのリストです。ローカル・ベクトル・ストレージが構成されている場合、これらのベクトルは、ストアの埋込みをコールして書込み用のローカル・ベクトルを作成するのではなく、レコードのベクトル表現として直接格納されます。単一のベクトルは、構成済のチャンカが分割する場合でも、セマンティック・テキスト全体を表します。複数のチャンク・ベクトルでは、一致するindex_textsチャンク・リストが必要です。SearchStrategy.VECTORでは、ベクトル検索は格納されたベクトルに対してランク付けされます。SearchStrategy.HYBRIDまたはSearchStrategy.KEYWORDでは、DBバック検索は、格納された検索テキストおよびOracle管理テキストまたはハイブリッド索引の状態をランク付けするため、アドタイム埋込みは、構成済のローカル・ベクトル・ストレージにのみ影響し、そのアクティブな検索戦略には影響しません。このストアがローカル・ベクトル・ストレージなしで構成されている場合は、embeddingsのかわりにindex_textsを指定して、これらのテキスト対応索引に表示されるテキストをオーバーライドします。 - record_ids
str | None | list[str | None]– オプションの呼び出し元表示識別子。1つの文字列を1つのレコード挿入に使用できますが、リストはcontentsと一致している必要があります。このフィールドを省略すると、生成された識別子が返されます。 - thread_ids
str | None | list[str | None]– 挿入されたレコードに関連付けられたオプションのスレッド識別子。スカラー値は、整列された入力間でブロードキャストできます。 - user_ids
str | None | list[str | None]– 挿入されたレコードに関連付けられたオプションのユーザー識別子。スカラー値は、整列された入力間でブロードキャストできます。 - agent_ids
str | None | list[str | None]– 挿入されたレコードに関連付けられたオプションのエージェント識別子。スカラー値は、整列された入力間でブロードキャストできます。 - roles
str | None | list[str | None]– オプションのメッセージ・ロール("user"や"assistant"など)。record_typeが"message"の場合にのみ使用されます。 - timestamps
str | None | list[str | None]– レコードとともに保存するオプションのタイムスタンプ。各タイムスタンプは、レコードが作成された時刻を表します。スカラー値は、整列された入力間でブロードキャストできます。省略されたエントリまたはNoneエントリは、イベントのタイムスタンプを設定しません。ttl_anchorがTimeToLiveAnchor.TIMESTAMPの場合、影響を受けるすべてのレコードには、具体的なISO-8601タイムスタンプ値が必要です。タイムゾーンのないISO-8601タイムスタンプはUTCとして扱われます。 - metadata
dict[str, Any] | None | list[dict[str, Any] | None]– オプションのメタデータディクショナリ。テキスト値を""に設定するのではなく省略した場合、メタデータにはフォールバック・ソースとして"content"を含めることができます。 - ttl_days
int | None | list[int | None]– メッセージおよびメモリーに似たレコードに対するオプションの存続時間(日数)。管理対象スキーマのMemoryRetentionConfig.default_ttl_daysを使用するには、この引数を省略します。Noneを渡して、保存構成の設定時にMemoryRetentionConfig.max_ttl_daysを使用するか、失効しないレコードを作成します。MemoryRetentionConfig.max_ttl_daysを超える値は、警告付きでその最大値に固定されます。スカラー値は、整列された入力間でブロードキャストできます。 - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor]– オプションの稼働時間アンカー。TimeToLiveAnchor.CREATED_ATを使用してデータベース作成時間を基準に期限切れにするか、TimeToLiveAnchor.TIMESTAMPを使用して指定されたイベント・タイムスタンプを基準に期限切れにします。省略すると、有効期限はTimeToLiveAnchor.CREATED_ATを使用します。Timestamp-anchored有効期限には、挿入されたレコードごとに具体的なISO-8601タイムスタンプが必要です。タイムゾーンのないISO-8601タイムスタンプはUTCとして扱われます。 - **store_kwargs (Any)–DB書き込みオプション。
batch_sizeは、エグゼキュータのバッチサイズを制御し、デフォルトは256です。
- contents
- 戻り値:入力と同じ論理的な順序で挿入されたレコードの識別子。
- 戻り型: list[str]
例
store.add(
["Index this stored text"],
record_type="memory",
record_ids="mem-db-add-docs",
)
['mem-db-add-docs']
store.add(
["Stored text"],
record_type="memory",
index_texts=["Search this text"],
record_ids="mem-db-index-text-docs",
)
['mem-db-index-text-docs']
store.add(
["Short-lived event"],
record_type="memory",
record_ids="mem-db-ttl-docs",
timestamps="2026-01-01T12:00:00+00:00",
ttl_days=7,
ttl_anchor=TimeToLiveAnchor.TIMESTAMP,
)
['mem-db-ttl-docs']
メソッド add_agent
エージェント・プロファイル・レコードを追加します。
- パラメータ:
- agent_id
str– エージェント識別子。 - information
str– エージェントに関するフリーフォーム情報。このテキストはプロファイル コンテンツとして保存され、プロファイルの検索可能な表現の作成に使用されます。 - metadata
dict[str, Any] | None– エージェント・プロファイル行に格納されているオプションのメタデータ・マッピング。
- agent_id
- 戻り値:挿入されたエージェント・プロファイル・レコードの識別子。
- 戻り型: str
ノート:
エージェント・プロファイル・レコードのスコープは設定されていません。挿入されたパブリック・レコード識別子は、agent_idとして渡される値と同じです。
例
store.add_agent("a-docs-agent", "Support assistant")
'a-docs-agent'
method add_async (非同期)
行指向レコードをストアに非同期的に追加します。
同じ引数を受け入れ、add()と同じ識別子を返します。
- パラメータ:
- コンテンツ
list[str | None] - record_type
str - index_texts
list[str | list[str] | None] - 埋込み
list[list[float] | ndarray | list[list[float] | ndarray]] - record_ids
str | None | list[str | None] - thread_ids
str | None | list[str | None] - user_ids
str | None | list[str | None] - agent_ids
str | None | list[str | None] - ロール
str | None | list[str | None] - タイムスタンプ
str | None | list[str | None] - メタデータ
dict[str, Any] | None | list[dict[str, Any] | None] - ttl_days
int | None | list[int | None] - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor] - store_kwargs
Any
- コンテンツ
- 戻り型: list[str]
メソッド add_batches
コール元準備の論理バッチをストアに追加します。
- パラメータ:
- batches
list[PendingRecordBatch]– 永続化する完全に準備された論理バッチ。各バッチには、record_type、スコープ値、ロール、タイムスタンプ、メタデータなどのレコードごとに独自のフィールドが必要です。 - **store_kwargs (Any)– 具象ストアに転送される実装固有の書き込みオプション。
- batches
- 戻り値:入力バッチおよび行と同じ論理的な順序で挿入されたレコードの識別子。
- 戻り型: List[str]
例
store.add_batches(
[
PendingRecordBatch(
texts=["pizza batch"],
record_type="memory",
record_ids="mem-batch-docs",
)
]
)
['mem-batch-docs']
method add_batches_async (非同期)
コール元準備の論理バッチをストアに非同期で追加します。
同じ引数を受け入れ、add_batches()と同じ識別子を返します。
- パラメータ:
- バッチ
list[PendingRecordBatch] - store_kwargs
Any
- バッチ
- 戻り型: list[str]
メソッド add_user
ユーザープロファイルレコードを追加します。
- パラメータ:
- user_id
str– ユーザー識別子。 - information
str– ユーザーに関する自由形式の情報。このテキストはプロファイル コンテンツとして保存され、プロファイルの検索可能な表現の作成に使用されます。 - metadata
dict[str, Any] | None– ユーザープロファイル行に格納されているオプションのメタデータマッピング。
- user_id
- 戻り値:挿入されたユーザー・プロファイル・レコードの識別子。
- 戻り型: str
ノート:
ユーザー・プロファイル・レコードのスコープは設定されていません。挿入されたパブリック・レコード識別子は、user_idとして渡される値と同じです。
例
store.add_user("u-docs-profile", "Prefers concise answers.")
'u-docs-profile'
メソッド delete
1つの管理対象行とそのチャンク行を識別子で削除します。
- パラメータ:
- record_type
str– 削除するレコードタイプラベル。サポートされているタイプには、"thread"、"message"、"memory"、"guideline"、"fact"、"preference"、"user_profile"および"agent_profile"があります。 - record_id
str– 削除する識別子。 - カスケード
bool–Trueの場合、アクター・プロファイルなどのサポートされている最上位ターゲットを、同じトランザクション内のスコープ指定された子行に展開します。ユーザー・プロファイル・ターゲットまたはエージェント・プロファイル・ターゲットの場合、所有されているスレッド行が最初に削除され、そのスレッド・スコープのメッセージおよびメモリー表の行が削除されます。その後、アクター・スコープの残りの直接メッセージおよびメモリーに似た行(memory、guideline、fact、preference)が削除されます。このスコープ指定クリーンアップは、一致するプロファイル行がすでに存在する場合でも実行されます。
- record_type
- 戻り値:削除されたリクエストされたトップレベル・ターゲットの数(通常は
0または1)。カスケードされた子行は個別にカウントされないため、欠落しているアクター・プロファイルによってスコープ指定クリーン・アップがトリガーされた場合でも、これは0になることがあります。 - 戻り型: int
ノート:
この操作は、1つのトランザクション内で実行されます。サポートされている最上位ターゲットに対してcascadeが有効な場合、プロファイル削除およびスコープ指定子の削除はすべてコミットまたはロールバックされます。
例
store.add(["Delete me"], record_type="memory", record_ids="mem-delete-docs")
['mem-delete-docs']
store.delete("memory", "mem-delete-docs")
1
メソッド delete_thread
スレッドとそれに関連付けられた格納された行を削除します。
- パラメータ: thread_id
str– スレッド行、依存する子行、明示的なチャンク行のクリーンアップなど、行を削除する必要があるスレッド識別子。 - 戻り値:削除されたスレッド行の数(
0または1)。 - 戻り型: int
ノート:
この操作は、スレッド・スコープのカスケード・クリーン・アップが必要な場合に使用します。DBバック・ストアでは、スレッドを削除すると、管理対象スレッドの行と、関連するメッセージ行およびメモリー行、および取得用に保持されている検索データが削除されます。これは、RAWメッセージ行のみを削除するメッセージ・レベルの削除よりも広範囲です。スレッド削除では、依存メッセージ行とメモリー行が、同じトランザクション内の関連する取得データとともに削除されます。
例
store.delete_thread("c1")
0
メソッド get
識別子によって格納されたレコードを取得します。
- パラメータ:
- record_type
str– 管理対象行に解決されるレコード・タイプ・ラベル("message"、"memory"、"guideline"、"fact"、"preference"、"user_profile"、"agent_profile"など)。 - record_id
str– 検索する識別子。
- record_type
- 戻り値:検出時にデコードされたメタデータを含むレコードが移入されます。それ以外の場合は
Noneです。 - 戻りタイプ: レコード |なし
例
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'
メソッド list
レコードタイプの永続レコードを列挙します。
- パラメータ:
- record_type
str– レコード型のラベル(例:"message"、"memory"、"guideline"、"fact"、"preference"、"user_profile"、または"agent_profile")。 - limit
int | None– 返されるレコードの最大数(オプション)。省略すると、ストアはデフォルトのリスト上限を使用します。Noneを渡して、その上限を無効にし、一致するすべてのレコードを返します。 - thread_id
str | None– 正確なスレッドスコープフィルタ。省略した場合、フィルタリングは適用されません。Noneに設定すると、thread_idがSQLNULLの行のみが返されます。スコープなしレコードの種類では、このフィルターは無視されます。 - user_id
str | None– 正確なユーザースコープフィルタ。省略した場合、フィルタリングは適用されません。Noneに設定すると、user_idがSQLNULLの行のみが返されます。スコープなしレコードの種類では、このフィルターは無視されます。 - agent_id
str | None– 正確なエージェントスコープフィルタ。省略した場合、フィルタリングは適用されません。Noneに設定すると、agent_idがSQLNULLの行のみが返されます。スコープなしレコードの種類では、このフィルターは無視されます。 -
metadata_filter
dict[str, Any] | None–メタデータ・フィルタ。省略した場合、フィルタリングは適用されません。
Noneに設定すると、メタデータが格納されていないレコードのみが返されます。dictに設定すると、metadata_filterのエントリはANDセマンティクスと結合されます。値がフィールド・レベルの演算子ディクショナリではないエントリは、完全一致セマンティクスを使用します。つまり、リクエストされたキーは格納されたメタデータに存在する必要があります。ネストされたディクショナリは再帰的に照合されます。スカラー値とリスト値は完全一致で照合され、リストの順序と長さも一致する必要があります。配列メンバーシップをテストするには、{"tags": {"$array_contains": "prod"}}などのフィールド・レベルの演算子ディクショナリを使用します。"$array_contains"のリスト・オペランドは、リストされたすべての値が存在する必要があることを意味します。"$array_contains_any"は、リストされた値が少なくとも1つ存在する必要があることを意味します。"$not"を使用して、演算子ディクショナリやRAWの完全一致値など、同じフィールドの別のフィールド・レベル式を否定します。負の式は、欠落しているフィールドを含め、正の式が失敗すると一致します。負の配列メンバーシップも非配列フィールドと一致します。例として、スカラー・フィールドの場合はmetadata_filter={"source": "slack"}、ネストしたフィールドの場合はmetadata_filter={"review": {"status": "open"}}、完全リスト一致の場合はmetadata_filter={"tags": ["prod", "urgent"]}があります。条件を結合して、これらすべてを要求します。metadata_filter={ "source": "slack", "review": {"status": "open"}, "tags": ["prod", "urgent"], }
- record_type
- 戻り値:挿入順序で並べられたレコード。
- 戻りタイプ: list[レコード]
ノート:
"user_profile"および"agent_profile"は、スコープ指定されていないレコード・タイプです。これらのレコード・タイプの場合、thread_id、user_idおよびagent_idは無視され、アクター・アイデンティティはrecord.idに残ります。
例
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
メソッド list_thread_messages
スレッドの永続メッセージを返します。
- パラメータ:
- thread_id
str– メッセージを返すスレッド識別子。 - last_n
int | None– 返される最新のメッセージの数(オプション)。
- thread_id
- 戻り値:挿入順序で並べられたメッセージ・レコード。
- 戻り型: list[MessageRecord]
例
store.list_thread_messages("c1")
[]
メソッド search
類似性でレコードを検索します。
アクティブな検索バックエンドは、ストアの構成済SearchStrategyによって異なります。SearchStrategy.VECTORは、格納されたレコード・ベクトルに対して問合せベクトルをランク付けします。SearchStrategy.HYBRIDは、格納された検索テキストおよびその管理対象索引の状態に対して、Oracleの管理対象ハイブリッド索引を問い合せます。SearchStrategy.KEYWORDは、格納された検索テキストに一致するテキストでのみランク付けします。
- パラメータ:
- query
str | None– 一致するレコードまたは類似レコードの検索に使用されるオプションの自然言語テキスト。query_vectorを省略する場合は、空白以外の文字を少なくとも1つ指定します。ベクトル検索では、このテキストが埋め込まれます。キーワード検索では、格納された検索テキストと照合されます。ハイブリッド検索では、テキスト検索とベクトル検索の両方に使用されます。 - query_vector
list[float] | None– オプションの事前計算済問合せ埋込み。queryおよびquery_vectorのいずれかを指定する必要があります。ベクトル検索では、これは格納されたレコード・ベクトルと比較されます。ハイブリッド検索では、問合せ側のベクトル入力としてOracleのマネージド・ハイブリッド索引に送信され、DBストアがアドタイム・ストアド・ベクトルまたは更新時ストアド・ベクトルと直接比較されることはありません。キーワード検索ではquery_vectorを使用できません。ベクトルは空でない1次元で、有限数値のみを含む必要があります。ハイブリッド検索では、そのディメンションが構成済のOracleDBEmbedderモデルと一致する必要があります。 - k
int– 返す結果の最大数。明示的な値は、1以上である必要があります。これは上限です。フィルタが制限しすぎている場合、有効期限が切れていない一致レコードが少ない場合、または実装固有の検索動作のために、コールで返される結果がkより少ない場合があります。 - thread_id
str | None– オプションのスレッドスコープ識別子。exact_thread_match=Falseは、スレッドディメンションを制約なしのままにします。exact_thread_match=Trueは、指定されたthread_idと完全に一致します。thread_id=Noneの場合、スレッド・ディメンションでスコープ指定されていないレコードのみが一致します。 - user_id
str | None– オプションのユーザーおよびエージェントのスコープ識別子。対応するexact_*_match=Falseフラグは、そのディメンションを制約なしのままにします。exact_*_match=Trueは、指定されたIDと正確に一致します。IDがNoneの場合、そのディメンションでスコープ指定されていないレコードのみが一致します。 - agent_id
str | None– オプションのユーザーおよびエージェントのスコープ識別子。対応するexact_*_match=Falseフラグは、そのディメンションを制約なしのままにします。exact_*_match=Trueは、指定されたIDと正確に一致します。IDがNoneの場合、そのディメンションでスコープ指定されていないレコードのみが一致します。 - exact_user_match
bool– 各スコープ識別子を正確に一致させる必要があるかどうか。Falseは、そのディメンションを制約なしのままにします。Trueは、指定された値と正確に一致します。その値がNoneの場合、そのディメンションのスコープなしレコードのみに一致します。 - exact_agent_match
bool– 各スコープ識別子を正確に一致させる必要があるかどうか。Falseは、そのディメンションを制約なしのままにします。Trueは、指定された値と正確に一致します。その値がNoneの場合、そのディメンションのスコープなしレコードのみに一致します。 - exact_thread_match
bool– 各スコープ識別子を正確に一致させる必要があるかどうか。Falseは、そのディメンションを制約なしのままにします。Trueは、指定された値と正確に一致します。その値がNoneの場合、そのディメンションのスコープなしレコードのみに一致します。 - record_types
set[str] | None– 含める検索可能なレコードタイプのオプションセット。省略すると、DB検索ではメッセージ、メモリー表の行およびアクター・プロファイルが対象になります。Actorプロファイルはinformationペイロードを寄与しますが、メッセージ行とメモリー行はcontentペイロードを寄与します。検索中、プロファイル・レコード・タイプは適用可能なスコープ・ディメンションのアクター識別子を使用し、残りのスコープ・ディメンションはNoneとして動作します。 - metadata_filter
dict[str, Any] | None– オプションのメタデータフィルタマッピング。metadata_filterのエントリはANDセマンティクスと結合されます。値がフィールド・レベルの演算子ディクショナリではないエントリは、完全一致セマンティクスを使用します。つまり、リクエストされたキーは格納されたメタデータに存在する必要があります。ネストされたディクショナリは再帰的に照合されます。スカラー値とリスト値は完全一致で照合され、リストの順序と長さも一致する必要があります。配列メンバーシップをテストするには、{"tags": {"$array_contains": "prod"}}などのフィールド・レベルの演算子ディクショナリを使用します。"$array_contains"のリスト・オペランドは、リストされたすべての値が存在する必要があることを意味します。"$array_contains_any"は、リストされた値が少なくとも1つ存在する必要があることを意味します。"$not"を使用して、演算子ディクショナリやRAWの完全一致値など、同じフィールドの別のフィールド・レベル式を否定します。負の式は、欠落しているフィールドを含め、正の式が失敗すると一致します。負の配列メンバーシップも非配列フィールドと一致します。
- query
- 戻り値:距離の増加でソートされた
(record, distance)ペア。リストに含まれるエントリ数はk未満です。 - 戻り型: list[tuple[Record、 float]]
- 上げ幅: ValueError–
kが1より小さい場合、queryとquery_vectorの両方が指定されている場合、queryが空白の場合、ベクトル・モードが問合せ埋込みを解決できない場合、query_vectorが無効の場合、またはmetadata_filterが無効な場合。
例
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'
スカラー・メタデータ値をフィルタします。
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
ネストされたメタデータに対するフィルタ:
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
次の順序を含むリスト値を完全に一致させます。
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
メタデータ配列に値が含まれている場合にフィルタします。
any(
record.id == "mem-search-meta-tags-docs"
for record, _ in store.search(
"pizza",
k=3,
metadata_filter={"tags": {"$array_contains": "prod"}},
)
)
True
複数のメタデータ条件を結合します。レコードはすべてのキーを満たす必要があります。
store.add(
["pizza rollout"],
record_type="memory",
record_ids="mem-search-meta-combined-docs",
metadata={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
['mem-search-meta-combined-docs']
any(
record.id == "mem-search-meta-combined-docs"
for record, _ in store.search(
"pizza",
k=5,
metadata_filter={
"source": "slack",
"review": {"status": "open"},
"tags": ["prod", "urgent"],
},
)
)
True
method search_async (非同期)
セマンティックの類似性によってレコードを非同期で検索します。
- パラメータ:
- query
str | None–searchで受け入れられる問合せテキストと同じです。 - k
int–searchで受け入れられる同じ最大結果数。明示的な値は、1以上である必要があります。 - query_vector
list[float] | None–searchで受け入れられる、オプションの事前計算済みクエリー埋め込みと同じです。 - thread_id
str | None–searchで受け入れられるオプションのスコープフィルタと同じです。 - user_id
str | None–searchで受け入れられるオプションスコープフィルタと同じです。 - agent_id
str | None–searchで受け入れられるオプションのスコープフィルタと同じです。 - exact_user_match
bool–searchで受け入れられる完全一致フラグと同じです。 - exact_agent_match
bool–searchで受け入れられる完全一致フラグと同じです。 - exact_thread_match
bool–searchで受け入れられる完全一致フラグと同じです。 - record_types
set[str] | None–searchで受け入れられるオプションのレコードタイプフィルタと同じです。 - metadata_filter
dict[str, Any] | None– スカラー、ネスト、完全リスト、配列メンバーシップ、および{"source": "slack"}、{"review": {"status": "open"}}、{"tags": ["prod", "urgent"]}、{"tags": {"$array_contains": "prod"}}などの結合条件を含む、searchで受け入れられる同じオプションのメタデータフィルタ。
- query
- 戻り値:基礎となる
searchコールによって戻される(record, distance)ペア。 - 戻り型: List[tuple[Record、 float]]
- Raises: ValueError–
kが1未満の場合。
メソッド update
格納されたレコード・コンテンツ、検索状態、メタデータおよびタイムスタンプ値を更新します。
- パラメータ:
- record_type
str– 変更される行のレコードタイプラベル("message"、"memory"、"guideline"、"fact"、"preference"、"user_profile"、または"agent_profile"など) - record_id
str– 更新する格納された行の識別子。 - text
str | None–content列に保持されるオプションの置換テキスト。Noneを渡して、格納されているテキストをクリアし、格納されている埋込みをクリアします。Noneのみを渡すか、同じコールで省略されたセマンティック引数を渡します。""を渡して、そのレコードの格納されたベクトル表現をクリアしながら、明示的な空のコンテンツを保持します。省略すると、既存のコンテンツは変更されません。 - index_text
str | list[str] | None– オプションのセマンティック専用ペイロード。省略すると、textがセマンティク索引付けに使用されます。ハイブリッド対応スキーマでは、これはOracleのテキスト・コンポーネントで使用されるストアド検索テキストにもなります。文字列値は、ストアによってチャンク化できます。リスト値は、コール元が所有するチャンクとして扱われ、そのままRECORD_CHUNKSに書き込まれます。embeddingのみを指定すると、既存の検索テキストが再利用されます。 -
埋込み
list[float] | ndarray | list[list[float] | ndarray] | None–オプションの事前計算済埋込みベクトルまたはチャンク埋込みベクトルのリスト。ローカル・ベクトル・ストレージが構成されている場合、これは直接使用され、埋込みコールは行われません。
Noneを渡して、格納された埋込みをクリアします。textが指定されている場合、構成済のチャンカがそのテキストを分割する場合でも、単一のベクトルは置換テキスト全体を表します。index_textがチャンク・リストでないかぎり、テキストの置換時に複数のチャンク・ベクトルが拒否されます。embeddingのみを指定する場合、埋込み数はレコードの既存のチャンク行と一致する必要があります。SearchStrategy.VECTORでは、ベクトル検索は格納された埋込みに対してランク付けされます。SearchStrategy.HYBRIDまたはSearchStrategy.KEYWORDでは、DBバック検索は、格納された検索テキストおよびOracle管理のテキストまたはハイブリッド索引の状態をランク付けするため、更新時の埋込みは、構成済のローカル・ベクトル・ストレージにのみ影響し、そのアクティブな検索戦略には影響しません。このストアがローカル・ベクトル・ストレージなしで構成されている場合は、embeddingのかわりにindex_textを指定して、テキスト対応索引に表示されるテキストを更新します。テキストのみのセマンティク更新では、これらのモードでembeddingを完全に省略できます。 - metadata
dict[str, Any] | None– オプションのメタデータ・マッピングは、JSONにシリアライズされ、metadataに格納されます。 - timestamp
str | None– レコードとともに保存するオプションの新しいタイムスタンプ。これは、レコードが作成された時期を表します。省略すると、既存のタイムスタンプが保持されます。Noneを渡して、保存されたタイムスタンプをクリアし、将来のTimeToLiveAnchor.CREATED_AT失効リフレッシュにデータベース作成時間を使用します。ttl_anchorがTimeToLiveAnchor.TIMESTAMPの場合、タイムゾーンなしのISO-8601タイムスタンプはUTCとして扱われます。 - ttl_days
int | None– オプションの有効期限のリフレッシュ(日数)。現在の有効期限タイムスタンプを保持するには、ttl_anchorとともにこの引数を省略します。Noneを渡して、保存構成が1つ設定されているときにMemoryRetentionConfig.max_ttl_daysを使用するか、そうでない場合は有効期限をクリアします。MemoryRetentionConfig.max_ttl_daysを超える値は、警告付きでその最大値に固定されます。失効を更新すると、失効したレコードがまだパージされていない場合に再度表示されることがあります。 - ttl_anchor
TimeToLiveAnchor– 有効期限リフレッシュのオプションの存続時間アンカー。TimeToLiveAnchor.CREATED_ATを使用して、格納された作成時間からカウントするか、TimeToLiveAnchor.TIMESTAMPを使用して同じ更新で指定された置換timestampからカウントするか、またはtimestampが省略された格納されたイベント・タイムスタンプからカウントします。ttl_daysを指定しないでttl_anchorを指定すると、スキーマのMemoryRetentionConfig.default_ttl_daysを使用して有効期限がリフレッシュされます。リフレッシュ中にttl_anchorを省略すると、ストアはTimeToLiveAnchor.CREATED_ATを使用します。タイムスタンプ・アンカー・リフレッシュでは、同じコールの置換ISO-8601タイムスタンプ、またはその形式の既存の格納済イベント・タイムスタンプのいずれかが必要です。タイムゾーンのないISO-8601タイムスタンプはUTCとして扱われます。
- record_type
- 戻り値:更新された行の数(
0または1)。record_typeおよびrecord_idに一致する論理レコードがない場合、0を返します。 - 戻り型: int
- Raises: ValueError–
record_typeがサポートされていない場合、更新ペイロードが指定されていない場合、またはセマンティク更新引数に互換性がない場合。
例
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'
検索戦略
クラス oracleagentmemory.core.dbsearch.SearchStrategy
ベース: Enum
Oracle DBストアの検索動作。
DBストアの初期化では、選択した戦略を使用して、管理対象スキーマ検索機能を選択します。VECTOR検索では、ローカル埋込みが格納されます。KEYWORD検索では、検索可能なテキストとテキスト索引が格納されます。HYBRID検索では、検索可能なテキストとOracle管理のハイブリッド・ベクトル索引の状態が格納されます。DBストアは起動時にこのスキーマ機能を検証するため、互換性のない戦略では不完全な結果が暗黙のうちに返されません。
VECTOR- ベクトル類似性のみで検索します。ストアは、構成された埋込み子で問合せを埋め込むか、コール元提供の
query_vectorを使用して、格納されたベクトルからの距離でレコードをランク付けします。ベクトル検索用に構成されたDBスキーマで使用します。 HYBRID- Oracleのマネージド・ハイブリッド索引を検索します。Oracleは、格納された検索テキストに対するテキスト一致と、データベース内ハイブリッド索引からのベクトル・ランキングを組み合せます。これは、ユーザーが自然言語や正確な識別子、別名、製品名で検索できる場合に使用します。この方法では、管理対象索引およびストアが1つのデータベース内モデルを共有するように、ストアのメイン・埋込みを
OracleDBEmbedderにする必要があります。 KEYWORD- 格納された検索テキストに一致するキーワード/テキストでのみ検索します。このモードでは、ローカル問合せ埋込みは作成されず、Oracle DB埋込みは必要ありません。既存のハイブリッド・スキーマに対してオープンすると、新しいハイブリッド索引を作成せずにそのハイブリッド索引のテキスト・ブランチを使用できます。これは、ベクトル・フュージョンなしで正確な識別子、別名、製品名または短いフレーズで取得を実行する必要がある場合に使用します。
HYBRID = 'HYBRID'
KEYWORD = 'KEYWORD'
VECTOR = 'VECTOR'
検索インデックス同期モード
クラス oracleagentmemory.core.dbsearch.SearchIndexSyncMode
ベース: Enum
管理対象DB検索索引のリフレッシュ動作。
この設定は、Oracleが新規または変更した検索テキストをDBバック・テキスト対応検索で表示するタイミングを制御します。SearchStrategy.HYBRIDは、Oracleの管理対象ハイブリッド・ベクトル索引を使用します。SearchStrategy.KEYWORDは、Oracle Text索引を使用します。SearchStrategy.VECTORでは、この設定は使用されません。
ON_COMMIT- 書込みトランザクションのコミット時に索引をリフレッシュします。レコードは書込みの成功直後に検索可能であるため、これはほとんどのアプリケーションでデフォルトであり、最も簡単な選択です。索引がすぐに最新の状態に保たれるため、トランザクションを記述する作業を追加できます。
MANUAL- 索引は自動的にリフレッシュしないでください。新規または更新されたレコードは、データベース側の索引同期操作を自分で実行するまで、キーワード検索またはハイブリッド検索に表示されない場合があります。これは、作業のリフレッシュの実行時に制御するバルク・ロードまたはメンテナンス・ウィンドウに便利です。
AUTO- Oracleが管理対象ハイブリッド索引を非同期的にリフレッシュできるようにします。書込みは即時リフレッシュ・コストを回避できますが、Oracleがバックグラウンド・リフレッシュを完了するまで、検索結果は最近の書込みより遅れる可能性があります。このモードは、
SearchStrategy.HYBRIDでのみサポートされています。
警告:この設定は、管理対象検索索引が存在した後の継続的なメンテナンスを制御します。最初の索引ビルドを非同期にすることはありません。既存のストアド・サーチ・テキストに対するマネージド・ハイブリッド索引の作成は、Oracleがそのテキストからマネージド・ハイブリッド索引の状態を構築するため、長時間実行される可能性があります。
AUTO = 'AUTO'
手動 = 'MANUAL'
ON_COMMIT = 'ON_COMMIT'
存続時間
クラス oracleagentmemory.core.retention.MemoryRetentionConfig
ベース: object
Oracle DBバックアップ・レコードのスキーマ・レベルの保存設定。
- パラメータ:
- default_ttl_days
int | None– デフォルトの存続時間(日数)。デフォルトのNone(最大値なし)を使用する場合は、NOT_SET_MARKERのままにします。 - max_ttl_days
int | None– オプションの最大存続時間(日数)。デフォルトのNoneを使用する場合は、NOT_SET_MARKERのままにします。最大値なしでNoneを渡します。設定されている場合、これはハード・キャップです。大きいttl_days値を使用しようとする書込みは、警告とともにこの最大値に固定され、ttl_days=Noneを渡す書込みAPIは、期限切れでないレコードを作成するのではなく、この最大値を使用します。
- default_ttl_days
クラス oracleagentmemory.apis.ttl.TimeToLiveAnchor
ベース: Enum
存続時間からの失効タイムスタンプの計算に使用されるアンカー。
CREATED_AT- レコードのデータベース作成タイムスタンプからの有効期限を計算します。これは、呼出し側が
ttl_anchorを省略した場合のデフォルトです。 TIMESTAMP- レコードの格納済イベント・タイムスタンプからの有効期限を計算します。これは、メッセージまたはメモリーが古いイベントを表し、挿入時間ではなくそのイベント時間に対して相対的に期限切れになる場合に使用します。
CREATED_AT = 'CREATED_AT'
タイムスタンプ = 'TIMESTAMP'
スキーマ・ポリシー
クラス oracleagentmemory.core.SchemaPolicy
ベース: str、Enum
Oracle DBストアのスキーマ作成ポリシー。
存在が必要
フルマネージド・スキーマがすでに存在し、最新であることを確認します。DBオブジェクトを作成または変更しないでください。
空の作成
管理対象オブジェクトが存在しない場合は、スキーマをブートストラップします。オブジェクトがすでに存在する場合は、完全で最新の管理対象スキーマが必要です。
必要であれば作成
欠落している管理対象オブジェクトを作成し、サポートされている管理対象スキーマのアップグレードを適用します。
再作成する
すべての管理対象スキーマ・オブジェクトを削除して再作成します。これは破壊的です。