スレッド

このページでは、開発者向けのメッセージ・ヘルパー・タイプとともに、具体的なOracleスレッド・ハンドルを示します。

Oracleスレッド

クラス oracleagentmemory.core.OracleThread

ベース: IThread

Oracleストアに支えられたスレッド。

この実装では、スレッド・メッセージと手動で追加したメモリーの両方を埋め込んで格納し、格納されているすべてのレコードの類似性検索をサポートします。

ノート

新しいOracleThreadインスタンスを作成します。

例

from oracleagentmemory.core import MemoryExtractionConfig, OracleAgentMemory
client = OracleAgentMemory(connection=db_pool, embedder=embedder)
thread = client.create_thread(
    thread_id="c4",
    llm=llm,
    memory_extraction_config=MemoryExtractionConfig(enable_context_summary=True),
)
len(thread.add_messages([{"role": "user", "content": "I love pizza."}]))
1

メソッド add_image

このスレッドに関連付けられた1つのイメージを保持します。

descriptionは、イメージの検索可能なテキストとして格納されます。省略またはNoneを指定すると、アタッチされたLLMによってキャプションが生成されます。省略されたスコープ値は、このスレッドの対応するユーザー、エージェント、およびスレッド識別子を継承します。

method add_image_async (非同期)

このスレッドに関連付けられた1つのイメージを非同期に保持します。

descriptionは、イメージの検索可能なテキストとして格納されます。省略またはNoneを指定すると、アタッチされたLLMによってキャプションが生成されます。省略されたスコープ値は、このスレッドの対応するユーザー、エージェント、およびスレッド識別子を継承します。

メソッド add_memory

手動メモリー・エントリを追加し、索引付けします。

例

thread.add_memory("Remember this preference", memory_id="mem-thread-docs")
'mem-thread-docs'

method add_memory_async (非同期)

手動メモリー・エントリを追加し、非同期的に索引付けします。

例

import asyncio
asyncio.run(thread.add_memory_async(
    "Remember this preference", memory_id="mem-thread-docs-async"
))
'mem-thread-docs-async'

メソッド add_messages

スレッドにメッセージを追加し、索引付けします。

バックグラウンド抽出モードでは、このメソッドはRAWメッセージの挿入後に戻り、バックグラウンドでのバックグラウンド抽出が試行されます。

RAWメッセージは、自動抽出の前にどちらのモードでも格納されます。後で抽出または導出メモリー・ストレージが失敗した場合、RAWメッセージは格納されたままになりますが、導出されたメモリーまたはサマリー更新が欠落する可能性があります。

ノート

MemoryExtractionMode.BACKGROUNDでは、抽出されたメモリーが格納される前にRAWメッセージが保持されます。バックグラウンド抽出がキューに入らない場合、または構成されたキュー容量の待機がタイムアウトに達した場合、挿入されたRAWメッセージは格納されたままになり、抽出されたメモリーなしでコールが続行されるか、background_extraction_queue_full_behaviorに応じてTimeoutErrorが呼び出されます。

例

len(thread.add_messages([{"role": "user", "content": "Thread message from docs"}]))
1

method add_messages_async (非同期)

スレッドにメッセージを非同期に追加し、インデックスを作成します。

バックグラウンド抽出モードでは、このメソッドはRAWメッセージの挿入後に戻り、バックグラウンドでのバックグラウンド抽出が試行されます。

RAWメッセージは、自動抽出の前にどちらのモードでも格納されます。後で抽出または導出メモリー・ストレージが失敗した場合、RAWメッセージは格納されたままになりますが、導出されたメモリーまたはサマリー更新が欠落する可能性があります。

MemoryExtractionMode.BACKGROUNDでは、抽出されたメモリーが格納される前にRAWメッセージが保持されます。バックグラウンド抽出がキューに入らない場合、または構成されたキュー容量の待機がタイムアウトに達した場合、挿入されたRAWメッセージは格納されたままになり、抽出されたメモリーなしでコールが続行されるか、background_extraction_queue_full_behaviorに応じてTimeoutErrorが呼び出されます。

メソッド delete_image

このスレッドが所有する画像を1つ削除します。

method delete_image_async (非同期)

このスレッドが所有するイメージを非同期で削除します。

メソッド delete_memory

メモリーに似たレコード(メモリー、ファクト、プリファレンス、ガイドラインなど)を、この正確なスレッドから識別子によって削除します。

ノート

