스레드

이 페이지에서는 개발자용 메시지 도우미 유형과 함께 구체적인 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이 캡션을 생성합니다. 생략된 범위 값은 이 스레드의 해당 사용자, 에이전트 및 스레드 식별자를 상속합니다.

method add_image_async(비동기)

이 스레드와 연관된 하나의 이미지를 비동기적으로 유지합니다.

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

스레드에 메시지를 추가하고 색인화합니다.

백그라운드 추출 모드에서 이 메소드는 원시 메시지가 삽입되고 백그라운드에서 백그라운드 추출을 시도한 후에 반환됩니다.

원시 메시지는 두 모드 중 하나에서 자동 추출되기 전에 저장됩니다. 추후 추출 또는 파생 메모리 저장이 실패할 경우 원시 메시지는 저장된 상태로 유지되지만 파생된 메모리 또는 요약 업데이트가 누락될 수 있습니다.

노트

MemoryExtractionMode.BACKGROUND에서는 추출된 메모리가 저장되기 전에 원시 메시지가 지속됩니다. 백그라운드 추출이 대기열에 추가되지 않거나 구성된 대기열 용량 대기가 시간 초과에 도달하면 삽입된 원시 메시지는 저장된 상태로 유지되며 추출된 메모리 없이 호출이 계속되거나 background_extraction_queue_full_behavior에 따라 TimeoutError가 발생합니다.

예제

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

method add_messages_async(비동기)

메시지를 스레드에 비동기적으로 추가하고 인덱스화합니다.

백그라운드 추출 모드에서 이 메소드는 원시 메시지가 삽입되고 백그라운드에서 백그라운드 추출을 시도한 후에 반환됩니다.

원시 메시지는 두 모드 중 하나에서 자동 추출되기 전에 저장됩니다. 추후 추출 또는 파생 메모리 저장이 실패할 경우 원시 메시지는 저장된 상태로 유지되지만 파생된 메모리 또는 요약 업데이트가 누락될 수 있습니다.

MemoryExtractionMode.BACKGROUND에서는 추출된 메모리가 저장되기 전에 원시 메시지가 지속됩니다. 백그라운드 추출이 대기열에 추가되지 않거나 구성된 대기열 용량 대기가 시간 초과에 도달하면 삽입된 원시 메시지는 저장된 상태로 유지되며 추출된 메모리 없이 호출이 계속되거나 background_extraction_queue_full_behavior에 따라 TimeoutError가 발생합니다.

방법 delete_image

이 스레드가 소유한 하나의 이미지를 삭제합니다.

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

식별자별로 정확한 이 스레드에서 메시지 레코드를 삭제합니다.

노트

메시지를 삭제하기 전에 이 메소드는 연결된 에이전트 메모리 구성 요소를 통해 이 스레드에 대해 수락된 이전 백그라운드 추출을 기다립니다. 대기가 시작된 후 또는 다른 구성 요소나 프로세스가 작업을 시작한 후 수락된 작업을 기다리지 않습니다.

메시지를 삭제하면 원시 메시지 레코드만 제거됩니다. 파생된 메모리는 추출된 메모리를 어떤 메시지에서 가져온지 아직 추적하지 않으므로 삭제되지 않으므로 검색 가능한 상태로 유지되거나 컨텍스트 카드 출력에 여전히 영향을 줄 수 있습니다. OracleAgentMemory.delete_thread()를 사용하여 연관된 메시지 및 메모리와 함께 스레드를 삭제합니다.

예제

thread.delete_message("123")
0

method 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

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

이 글타래가 소유하는 메시지 한 개를 반환합니다.

이미지 부분은 기본적으로 식별자 및 설명과 함께 반환됩니다. 선택한 이미지 부분에 대한 바이트를 로드하려면 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가 포함된 요청은 내구성이 뛰어난 전체 스레드 요약을 변경하지 않고 해당 접두어를 요약합니다.

이 스레드가 소유한 두 레코드 간에 지시된 관계를 생성합니다.

현재 두 끝점은 메모리와 유사한 레코드("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가 제공된 경우에만 로드됩니다.

method 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개 미만의 결과를 반환할 수 있습니다.

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

이 스레드가 소유한 이미지를 업데이트합니다.

기존 바이트를 보존하려면 image를 생략합니다. image가 제공된 경우 mime_type를 제공해야 합니다. 기존 설명을 보존하려면 description를 생략합니다. None을 전달하여 구성된 LLM으로 새 설명을 생성합니다. 널이 아닌 설명이 직접 대체됩니다. 메시지에 첨부된 이미지의 만료는 update_message()를 통해 변경해야 합니다.

method update_image_async(비동기)

이 스레드가 소유한 하나의 이미지를 비동기적으로 업데이트합니다.

기존 바이트를 보존하려면 image를 생략합니다. image가 제공된 경우 mime_type를 제공해야 합니다. 기존 설명을 보존하려면 description를 생략합니다. None을 전달하여 구성된 LLM으로 새 설명을 생성합니다. 널이 아닌 설명이 직접 대체됩니다. 메타데이터, 시간 기록 및 만료 설정은 제공될 때 업데이트됩니다. 메시지에 첨부된 이미지의 만료는 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

이 정확한 스레드가 소유한 원시 메시지 레코드를 업데이트합니다.

노트

생략된 필드는 저장된 레코드에서 보존됩니다. 저장된 역할 및 시간 기록은 변경되지 않습니다. 콘텐츠를 편집하면 원시 메시지 기록이 업데이트되고, 자동 추출이 사용으로 설정된 경우 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

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

method 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()를 사용하여 연관된 메시지 및 메모리와 함께 스레드를 삭제합니다. 스레드 핸들을 통한 메시지 및 메모리 삭제는 연결된 클라이언트가 해당 스레드에 대해 이미 수락한 이전 백그라운드 추출을 기다립니다. 이는 다른 클라이언트 Instance, 프로세스 또는 대기 시작 후 수락된 작업에 대한 Global 동시성 장벽이 아닙니다.

메시지 및 메시지 내용

클래스 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에서 반환된 추상 컨텍스트 카드 객체입니다.

등록 정보 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에서 반환된 추상 스레드 요약 객체입니다.

등록 정보 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'