執行緒

此頁面顯示具體 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

保留與此執行緒相關聯的影像。

description 會儲存為影像的可搜尋文字。省略此文字或 None 時,附加的 LLM 會產生標題。省略的範圍值會繼承此繫線的對應使用者、代理程式及繫線 ID。

方法 add_image_async (非同步)

以非同步方式保留一個與此執行緒關聯的影像。

description 會儲存為影像的可搜尋文字。省略此文字或 None 時,附加的 LLM 會產生標題。省略的範圍值會繼承此繫線的對應使用者、代理程式及繫線 ID。

方法 add_memory

新增手動記憶體項目並為其編製索引。

範例

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

方法 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

新增訊息到討論串並建立它們索引。

在背景擷取模式中,此方法會在原始訊息插入後傳回,並在背景嘗試到期背景擷取。

原始訊息會在任一模式中都儲存下來自動解壓縮。如果稍後擷取或衍生記憶體儲存失敗,當可能遺漏衍生的記憶體或摘要更新時,原始訊息會維持儲存狀態。

備註

在 MemoryExtractionMode.BACKGROUND 中,原始訊息會在儲存擷取的記憶體之前保留。如果背景擷取沒有佇列,或者如果設定的佇列容量等待達到其逾時,則插入的原始訊息會維持儲存狀態,且呼叫會繼續而沒有擷取的記憶體,或發出 TimeoutError (視 background_extraction_queue_full_behavior 而定)。

範例

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

方法 add_messages_async (非同步)

非同步地新增信件到串列中,並為其建立索引。

在背景擷取模式中,此方法會在原始訊息插入後傳回,並在背景嘗試到期背景擷取。

原始訊息會在任一模式中都儲存下來自動解壓縮。如果稍後擷取或衍生記憶體儲存失敗,當可能遺漏衍生的記憶體或摘要更新時,原始訊息會維持儲存狀態。

在 MemoryExtractionMode.BACKGROUND 中,原始訊息會在儲存擷取的記憶體之前保留。如果背景擷取沒有佇列,或者如果設定的佇列容量等待達到其逾時,則插入的原始訊息會維持儲存狀態,且呼叫會繼續而沒有擷取的記憶體,或發出 TimeoutError (視 background_extraction_queue_full_behavior 而定)。

方法 delete_image

刪除此執行緒擁有的一個影像。

方法 delete_image_async (非同步)

以非同步方式刪除此執行緒所擁有的影像。

方法 delete_memory

依 ID 從這個完全相同的繫線刪除類似記憶體的記錄 (例如記憶體、事實、偏好設定或準則)。

備註

刪除記錄之前,此方法會等候先前透過附加的代理程式記憶體元件接受此執行緒的背景擷取。它不會等待等待開始後的工作,或是其他元件或處理程序開始的工作。

範例

thread.delete_memory("456")
0

方法 delete_memory_async (非同步)

以非同步方式從這個精確執行緒中刪除類似記憶體的記錄 (例如記憶體、事實、偏好設定或準則)。

備註

此方法遵循 delete_memory() 所記錄的背景擷取等待與並行行為。

範例

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

方法 delete_message

依識別碼從此精確執行緒刪除訊息記錄。

備註

刪除訊息之前,此方法會等候先前透過附加的代理程式記憶體元件接受此繫線的背景擷取。它不會等待等待開始後的工作,或是其他元件或處理程序開始的工作。

刪除訊息只會移除原始訊息記錄。衍生的記憶體並不會被刪除,因為我們尚未追蹤哪個擷取的記憶體來自哪個訊息,所以它們仍然可以搜尋或仍會影響相關資訊環境卡輸出。使用 OracleAgentMemory.delete_thread() 可將繫線與其相關的訊息和記憶體一起刪除。

範例

thread.delete_message("123")
0

方法 delete_message_async (非同步)

以非同步方式從這個精確執行緒中刪除訊息記錄。

備註

此方法遵循 delete_message() 所記錄的背景擷取等待與並行行為。

刪除訊息只會移除原始訊息記錄。衍生的記憶體並不會被刪除,因為我們尚未追蹤哪個擷取的記憶體來自哪個訊息,所以它們仍然可以搜尋或仍會影響相關資訊環境卡輸出。使用 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

方法 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

傳回此執行緒擁有的一則訊息。

依預設,會傳回影像部分的 ID 和描述。傳送 included_image_ids 以載入所選影像部分的位元組。不相關的識別碼會被忽略。

方法 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'