レコードを削除する前に、このメソッドは、アタッチされたエージェント・メモリー・コンポーネントを介して、このスレッドに対して受け入れられた以前のバックグラウンド抽出を待機します。待機の開始後、または別のコンポーネントまたはプロセスによって開始された作業が受け入れられるまで待機しません。

例

thread.delete_memory("456")
0

method delete_memory_async (非同期)

この正確なスレッドからメモリーに似たレコード(メモリー、ファクト、プリファレンス、ガイドラインなど)を識別子によって非同期に削除します。

ノート

このメソッドは、delete_memory()で説明されているバックグラウンド抽出待機および同時実行性の動作に従います。

例

import asyncio
asyncio.run(thread.delete_memory_async("456"))
0

メソッド delete_message

識別子によって、この正確なスレッドからメッセージ・レコードを削除します。

ノート

メッセージを削除する前に、このメソッドは、アタッチされたエージェント・メモリー・コンポーネントを介して、このスレッドに対して受け入れられた以前のバックグラウンド抽出を待機します。待機の開始後、または別のコンポーネントまたはプロセスによって開始された作業が受け入れられるまで待機しません。

メッセージを削除すると、RAWメッセージ・レコードのみが削除されます。導出された記憶は、どの抽出された記憶がどのメッセージから得られたかをまだ追跡していないため、削除されません。したがって、これらの記憶は検索可能なままになるか、コンテキスト・カードの出力に影響する可能性があります。OracleAgentMemory.delete_thread()を使用して、スレッドを関連するメッセージおよびメモリーとともに削除します。

例

thread.delete_message("123")
0

method delete_message_async (非同期)

識別子別にこの正確なスレッドからメッセージ・レコードを非同期的に削除します。

ノート

このメソッドは、delete_message()で説明されているバックグラウンド抽出待機および同時実行性の動作に従います。

メッセージを削除すると、RAWメッセージ・レコードのみが削除されます。導出された記憶は、どの抽出された記憶がどのメッセージから得られたかをまだ追跡していないため、削除されません。したがって、これらの記憶は検索可能なままになるか、コンテキスト・カードの出力に影響する可能性があります。OracleAgentMemory.delete_thread()を使用して、スレッドを関連するメッセージおよびメモリーとともに削除します。

例

import asyncio
asyncio.run(thread.delete_message_async("123"))
0

IDまたは完全なエンドポイント・タプルによるスレッド所有リレーションの削除。

エンドポイント・タプル・セレクタでは、格納されたソースとターゲットの方向を使用する必要があります。

例

thread.delete_record_link(relation_id="relation-id")
1

このスレッドが所有するリレーションを非同期に削除します。

メソッド get_context_card

スレッドのコンテキスト・カード・オブジェクトを返します。

LLMがバックアップした実装でリモート・ネットワークI/Oを実行できる場合は、get_context_card_asyncを優先します。

ノート

これは、スレッドのデフォルトの検索スコープをexact_thread_match=Falseとともに使用するため、同じユーザー/エージェントの他のスレッドからの関連メモリーが含まれる場合があります。

例

thread.add_memory("User likes pizza", memory_id="mem-context-docs")
'mem-context-docs'
len(thread.add_messages([{"role": "user", "content": "Tell me about pizza"}]))
1
"User likes pizza" in thread.get_context_card().content
True
card = thread.get_context_card(
    max_relevant_results=4,
    min_relevant_results_by_type={"memory": 1},
)
len(card.relevant_results or []) <= 4
True

method get_context_card_async (非同期)

スレッドのコンテキスト・カード・オブジェクトを非同期で返します。

例

import asyncio
card = asyncio.run(thread.get_context_card_async(
    min_relevant_results_by_type={"preference": 1, "guideline": 1},
))
len(card.relevant_results or []) <= 5
True

メソッド get_message

このスレッドが所有するメッセージを1つ返します。

イメージ・パーツは、デフォルトでその識別子と説明とともに返されます。included_image_idsを渡して、選択したイメージ・パートのバイトをロードします。関連のない識別子は無視されます。

method get_message_async (非同期)

スレッド所有のメッセージを非同期で返します。

included_image_idsはオプションで、バイトをロードする必要があるアタッチされたイメージ・パートを選択します。省略するか、Noneはイメージ・メタデータのみを返します。

メソッド get_messages

このスレッドの格納されたメッセージを返します。

例

len(thread.add_messages([{"role": "user", "content": "Stored message example"}]))
1
messages = thread.get_messages()
messages[-1].content
'Stored message example'

method get_messages_async (非同期)

add_messagesで非同期的に追加された未処理のメッセージをスレッドから取得します。

例

