상점 및 스키마
이 페이지에서는 Oracle Agent 메모리 SDK에서 사용되는 코어 저장소 추상화 및 스키마 콘트롤을 제공합니다.
API 저장
클래스 oracleagentmemory.core.OracleMemoryStore
기준: IMemoryStore
OracleAgentMemory에서 사용되는 공통 저장소 인터페이스입니다.
저장소 구현은 텍스트 레코드를 지속하고 이에 대한 유사성 검색을 수행합니다. 동기 및 비동기 엔트리 포인트가 모두 정의되므로 상위 레벨의 API가 매장별 논리를 복제하지 않고도 일치하는 동기화/비동기 서피스를 노출할 수 있습니다.
method search(개요)
유사성으로 레코드를 검색합니다.
- 매개변수:
- query
str | None– 자연어 쿼리입니다.query_vector가 생략된 경우 제공해야 합니다. - query_vector
list[float] | None– 미리 계산된 선택적 질의 포함입니다.query및query_vector중 정확히 하나를 제공해야 합니다. - k
int– 반환할 최대 결과 수. 명시적 값은1이상이어야 합니다. - 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– 선택적 부분 메타데이터 매핑입니다. 레코드는 저장된 메타데이터에 요청된 모든 키와 값이 포함된 경우에만 일치합니다. 중첩된 딕셔너리는 재귀적으로 일치됩니다. 목록 값은 반복적인 부분 집합 일치가 아닌 정확한 동등으로 일치되므로 목록 순서와 길이도 일치해야 합니다.
- query
- 반환: 거리 증가에 따라 정렬된
(record, distance)쌍입니다. - 반환 유형: 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
Oracle DB 저장소
클래스 oracleagentmemory.core.OracleDBMemoryStore
메시지, 메모리 및 작업자 프로파일에 대한 데이터베이스 지원 지속성
Oracle DB 저장소를 생성합니다.
- 매개변수:
- embedder
IEmbedder | None– 벡터화된 레코드 유형에 사용되는 Embedder입니다. 호출자가 항상add,update및search에서 사전 계산된 벡터를 제공하는 경우None일 수 있습니다. - pool
Any– Oracle DB 연결 또는 풀입니다. 원시 연결을 전달하면 이 저장소 인스턴스에 대한 단일 세션 모드가 사용으로 설정됩니다. 동시 저장소 호출은 쓰기 작업에 사용되는 행 잠금 및 트랜잭션 가정을 보존하기 위해 로컬로 직렬화됩니다. 동시 요청에 대해 연결 풀을 사용합니다. - schema_policy
SchemaPolicy | str– 스키마 설정 모드입니다. 기본값은 기존의 최신 관리 스키마가 필요하며 DDL 변경을 수행하지 않습니다. 누락된 객체를 채우려면SchemaPolicy.CREATE_IF_NECESSARY를 사용하고, 관리 객체를 삭제하고 재생성하려면SchemaPolicy.RECREATE를 사용합니다. - vector_dim
int– VECTOR 열이 생성될 때 스키마 생성에 대한 차원을 포함합니다. - table_name_prefix
str– 관리 테이블/인덱스 이름에 추가되는 선택적 접두어입니다.
- embedder
방법 add_agent
에이전트 프로파일 레코드를 추가합니다.
- 매개변수:
- agent_id
str– 에이전트 식별자입니다. - 정보
str– 에이전트에 대한 자유 형식 정보입니다. 이 텍스트는 프로파일 콘텐츠로 저장되며RECORD_CHUNKS에 프로파일 포함 행을 작성하는 데 사용됩니다.
- agent_id
- 반환: 삽입된 에이전트 프로파일 레코드의 식별자입니다.
- 반환 유형: str
주
에이전트 프로파일 레코드의 범위가 지정되지 않았습니다. 삽입된 공용 레코드 식별자는 agent_id로 전달된 값과 동일합니다.
예제
store.add_agent("a-docs-agent", "Support assistant")
'a-docs-agent'
방법 add_user
사용자 프로파일 레코드를 추가합니다.
- 매개변수:
- user_id
str– 사용자 식별자입니다. - information
str– 사용자에 대한 자유 형식 정보입니다. 이 텍스트는 프로파일 콘텐츠로 저장되며RECORD_CHUNKS에 프로파일 포함 행을 작성하는 데 사용됩니다.
- 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 지원 저장소에서 스레드를 삭제하면 연관된 메시지 및 메모리 행과 함께 관리되는 스레드 행과 검색을 위해 유지 관리되는 레코드 조각 행이 제거됩니다. 이는 원시 메시지 행만 제거하는 메시지 레벨 삭제보다 광범위합니다. 스레드 삭제는 동일한 트랜잭션의 일치하는 RECORD_CHUNKS 행과 함께 THREAD에서 참조된 종속 메시지 및 메모리 행을 제거합니다.
예제
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로 설정하면 저장된 메타데이터에 요청된 모든 키와 값이 포함되어야 합니다. 중첩된 딕셔너리는 재귀적으로 일치됩니다. 목록 값은 반복적인 부분 집합 일치가 아닌 정확한 동등으로 일치되므로 목록 순서와 길이도 일치해야 합니다.
- 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
유사성으로 레코드를 검색합니다.
- 매개변수:
- query
str | None– 자연어 쿼리입니다.query_vector가 생략된 경우 제공해야 합니다. - query_vector
list[float] | None– 미리 계산된 선택적 질의 포함입니다. 정확히query및query_vector중 하나를 제공해야 합니다. - k
int– 반환할 최대 결과 수. 명시적 값은1이상이어야 합니다. - 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– 선택적 부분 메타데이터 매핑입니다. 레코드는 저장된 메타데이터에 요청된 모든 키와 값이 포함된 경우에만 일치합니다. 중첩된 딕셔너리는 반복적으로 일치됩니다. 목록 값은 반복적인 부분 집합 일치가 아닌 정확한 동등으로 일치되므로 목록 순서와 길이도 일치해야 합니다.
- query
- 반환: 거리 증가에 따라 정렬된
(record, distance)쌍입니다. - 반환 유형: list[tuple[Record, float]]
- 라이즈: ValueError –
k가1보다 작은 경우
예제
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
방법 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 | None– 선택적 포함 전용 페이로드입니다. 생략할 경우text가 포함됩니다. - embedding
list[float] | ndarray | None– 사전 계산된 임베딩 벡터(선택 사항)입니다. 제공된 경우 직접 사용되며 임베더 호출이 수행되지 않습니다.None를 전달하여 저장된 임베딩을 지웁니다. - 메타데이터
dict[str, Any] | None– JSON으로 직렬화되고metadata에 저장된 선택적 메타데이터 매핑입니다.
- 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.SchemaPolicy
기준: str, Enum
Oracle DB 저장소에 대한 스키마 생성 정책입니다.
필수_기존
전체 관리 스키마가 존재하고 최신 상태인지 검증합니다. DB 객체를 생성하거나 수정하지 마십시오.
비어 있는 경우 생성_IF_EMPT
관리되는 객체가 없으면 부트스트랩 스키마입니다. 객체가 존재하는 경우 완전한 최신 관리 스키마가 필요합니다.
CREATE_IF_NE REQUIRED
메타데이터를 포함하여 누락된 관리 객체만 생성합니다.
재생성
관리되는 모든 스키마 객체를 삭제하고 재생성합니다. 이것은 파괴적입니다.