方法 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

方法 get_summary_async (非同步)

非同步傳回執行緒摘要。

整個執行緒要求會重複使用或重新整理持久性摘要。具有 except_last 的要求會彙總該字首,而不變更持久性完整執行緒摘要。

建立此執行緒所擁有之兩筆記錄之間的導向關係。

目前這兩個端點都必須類似記憶體的記錄:"memory"、"fact"、"guideline" 或 "preference"。內建關係類型包括 "supersedes" ("is_superseded_by")、"contradicts"、"refines" ("is_refined_by")、"supports" ("is_supported_by") 以及 "duplicates"。"contradicts" 和 "duplicates" 會反向使用相同的標籤。

兩個端點都必須屬於此精確繫線。一個端點組只能儲存一個方向。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

列出此執行緒擁有的影像記錄。

傳回的記錄預設包含影像描述資料。只有在提供 include_bytes=True 和 image_id 時,才會載入原始位元組。

方法 list_images_async (非同步)

以非同步方式列出此執行緒所擁有的影像記錄。

傳回的記錄預設包含影像描述資料。只有在提供 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。

方法 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

更新此執行緒擁有的一個影像。

省略 image 以保留現有的位元組。如果提供 image,則必須隨其提供 mime_type。省略 description 以保留現有的描述。傳送 None 以使用設定的 LLM 產生新的描述;非空值描述會直接取代它。附加至訊息之影像的到期時間必須透過 update_message() 變更。

方法 update_image_async (非同步)

以非同步方式更新此執行緒所擁有的影像。

省略 image 以保留現有的位元組。如果提供 image,則必須隨其提供 mime_type。省略 description 以保留現有的描述。傳送 None 以使用設定的 LLM 產生新的描述;非空值描述會直接取代它。提供時會更新描述資料、時戳和到期設定值。附加至訊息之影像的到期時間必須透過 update_message_async() 變更。

方法 update_memory

更新此確切執行緒所擁有的類似記憶體記錄。

方法 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

更新此確切執行緒所擁有的原始訊息記錄。

備註

省略的欄位會從儲存的記錄中保留。儲存的角色和時戳維持不變。編輯內容會更新原始訊息歷史記錄,若啟用自動擷取功能,可能會讓 SDK 從已編輯訊息和較早的歷史記錄中重新擷取記憶體。在 INLINE 模式中,擷取會在此方法傳回之前完成。在 BACKGROUND 模式中,此方法會在原始訊息更新成功且嘗試背景擷取之後傳回。此後續追蹤工作不會影響後續 add_messages() 呼叫所使用的一般擷取頻率。新增從編輯內容擷取的記憶時,現有擷取的記憶會保留在原位。因為原始訊息更新和之後擷取的任何記憶體寫入都不會異常地發生,所以如果背景工作未排入佇列、設定的佇列容量等待達到其逾時,或稍後擷取工作失敗,則擷取的記憶體仍可反映先前的訊息內容。另請注意,當來源訊息的 TTL 變更時,現有擷取的記憶體會保留其原始到期時間。

範例

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

方法 update_message_async (非同步)

以非同步方式更新此確切執行緒所擁有的原始訊息記錄。

備註

省略的欄位會從儲存的記錄中保留。儲存的角色和時戳維持不變。編輯內容會更新原始訊息歷史記錄,若啟用自動擷取功能,可能會讓 SDK 從已編輯訊息和較早的歷史記錄中重新擷取記憶體。在 INLINE 模式中,擷取會在此方法傳回之前完成。在 BACKGROUND 模式中,此方法會在原始訊息更新成功且嘗試背景擷取之後傳回。此後續追蹤工作不會影響後續 add_messages() 呼叫所使用的一般擷取頻率。新增從編輯內容擷取的記憶時,現有擷取的記憶會保留在原位。因為原始訊息更新和之後擷取的任何記憶體寫入都不會異常地發生,所以如果背景工作未排入佇列、設定的佇列容量等待達到其逾時,或稍後擷取工作失敗,則擷取的記憶體仍可反映先前的訊息內容。另請注意,當來源訊息的 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)

方法 wait_for_memory_extraction_async (非同步)

非同步等待更早的背景記憶體擷取。

此方法遵循與 wait_for_memory_extraction() 相同的行為。

範例

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

注意:delete_message() 只會刪除原始訊息資料列。衍生的記憶卡仍可搜尋或出現在內容卡中。使用 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

特性 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.'

特性 formatted_content

範例

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