import asyncio
message_ids = asyncio.run(thread.add_messages_async(
    [{"role": "user", "content": "Stored message example"}]
))
len(message_ids)
1
messages = asyncio.run(thread.get_messages_async())
messages[-1].content
'Stored message example'

メソッド get_summary

スレッドのサマリーを返します。

全体スレッド・リクエストは、永続サマリーを再利用またはリフレッシュします。except_lastを使用したリクエストは、永続スレッド・サマリーを変更せずにその接頭辞を要約します。

LLMがバックアップした実装でリモート・ネットワークI/Oを実行できる場合は、get_summary_asyncを優先します。

例

len(thread.add_messages([{"role": "assistant", "content": "Summary source message"}]))
1
summary = thread.get_summary()
bool(summary.content)
True

method get_summary_async (非同期)

スレッドのサマリーを非同期で返します。

全体スレッド・リクエストは、永続サマリーを再利用またはリフレッシュします。except_lastを使用したリクエストは、永続スレッド・サマリーを変更せずにその接頭辞を要約します。

このスレッドが所有する2つのレコード間の有向リレーションを作成します。

現在、両方のエンドポイントはメモリーに似たレコード("memory"、"fact"、"guideline"または"preference")である必要があります。組込みのリレーション型は、"supersedes" ("is_superseded_by")、"contradicts"、"refines" ("is_refined_by")、"supports" ("is_supported_by")および"duplicates"です。"contradicts"と"duplicates"は、同じラベルを逆に使用します。

両方のエンドポイントは、この正確なスレッドに属している必要があります。1つのエンドポイント・ペアに対して格納できる方向は1つのみです。opposite_relation_typeは、ターゲットからソースへのトラバース時にリレーションに名前を付けます。たとえば、new "supersedes" oldはその方向でold "is_superseded_by" newになります。

例

thread.link_records(
    "fact-1", "fact", "memory-1", "memory", "supports"
)
'relation-id'

このスレッドが所有するレコード間のリレーションを非同期的に作成します。

現在、両方のエンドポイントはメモリーに似たレコード("memory"、"fact"、"guideline"または"preference")である必要があります。組込みのリレーション型は、"supersedes" ("is_superseded_by")、"contradicts"、"refines" ("is_refined_by")、"supports" ("is_supported_by")および"duplicates"です。"contradicts"と"duplicates"は、同じラベルを逆に使用します。

メソッド list_images

このスレッドが所有するイメージ・レコードをリストします。

返されるレコードには、デフォルトでイメージ・メタデータが含まれます。RAWバイトは、include_bytes=Trueおよびimage_idが指定されている場合にのみロードされます。

method list_images_async (非同期)

このスレッドが所有するイメージ・レコードを非同期的にリストします。

返されるレコードには、デフォルトでイメージ・メタデータが含まれます。RAWバイトは、include_bytes=Trueおよびimage_idが指定されている場合にのみロードされます。このスレッドのスコープは自動的に適用されます。

クエリーに関連するレコードを同期的に検索します。

ノート

省略されたスコープ・フィールドは、このスレッドのデフォルトの検索スコープ(正確なユーザーおよびエージェントの一致に加えて、このスレッドの現在のuser_id、agent_idおよびthread_id)を継承します。デフォルトのスレッド検索は意図的にexact_thread_match=Falseを残すため、同じユーザー/エージェントの他のスレッドから関連レコードを返す場合があります。exact_thread_match=Trueを渡して、結果を現在のスレッドに制限します。明示的なNoneスコープ値は、解決された完全一致ルールに従います。exact_*_match=Falseはそのディメンションを制約なしのままにし、exact_*_match=Trueは格納されたNone値にのみ一致します。

明示的なmax_results値は、少なくとも1である必要があります。引数を省略すると、デフォルト値の10が使用されます。これは上限です。フィルタが制限しすぎる場合、一致するレコードの数が少ない場合、または実装固有の検索動作のため、コールはmax_resultsの結果より少ない場合があります。

method search_async (非同期)

クエリーに関連するレコードを非同期で検索します。

ノート

省略されたスコープ・フィールドは、このスレッドのデフォルトの検索スコープ(正確なユーザーおよびエージェントの一致に加えて、このスレッドの現在のuser_id、agent_idおよびthread_id)を継承します。デフォルトのスレッド検索は意図的にexact_thread_match=Falseを残すため、同じユーザー/エージェントの他のスレッドから関連レコードを返す場合があります。exact_thread_match=Trueを渡して、結果を現在のスレッドに制限します。明示的なNoneスコープ値は、解決された完全一致ルールに従います。exact_*_match=Falseはそのディメンションを制約なしのままにし、exact_*_match=Trueは格納されたNone値にのみ一致します。

