繫線數目

此頁面顯示具體 Oracle 執行緒處理與開發人員專用訊息協助程式類型。

Oracle 執行緒

類別 oracleagentmemory.core.OracleThread

基本:IThread

由 Oracle 商店支援的執行緒。

此實作會內嵌並儲存執行緒訊息與手動新增的記憶,然後支援所有儲存記錄的相似性搜尋。

注意事項

建立新 OracleThread 執行處理。

範例

from oracleagentmemory.core import OracleAgentMemory
import oracledb
db_pool = oracledb.SessionPool(
    user="YOUR DB USER",
    password="YOUR DB PASSWORD",
    dsn="YOUR DB CONNECT STRING",
)
client = OracleAgentMemory(connection=db_pool, embedder=embedder)
thread = client.create_thread(
    thread_id="c1",
    llm=llm,
    memory_extraction_config=MemoryExtractionConfig(enable_context_summary=True),
)
len(thread.add_messages([{"role": "user", "content": "I love pizza."}]))
1

方法 add_memory

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

範例

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

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

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

範例

thread.delete_memory("456")
0

方法 delete_message

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

注意事項

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

範例

thread.delete_message("123")
0

方法 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 (非同步)

非同步傳回執行緒的環境定義卡物件。

範例

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

方法 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 (非同步)

以非同步方式傳回原始執行緒訊息。

方法 get_summary

傳回執行緒的最佳投入力摘要。

在 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 (非同步)

非同步傳回執行緒的最佳投入力摘要。

同步搜尋與查詢相關的記錄。

注意事項

省略的範圍欄位會繼承此繫線的預設搜尋範圍:完全符合的使用者和代理程式,加上此繫線的目前 user_idagent_idthread_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_idagent_idthread_id。預設執行緒會故意留下 exact_thread_match=False,因此可能會從相同使用者 / 代理程式的其他執行緒傳回相關記錄。傳送 exact_thread_match=True 以將結果限制為目前的繫線。明確的 None 範圍值仍然遵循解析的完全相符規則:exact_*_match=False 會讓該維度維持不限制,而 exact_*_match=True 則只比對儲存的 None 值。

明確的 max_results 值必須至少為 1;省略引數會使用預設值 10。此為上限:當篩選條件的限制性太大、相符的記錄較少或因為實作特定的搜尋行為而導致呼叫傳回的結果可能少於 max_results

方法 update_memory

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

方法 update_memory_async (非同步)

以非同步方式更新類似記憶體的記錄。

範例

from functools import partial
from oracleagentmemory._async_helpers import run_async_in_sync
memory_id = thread.add_memory("Original memory")
run_async_in_sync(
    partial(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 變更時,現有擷取的記憶體會保留其原始到期時間。

範例

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

方法 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() 相同的行為。

範例

await thread.wait_for_memory_extraction_async(timeout=10)

注意:delete_message() 只會刪除原始訊息資料列。衍生的記憶卡仍可搜尋或出現在內容卡中。使用 OracleAgentMemory.delete_thread() 可將繫線與其相關的訊息和記憶體一起刪除。從屬端層次繫線刪除會等待該繫線已知的較早接受背景擷取,但該繫線在刪除進行時,並不是相同繫線上其他作業的全域並行屏障。

訊息

類別 oracleagentmemory.apis.thread.Message

基礎:object

內容卡

類別 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'