상점 및 스키마
이 페이지에서는 Oracle Agent 메모리 SDK에서 사용되는 코어 저장소 추상화 및 스키마 콘트롤을 제공합니다.
API 저장
스토어 쓰기 의미
저장소 쓰기는 애플리케이션이 저장하는 텍스트와 저장소가 검색에 사용하는 페이로드 간에 명확한 구분을 유지합니다. 대부분의 애플리케이션은 메모리 레벨 및 스레드 레벨 API를 사용할 수 있으며 저장소가 벡터, 키워드 또는 하이브리드 검색에 필요한 검색 행을 준비하도록 합니다. 하위 레벨 저장소 API는 검색에 사용해야 하는 텍스트 또는 벡터를 이미 알고 있는 고급 통합을 위해 index_texts, index_text, embeddings 및 embedding를 노출합니다.
각 글은 두 가지 관련 조각으로 생각하십시오 :
update()의add()및text에 있는contents는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 |
이 목록은 호출자 소유 청크로 처리됩니다. 비어 있지 않은 각 문자열은 하나의 검색 행으로 기록되며 저장소는 다시 조각화하지 않습니다. | 이 목록은 호출자 소유 청크로 처리됩니다. 비어 있지 않은 각 문자열은 하나의 검색 행으로 기록되며 저장소는 다시 조각화하지 않습니다. |
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가 모두 생략된 경우 기존 검색 행에서 벡터가 지워집니다.
벡터 모양은 호출자가 차지하는 조각 소유권의 양을 저장소에 알려줍니다.
- 하나의 벡터는 전체 검색 텍스트에 대해 하나의 벡터를 의미합니다. 저장소는 명시적 벡터에 대해 해당 텍스트를 분할하지 않습니다. 해당 검색 텍스트가 비어 있으면 동행 조각 텍스트 없이 벡터를 저장할 수 있습니다.
- 다중 벡터는 호출자 소유 청크당 하나의 벡터를 의미합니다. 일치하는
index_texts또는index_text조각 목록을 제공하거나 레코드의 기존 검색 텍스트 행을 재사용하는 포함 전용update()를 사용하십시오. - 벡터 개수는 조각 개수와 일치해야 하며, 하나의
add()호출에 있는 모든 명시적 벡터는 동일한 차원을 가져야 합니다. - 레코드당 빈 벡터 페이로드는 정렬할 검색 텍스트 행이 없는 경우에만 허용됩니다.
일부 조합이 거부되어 저장된 텍스트, 검색 텍스트 및 벡터가 분리되지 않습니다. text=None를 전달하면 저장된 텍스트 및 검색 행이 지워지므로 널이 아닌 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]– 의미 인덱싱에만 사용되는 선택적 대체 페이로드입니다. 제공된 경우 외부 목록은 텍스트 입력과 정렬되어야 합니다. 각 항목은 저장소가 내부적으로 청크할 수 있는 문자열이거나 저장소가 호출자 소유 청크로 취급하며 다시 분할하지 않아야 하는 비어 있지 않은 문자열 목록일 수 있습니다. - embeddings
list[list[float] | ndarray | list[list[float] | ndarray]]– 텍스트 입력과 정렬된 사전 계산된 내장 벡터(선택 사항)입니다. 각 레코드 항목은 하나의 임베딩 벡터 또는 해당 레코드에 대한 청크 임베딩 벡터 목록일 수 있습니다. 제공된 경우 저장소는 임베더를 호출하는 대신 직접 이러한 벡터를 사용해야 합니다. 한 레코드에 대한 여러 벡터에는 일치하는index_texts조각 목록이 필요하므로 텍스트 및 벡터 조각 경계가 명시적입니다. 제공하지 않을 경우 저장소는 일반적으로 구성된 내장자로부터 의미 상태를 도출하지만 구현별 텍스트 인식 인덱스화 모드에서는 텍스트 전용 쓰기를 허용할 수도 있습니다. - 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]– 삽입된 레코드와 연관된 선택적 에이전트 식별자입니다. 스칼라 값은 정렬된 텍스트 입력을 통해 브로드캐스트될 수 있습니다. - 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]– 만료를 지원하는 레코드의 선택적 TTL 기간(일)입니다. 저장소 기본값을 사용하려면 이 인수를 생략합니다. 만료되지 않아야 하는 레코드의 경우None를 전달합니다. 스칼라 값은 정렬된 텍스트 입력을 통해 브로드캐스트될 수 있습니다. - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor]– 선택적 TTL(Time-to-Live) 앵커 저장된 생성 시간을 기준으로 만료하려면TimeToLiveAnchor.CREATED_AT를 사용하고, 각 레코드의 이벤트 시간기록을 기준으로 만료하려면TimeToLiveAnchor.TIMESTAMP를 사용합니다. 생략할 경우 구현에서TimeToLiveAnchor.CREATED_AT를 사용합니다. - **store_kwargs(임의) – 구체적 저장소로 전달된 구현별 쓰기 옵션입니다.
- contents
- 반환 유형: list[str]
주
호출자에 이미 하나 이상의 PendingRecordBatch 객체가 있는 경우 add_batches()를 사용합니다.
- 반환: 입력과 동일한 논리적 순서로 삽입된 레코드의 식별자입니다.
- 반품 유형: 목록[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(임의) – 구체적 저장소로 전달된 구현별 쓰기 옵션입니다.
- batches(일괄 처리)
- 반환: 입력 배치 및 행과 동일한 논리적 순서로 삽입된 레코드의 식별자입니다.
- 반품 유형: 목록[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(개요)
식별자로 저장된 레코드 하나를 삭제합니다.
- 매개변수:
- record_type
str– 제거할 레코드의 논리적 유형입니다. - record_id
str– 제거할 레코드의 식별자입니다. - cascade
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(개요)
하나의 레코드 유형에 대해 저장된 레코드를 나열합니다.
- 매개변수:
- 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"는 나열된 값이 하나 이상 있어야 함을 의미합니다."$not"를 사용하여 연산자 딕셔너리 또는 원시 정확한 일치 값을 포함하여 동일한 필드에서 다른 필드 레벨 표현식을 부정합니다. 누락된 필드를 포함하여 양수 표현식이 실패할 때 음수 표현식이 일치합니다. 음수 배열 멤버쉽도 배열이 아닌 필드와 일치합니다. 예를 들어 스칼라 필드의 경우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
- 반품: 반환된 창 내에서 가장 오래된 항목부터 최신 항목 순으로 정렬된 레코드입니다.
- 반품 유형: 목록[레코드]
method list_thread_messages(개요)
한 스레드에 대해 저장된 메시지 내역을 나열합니다.
- 매개변수:
- thread_id
str– 메시지를 반환해야 하는 스레드의 식별자입니다. - last_n
int | None– 포함할 최신 메시지 수(선택 사항)입니다. 생략하면 스레드에 대해 저장된 모든 메시지가 반환됩니다.
- thread_id
- 반환: 반환된 창 내에서 가장 오래된 항목부터 최신 항목 순으로 정렬된 메시지 레코드입니다.
- 반환 유형: 목록[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"는 나열된 값이 하나 이상 있어야 함을 의미합니다."$not"를 사용하여 연산자 딕셔너리 또는 원시 정확한 일치 값을 포함하여 동일한 필드에서 다른 필드 레벨 표현식을 부정합니다. 누락된 필드를 포함하여 양수 표현식이 실패할 때 음수 표현식이 일치합니다. 음수 배열 멤버쉽도 배열이 아닌 필드와 일치합니다.
- query
- 반환: 거리 증가에 따라 정렬된
(record, distance)쌍입니다. 목록에는k개 미만의 항목이 포함될 수 있습니다. - 반환 유형: list[tuple[Record, float]]
- 라이즈: 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)쌍입니다. - 반환 유형: 목록[튜플[레코드, 부동]]
- 라이즈: ValueError –
k가1보다 작은 경우
method update(개요)
저장된 레코드 콘텐츠를 업데이트하고 데이터, 메타데이터, 타임스탬프 또는 만료를 포함합니다.
- 매개변수:
- record_type
str– 업데이트할 레코드의 논리적 유형입니다. - record_id
str– 업데이트할 레코드의 식별자입니다. - text
str | None– 선택적 대체 컨텐츠입니다. 저장소가 지원하는 경우 저장된 텍스트를 명시적으로 지우려면None를 전달합니다. 저장소는 또한 연관된 의미 상태를 지우고 동일한 호출에서 충돌하는 널이 아닌index_text또는embedding업데이트를 거부할 수 있습니다. 컨텐트를 변경하지 않고 그대로 두려면 인수를 생략합니다. - index_text
str | list[str] | None– 지속 텍스트를 변경하지 않고 저장된 검색 상태를 재계산하거나 바꾸는 데 사용되는 선택적 대체 의미 페이로드입니다. 문자열은 매장에 의해 내부적으로 조각화될 수 있습니다. 비어 있지 않은 문자열 목록은 호출자 소유 청크로 처리되며 다시 분할되지 않아야 합니다. 일부 구현은 하이브리드 검색 텍스트로 별도로 유지될 수도 있습니다. - embedding
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– 만료 새로 고침에 대한 선택적 TTL 앵커입니다. 레코드 생성 시간의 경우TimeToLiveAnchor.CREATED_AT를 사용하고, 동일한 업데이트에 제공된 대체timestamp의 경우TimeToLiveAnchor.TIMESTAMP를 사용하고,timestamp이 생략된 경우 저장된 이벤트 시간 기록을 사용합니다.ttl_days없이ttl_anchor를 제공하면 저장소 또는 스키마 기본 활성 시간 기간이 사용됩니다. 새로 고치는 동안ttl_anchor를 생략하면 구현에서TimeToLiveAnchor.CREATED_AT를 사용합니다.
- record_type
- 반환: 업데이트된 레코드 수(일반적으로
0또는1)입니다. 요청된 논리적 식별자와 일치하는 저장된 레코드가 없을 경우0를 반환합니다. - 반품 유형: int
- 발생: ValueError – 업데이트 페이로드가 저장소에 대해 부적합한 경우(예: 모든 선택적 필드 생략 또는 충돌하는 의미 인수 제공)
Oracle DB 저장소
클래스 oracleagentmemory.core.OracleDBMemoryStore
메시지, 메모리 및 작업자 프로파일에 대한 데이터베이스 지원 지속성
Oracle DB 저장소를 생성합니다.
- 매개변수:
- embedder
IEmbedder | None– 매장에 로컬 벡터 임베딩이 필요할 때 사용되는 임베더입니다. 호출자가 항상 사전 계산된 벡터를 제공하거나 키워드 검색이 텍스트 전용 쓰기 및 텍스트 질의와 함께 사용되는 경우None일 수 있습니다.SearchStrategy.HYBRID에는OracleDBEmbedder가 필요하므로 관리되는 하이브리드 인덱스가 이 임베더의 데이터베이스 내 모델을 사용할 수 있습니다. - pool
Any– Oracle DB 연결 또는 풀입니다. 원시 연결을 전달하면 이 저장소 인스턴스에 대한 단일 세션 모드가 사용으로 설정됩니다. 동시 저장소 호출은 쓰기 작업에 사용되는 행 잠금 및 트랜잭션 가정을 보존하기 위해 로컬로 직렬화됩니다. 동시 요청에 대해 연결 풀을 사용합니다. - 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를 사용할 경우 명시적 구성은 기존 최신 관리 스키마에서 저장된 메타데이터를 새로 고치지만 기존 만료 날짜를 업데이트하지 않습니다. 생략하면 기존 설정이 유지됩니다. 명시적 구성이default_ttl_days또는max_ttl_days를NOT_SET_MARKER에 남겨 두는 경우 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 지원 키워드 또는 하이브리드 검색 인덱스를 제어할 수 있습니다. 각 외부 리스트 항목은 하나의 레코드와 정렬됩니다. 문자열 항목은 저장소에 의해 조각화될 수 있습니다. 목록 항목은 호출자 소유 청크로 처리되고RECORD_CHUNKS.chunk_text에 있는 그대로 기록됩니다.embeddings도 제공된 경우 목록 항목에는 청크당 정확히 하나의 벡터가 필요합니다. 문자열 항목은 해당 레코드에 대해 단일 벡터만 허용합니다. -
임베딩
list[list[float] | ndarray | list[list[float] | ndarray]]–contents와 정렬된 사전 계산된 임베딩 벡터(선택 사항)입니다. 각 레코드 항목은 하나의 벡터 또는 조각 벡터 목록일 수 있습니다. 로컬 벡터 스토리지가 구성되면 이러한 벡터는 쓰기용 로컬 벡터를 생성하기 위해 저장소의 임베더를 호출하는 대신 레코드의 벡터 표현으로 직접 저장됩니다. 단일 벡터는 구성된 벙커가 분할하는 경우에도 전체 의미 텍스트를 나타냅니다. 여러 조각 벡터에는 일치하는index_texts조각 목록이 필요합니다.SearchStrategy.VECTOR에서 벡터 검색은 저장된 벡터에 대해 순위가 지정됩니다.SearchStrategy.HYBRID또는SearchStrategy.KEYWORD에서 DB 지원 검색은 저장된 검색 텍스트와 Oracle 관리 텍스트 또는 하이브리드 인덱스 상태를 기준으로 순위가 매겨지므로, 추가 시간 임베딩은 활성 검색 전략이 아닌 구성된 로컬 벡터 스토리지에만 영향을 줍니다. 이 저장소가 로컬 벡터 저장소 없이 구성된 경우 텍스트 인식 인덱스에 표시되는 텍스트를 무효화하려면embeddings대신index_texts를 제공하십시오. - record_ids
str | None | list[str | None]– 선택적인 호출자가 볼 수 있는 식별자입니다. 단일 문자열은 단일 레코드 삽입에 사용할 수 있지만 목록은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]– 메시지 및 메모리 유사 레코드에 대한 선택적 TTL 기간(일)입니다. 관리 스키마에서MemoryRetentionConfig.default_ttl_days를 사용하려면 이 인수를 생략합니다. 보존 구성이 1을 설정할 때MemoryRetentionConfig.max_ttl_days를 사용하거나 만료되지 않는 레코드를 생성하려면None를 전달합니다.MemoryRetentionConfig.max_ttl_days이상의 값은 경고와 함께 해당 최대값으로 고정됩니다. 스칼라 값은 정렬된 입력에서 브로드캐스트될 수 있습니다. - ttl_anchor
TimeToLiveAnchor | list[TimeToLiveAnchor]– 선택적 TTL(Time-to-Live) 앵커TimeToLiveAnchor.CREATED_AT를 사용하여 데이터베이스 생성 시간을 기준으로 만료되거나,TimeToLiveAnchor.TIMESTAMP를 사용하여 제공된 이벤트 시간기록을 기준으로 만료됩니다. 생략할 경우 만료 시에는TimeToLiveAnchor.CREATED_AT가 사용됩니다. 타임스탬프 기록 만료 시 삽입된 각 레코드에 대해 구체적인 ISO-8601 타임스탬프가 필요합니다. 표준 시간대가 없는 ISO-8601 시간 기록은 UTC로 처리됩니다. - **store_kwargs(임의) – 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– 에이전트 식별자입니다. - 정보
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(임의) – 구체적 저장소로 전달된 구현별 쓰기 옵션입니다.
- batches(일괄 처리)
- 반환: 입력 배치 및 행과 동일한 논리적 순서로 삽입된 레코드의 식별자입니다.
- 반품 유형: 목록[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
식별자별로 하나의 관리 행과 해당 조각 행을 삭제합니다.
- 매개변수:
- 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
주
이 작업은 하나의 트랜잭션 내에서 실행됩니다. 지원되는 최상위 레벨 대상에 대해 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 지원 저장소에서 스레드를 삭제하면 연관된 메시지 및 메모리 행과 함께 관리되는 스레드 행과 검색을 위해 유지 관리되는 검색 데이터가 제거됩니다. 이는 원시 메시지 행만 제거하는 메시지 레벨 삭제보다 광범위합니다. 스레드 삭제는 동일한 트랜잭션의 연관된 검색 데이터와 함께 종속 메시지 및 메모리 행을 제거합니다.
예제
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"는 나열된 값이 하나 이상 있어야 함을 의미합니다."$not"를 사용하여 연산자 딕셔너리 또는 원시 정확한 일치 값을 포함하여 동일한 필드에서 다른 필드 레벨 표현식을 부정합니다. 누락된 필드를 포함하여 양수 표현식이 실패할 때 음수 표현식이 일치합니다. 음수 배열 멤버쉽도 배열이 아닌 필드와 일치합니다. 예를 들어 스칼라 필드의 경우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가 무시되고 작업자 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가 생략된 경우 공백이 아닌 문자를 하나 이상 제공하십시오. 벡터 검색은 이 텍스트를 포함합니다. 키워드 검색은 저장된 검색 텍스트와 일치합니다. 하이브리드 검색은 텍스트와 벡터 검색 모두에 이 텍스트를 사용합니다. - 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"는 나열된 값이 하나 이상 있어야 함을 의미합니다."$not"를 사용하여 연산자 딕셔너리 또는 원시 정확한 일치 값을 포함하여 동일한 필드에서 다른 필드 레벨 표현식을 부정합니다. 누락된 필드를 포함하여 양수 표현식이 실패할 때 음수 표현식이 일치합니다. 음수 배열 멤버쉽도 배열이 아닌 필드와 일치합니다.
- 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)쌍입니다. - 반환 유형: 목록[튜플[레코드, 부동]]
- 라이즈: 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를 완전히 생략할 수 있습니다. - 메타데이터
dict[str, Any] | None– JSON으로 직렬화되고metadata에 저장된 선택적 메타데이터 매핑입니다. - timestamp
str | None– 레코드와 함께 저장할 새 시간 기록(선택 사항)입니다. 레코드가 생성된 시기를 나타냅니다. 생략하면 기존 시간 기록이 보존됩니다. 저장된 시간 기록을 지우고 이후TimeToLiveAnchor.CREATED_AT만료 새로고침을 위해 데이터베이스 생성 시간을 사용하려면None를 전달하십시오.ttl_anchor가TimeToLiveAnchor.TIMESTAMP인 경우 시간대가 없는 ISO-8601 시간 기록은 UTC로 처리됩니다. - ttl_days
int | None– 선택적 만료 새로 고침(일)입니다. 현재 만료 시간 기록을 보존하려면 이 인수를ttl_anchor와 함께 생략합니다. 보존 구성이 하나를 설정할 때MemoryRetentionConfig.max_ttl_days를 사용하거나 그렇지 않을 때 만료를 지우려면None를 전달합니다.MemoryRetentionConfig.max_ttl_days이상의 값은 경고와 함께 해당 최대값으로 고정됩니다. 만료를 새로 고치면 만료된 레코드가 아직 제거되지 않은 경우 다시 표시될 수 있습니다. - ttl_anchor
TimeToLiveAnchor– 만료 새로 고침에 대한 선택적 TTL 앵커입니다.TimeToLiveAnchor.CREATED_AT를 사용하여 저장된 생성 시간에서 계산하거나,TimeToLiveAnchor.TIMESTAMP를 사용하여 동일한 업데이트에 제공된 대체timestamp에서 계산하거나,timestamp를 생략할 때 저장된 이벤트 시간 기록에서 계산합니다.ttl_anchor를ttl_days없이 제공하면 스키마의MemoryRetentionConfig.default_ttl_days를 사용하여 만료가 새로 고쳐집니다. 새로고침 중ttl_anchor를 생략하면 저장소는TimeToLiveAnchor.CREATED_AT를 사용합니다. 타임스탬프 앵커된 새로 고침에는 동일한 호출의 대체 ISO-8601 타임스탬프 또는 해당 형식의 기존 저장된 이벤트 타임스탬프가 필요합니다. 표준 시간대가 없는 ISO-8601 시간 기록은 UTC로 처리됩니다.
- record_type
- 반환: 업데이트된 행 수(
0또는1)입니다.record_type및record_id와 일치하는 논리적 레코드가 없는 경우0를 반환합니다. - 반품 유형: int
- 발생: 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은 저장된 검색 텍스트에 대한 텍스트 매칭과 데이터베이스 내 하이브리드 인덱스의 벡터 순위를 결합합니다. 사용자가 정확한 식별자, 별칭 또는 제품 이름을 비롯하여 자연어로 검색할 수 있는 경우 이 옵션을 사용합니다. 이 전략을 사용하려면 저장소의 기본 임베더가
OracleDBEmbedder이어야 하므로 관리 인덱스 및 저장소가 하나의 데이터베이스 내 모델을 공유합니다. KEYWORD- 저장된 검색 텍스트에 대해 키워드/텍스트 일치로만 검색합니다. 이 모드는 로컬 질의 임베딩을 생성하지 않으며 Oracle DB 임베더가 필요하지 않습니다. 기존 하이브리드 스키마에 대해 열면 새 하이브리드 인덱스를 생성하지 않고도 해당 하이브리드 인덱스의 텍스트 분기를 사용할 수 있습니다. 정확한 식별자, 별칭, 제품 이름 또는 짧은 구문이 벡터 결합 없이 검색을 유도해야 하는 경우 이 옵션을 사용합니다.
하이브리드 = 'HYBRID'
KEYWORD = 'KEYWORD'
벡터 = '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– 기본 TTL 기간(일)입니다. 기본값인None(최대값 없음)를 사용하려면NOT_SET_MARKER로 둡니다. - max_ttl_days
int | None– 선택적 최대 TTL 기간(일)입니다. 기본값인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 = 'TIMESTAMP'
스키마 정책
클래스 oracleagentmemory.core.SchemaPolicy
기준: str, Enum
Oracle DB 저장소에 대한 스키마 생성 정책입니다.
필수_기존
전체 관리 스키마가 존재하고 최신 상태인지 검증합니다. DB 객체를 생성하거나 수정하지 마십시오.
비어 있는 경우 생성_IF_EMPT
관리되는 객체가 없으면 부트스트랩 스키마입니다. 객체가 존재하는 경우 완전한 최신 관리 스키마가 필요합니다.
CREATE_IF_NE REQUIRED
누락된 관리 객체를 생성하고 지원되는 관리 스키마 업그레이드를 적용합니다.
재생성
모든 관리되는 스키마 객체를 삭제하고 재생성합니다. 이것은 파괴적입니다.