明示的なmax_results値は、少なくとも1である必要があります。引数を省略すると、デフォルト値の10が使用されます。これは上限です。フィルタが制限しすぎる場合、一致するレコードの数が少ない場合、または実装固有の検索動作のため、コールはmax_resultsの結果より少ない場合があります。

メソッド update_image

このスレッドが所有する1つのイメージを更新します。

既存のバイトを保持するには、imageを省略します。imageを指定する場合は、mime_typeを指定する必要があります。既存の説明を保持するには、descriptionを省略します。Noneを渡して、構成されたLLMで新しい説明を生成します。nullでない説明によって、その説明が直接置き換えられます。メッセージに添付されたイメージの有効期限は、update_message()を使用して変更する必要があります。

method update_image_async (非同期)

このスレッドが所有する1つのイメージを非同期に更新します。

既存のバイトを保持するには、imageを省略します。imageを指定する場合は、mime_typeを指定する必要があります。既存の説明を保持するには、descriptionを省略します。Noneを渡して、構成されたLLMで新しい説明を生成します。nullでない説明によって、その説明が直接置き換えられます。メタデータ、タイムスタンプおよび有効期限の設定は、指定すると更新されます。メッセージに添付されたイメージの有効期限は、update_message_async()を使用して変更する必要があります。

メソッド update_memory

この正確なスレッドが所有するメモリーに似たレコードを更新します。

method update_memory_async (非同期)

この正確なスレッドが所有するメモリーに似たレコードを非同期的に更新します。

例

import asyncio
memory_id = asyncio.run(thread.add_memory_async("Original memory"))
(
    asyncio.run(thread.update_memory_async(
        memory_id, content="Updated memory"
    ))
    == memory_id
)
True

メソッド update_message

この正確なスレッドが所有するRAWメッセージ・レコードを更新します。

ノート

省略されたフィールドは、格納されたレコードから保持されます。格納されたロールとタイムスタンプは変更されません。コンテンツを編集するとRAWメッセージ履歴が更新され、自動抽出が有効な場合、SDKが編集されたメッセージおよび以前の履歴からメモリーを再抽出する可能性があります。INLINEモードでは、このメソッドが返される前に抽出が完了します。BACKGROUNDモードでは、このメソッドはRAWメッセージ更新が成功し、バックグラウンド抽出が試行された後に戻ります。このフォローアップ作業は、後のadd_messages()コールで使用される通常の抽出頻度には影響しません。既存の抽出済メモリーは、編集済コンテンツから新しく抽出されたメモリーを追加できる間、そのまま残ります。RAWメッセージ更新および後で抽出されたメモリー書込みは原子的に発生しないため、バックグラウンド処理がキューに入らない場合、構成されたキュー容量待機がタイムアウトに達した場合、または後で抽出処理が失敗した場合でも、抽出されたメモリーは以前のメッセージ内容を反映できます。また、既存の抽出済メモリーは、ソース・メッセージのTTLが変更されたときに元の有効期限を保持することに注意してください。

例

message_id = thread.add_messages([{"role": "user", "content": "Draft message"}])[0]
thread.update_message(message_id, content="Edited message") == message_id
True

method update_message_async (非同期)

この正確なスレッドが所有するRAWメッセージ・レコードを非同期的に更新します。

ノート

省略されたフィールドは、格納されたレコードから保持されます。格納されたロールとタイムスタンプは変更されません。コンテンツを編集するとRAWメッセージ履歴が更新され、自動抽出が有効な場合、SDKが編集されたメッセージおよび以前の履歴からメモリーを再抽出する可能性があります。INLINEモードでは、このメソッドが返される前に抽出が完了します。BACKGROUNDモードでは、このメソッドはRAWメッセージ更新が成功し、バックグラウンド抽出が試行された後に戻ります。このフォローアップ作業は、後のadd_messages()コールで使用される通常の抽出頻度には影響しません。既存の抽出済メモリーは、編集済コンテンツから新しく抽出されたメモリーを追加できる間、そのまま残ります。RAWメッセージ更新および後で抽出されたメモリー書込みは原子的に発生しないため、バックグラウンド処理がキューに入らない場合、構成されたキュー容量待機がタイムアウトに達した場合、または後で抽出処理が失敗した場合でも、抽出されたメモリーは以前のメッセージ内容を反映できます。また、既存の抽出済メモリーは、ソース・メッセージのTTLが変更されたときに元の有効期限を保持することに注意してください。

例

import asyncio
message_ids = asyncio.run(thread.add_messages_async(
    [{"role": "user", "content": "Draft message"}]
))
(
    asyncio.run(thread.update_message_async(
        message_ids[0], content="Edited message"
    ))
    == message_ids[0]
)
True

エンドポイントがこのスレッドによって所有されているリレーションを更新します。

省略された値は保持されます。relation_typeが組込みメモリー・リレーション型に変更されると、その固定逆ラベルがopposite_relation_typeに置換されます。

例

thread.update_record_link("relation-id", relation_type="supports")
1

エンドポイントがこのスレッドに属しているリレーションを非同期的に更新します。

メソッド wait_for_memory_extraction

このスレッドの以前のバックグラウンドメモリー抽出を待ちます。

このメソッドは、同じエージェント・メモリー・コンポーネントを介して、以前のadd_messages()、add_messages_async()、update_message()またはupdate_message_async()コールによって開始されたバックグラウンド抽出を待機します。これらのコールのいずれかがすでに終了している場合、このメソッドには、待機前に開始する抽出が含まれます。

このメソッドは、この待機の開始後、別のエージェント・メモリー・コンポーネントによって開始された抽出、または別のプロセスで実行されている抽出の開始を待機しません。この待機の終了時に抽出の失敗がカウントされます。

例

thread.wait_for_memory_extraction(timeout=10)

method wait_for_memory_extraction_async (非同期)

以前のバックグラウンド・メモリー抽出を非同期に待機します。

このメソッドは、wait_for_memory_extraction()と同じ動作に従います。

例

import asyncio
asyncio.run(thread.wait_for_memory_extraction_async(timeout=10))

ノート: delete_message()は、RAWメッセージ行のみを削除します。導出された記憶は引き続き検索可能であるか、コンテキスト・カードに表示されます。OracleAgentMemory.delete_thread()を使用して、スレッドを関連するメッセージおよびメモリーとともに削除します。スレッドハンドルによるメッセージおよびメモリーの削除は、接続されたクライアントがそのスレッドに対してすでに受け付けられている以前のバックグラウンド抽出を待機します。これは、他のクライアント・インスタンス、プロセス、または待機開始後に受け入れられた作業に対するグローバルな同時実行性の障壁ではありません。

メッセージとメッセージの内容

クラス oracleagentmemory.apis.message.Message

ベース: object

スレッドおよびLLMアダプタで共有されるインメモリー・メッセージ。

クラス oracleagentmemory.apis.message.MessageContent

ベース: ABC

構造化メッセージ・コンテンツのベース・クラス。

クラス oracleagentmemory.apis.message.TextContent

ベース: MessageContent

マルチモーダル・メッセージのテキスト部分。

クラス oracleagentmemory.apis.message.ImageContent

ベース: MessageContent

マルチモーダル・メッセージのイメージ部分。

クラス oracleagentmemory.apis.message.ImageMimeType

ベース: str、Enum

イメージ・コンテンツでサポートされるMIMEタイプ。

アニメーション形式PNGとWebPはサポートされていません。

JPEG = 'image/JPEG'

PNG = 'image/PNG'

WEBP = 'image/WEBP'

コンテキスト・カード

クラス oracleagentmemory.apis.contextcard.ContextCard

ベース: ABC

スレッドAPIによって返される抽象コンテキスト・カード・オブジェクト。

property content (抽象)

クラス oracleagentmemory.core.contextcard.OracleContextCard

ベース: ContextCard

Oracleスレッドによって返されたコンテキスト・カード。

プロパティ content

例

card = OracleContextCard(summary="ctx")
"<summary>" in card.content and "ctx" in card.content
True

property formatted_content

例

OracleContextCard(summary="").formatted_content
''
card = OracleContextCard(summary="ctx", topics=["travel"])
"<topics>" in card.formatted_content
True

サマリー

クラス oracleagentmemory.apis.summary.Summary

ベース: ABC

スレッドAPIによって返される抽象スレッド・サマリー・オブジェクト。

property content (抽象)

クラス oracleagentmemory.core.summary.OracleSummary

ベース: Summary

Oracleスレッドによって返されるサマリー。

例

summary = OracleSummary(content="Plan the Rome itinerary.")
summary.content
'Plan the Rome itinerary.'
str(summary)
'Plan the Rome itinerary.'

プロパティ content

例

OracleSummary(content="Keep the tea preference in mind.").content
'Keep the tea preference in mind.'

property formatted_content

例

OracleSummary(content="Thread recap").formatted_content
'Thread recap'