상점 및 스키마
이 페이지에서는 Oracle Agent 메모리 SDK에서 사용되는 코어 저장소 추상화 및 스키마 콘트롤을 제공합니다.
API 저장
클래스 oracleagentmemory.core.OracleMemoryStore
기준: IMemoryStore
OracleAgentMemory에서 사용되는 공통 저장소 인터페이스입니다.
저장소 구현은 텍스트 레코드를 지속하고 이에 대한 유사성 검색을 수행합니다. 동기 및 비동기 엔트리 포인트가 모두 정의되므로 상위 레벨의 API가 매장별 논리를 복제하지 않고도 일치하는 동기화/비동기 서피스를 노출할 수 있습니다.
method add(개요)
텍스트 레코드를 포함 및 유지합니다.
- 매개변수:
- contents
list[str | None]– 저장할 텍스트 페이로드입니다. 이러한 값은index_texts가 제공되지 않은 경우 임베딩 페이로드로도 사용됩니다. 항목이 생략된 경우(None) 메타데이터 키"content"에서 분석된 항목을 저장할 수 있습니다. 그렇지 않으면 빈 콘텐츠가 유지됩니다. - record_type
str– 저장된 레코드에 대한 레코드 유형 레이블(예:"message"또는"memory")입니다. - index_texts
list[str]–contents에 정렬된 선택적 포함 전용 페이로드입니다. - 임베딩
list[list[float]] | list[ndarray]–contents에 맞춰 사전 계산된 임베딩 벡터(선택사항)입니다. 제공된 경우 저장소는 이러한 벡터를 직접 사용하며 임베더를 호출하지 않습니다. - record_ids
str | None | list[str] | list[None]– 선택적인 호출자가 볼 수 있는 레코드 ID입니다. 완전히 제공(텍스트당 하나)하거나 모든 텍스트에 대해 생략해야 합니다. 반환된 ID는 제공된 경우 해당 값과 일치합니다. - 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]– 메시지 레코드에 대한 선택적 채팅 역할입니다. - timestamps
str | None | list[str | None]– 선택적 시간 기록 또는 레코드별 시간 기록입니다. - metadata
dict[str, Any] | list[dict[str, Any] | None] | None– 선택적 메타데이터 매핑 또는 레코드별 메타데이터 매핑입니다. 메타데이터에는 생략된 텍스트 값에 대한 폴백 소스로"content"가 포함될 수 있습니다. - **store_kwargs(임의) – 상위 레벨 API에서 전달한 저장소별 쓰기 옵션입니다.
- contents
- 반환: 각 입력 콘텐츠 항목에 대한 식별자를 삽입합니다. 제공된 경우
record_ids와 일치하고, 그렇지 않은 경우 식별자를 생성합니다. - 반환 유형: list[str]
예제
store.add(["Abstract memory"], record_type="memory", record_ids="mem-abstract-docs")
['mem-abstract-docs']
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
메모리 저장소에 레코드를 추가합니다.
- 매개변수:
- contents
list[str | None]– 저장할 텍스트 페이로드입니다. 이러한 값은index_texts또는embeddings가 제공되지 않는 한 임베딩을 계산하는 데도 사용됩니다. 항목이 생략된 경우(None) 메타데이터 키"content"에서 분석된 항목을 저장할 수 있습니다. 그렇지 않으면 빈 콘텐츠가 유지됩니다. - record_type
str– 저장된 레코드의 레코드 유형 레이블(예:"message","memory",guideline,fact또는preference)입니다. - index_texts
list[str]– 포함/인덱싱에만 사용되는 선택적 대체 페이로드입니다. 제공된 경우contents와 길이가 같아야 합니다. - 임베딩
list[list[float]] | list[ndarray]–contents에 맞춰 사전 계산된 임베딩 벡터(선택사항)입니다. 제공된 경우 저장소는 이러한 벡터를 직접 사용해야 하며 임베더를 호출하지 않아야 합니다. 생략할 경우 저장소는 비어 있지 않은 인덱스화 페이로드에 대해서만 임베더를 사용하고, 명시적 빈 문자열은 조각 임베딩 없이 저장됩니다. - record_ids
str | None | list[str] | list[None]– 선택적인 호출자가 볼 수 있는 레코드 ID입니다. 완전히 제공(텍스트당 하나)하거나 모든 텍스트에 대해 생략해야 합니다. 반환된 ID는 제공된 경우 해당 값과 일치합니다. 생략할 경우 저장소는 ID 클라이언트측을 생성합니다. - 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]– 메시지 레코드에 대한 선택적 채팅 역할입니다. - timestamps
str | None | list[str | None]– 선택적인 호출자가 제공한 이벤트 시간 기록입니다. - metadata
dict[str, Any] | list[dict[str, Any] | None] | None– 선택적 호출자가 제공한 메타데이터 딕셔너리입니다. 메타데이터에는 생략된 텍스트 값에 대한 폴백 소스로"content"가 포함될 수 있습니다. - **store_kwargs(임의) – 저장소별 쓰기 옵션입니다. 지원되는 키에는 현재 Oracle
executemany일괄 처리를 위한batch_size가 포함됩니다.
- contents
- 반환: 각 입력 콘텐츠 항목에 대한 식별자를 삽입합니다. 제공된 경우
record_ids와 일치하고, 그렇지 않은 경우 반환 생성된 ID를 저장합니다. - 반환 유형: list[str]
예제
store.add(
["Hello from docs"],
record_type="message",
record_ids="msg-docs-add",
thread_ids="c-docs-add",
roles="user",
)
['msg-docs-add']
방법 add_agent
에이전트 프로파일 레코드를 추가합니다.
- 매개변수:
- agent_id
str– 에이전트 식별자입니다. - 정보
str– 에이전트에 대한 자유 형식 정보입니다.
- agent_id
- 반환: 삽입된 에이전트 프로파일 레코드의 식별자입니다.
- 반환 유형: str
예제
store.add_agent("a-docs-agent", "Support assistant")
'a-docs-agent'
방법 add_user
사용자 프로파일 레코드를 추가합니다.
- 매개변수:
- user_id
str– 사용자 식별자입니다. - information
str– 사용자에 대한 자유 형식 정보입니다.
- user_id
- 반환: 삽입된 사용자 프로파일 레코드의 식별자입니다.
- 반환 유형: str
예제
store.add_user("u-docs-profile", "Prefers concise answers.")
'u-docs-profile'
방법 delete
관리되는 벡터 레코드 행과 식별자별로 조각 행을 삭제합니다.
- 매개변수:
- record_type
str– 관리 테이블을 대상으로 지정할 레코드 유형 레이블(예:"message","memory","guideline","fact"또는"preference")입니다. - record_id
str– 제거할 행 식별자입니다.
- record_type
- 반환: 제거된 행 수(식별자를 찾을 수 없을 때
0)입니다. - 반품 유형: int
예제
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
예제
store.delete_thread("c1")
0
메소드 get
저장된 메시지 또는 메모리를 식별자로 검색합니다.
- 매개변수:
- record_type
str–"message","memory","guideline","fact"또는"preference"와 같은 관리되는 벡터 레코드 행으로 분석되는 레코드 유형 레이블입니다. - 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")입니다. - limit
int– 반환할 최대 레코드 수입니다. - thread_id
str | None– 정확한 스레드 범위 필터입니다. 생략할 경우 필터링이 적용되지 않습니다.None로 설정하면 스레드 차원에서 범위가 지정되지 않은 레코드만 반환됩니다. - user_id
str | None– 정확한 사용자 범위 필터입니다. 생략할 경우 필터링이 적용되지 않습니다.None로 설정하면 사용자 차원에서 범위가 지정되지 않은 레코드만 반환됩니다. - agent_id
str | None– 정확한 에이전트 범위 필터입니다. 생략할 경우 필터링이 적용되지 않습니다.None로 설정하면 에이전트 차원에서 범위가 지정되지 않은 레코드만 반환됩니다. - metadata_filter
dict[str, Any] | None– 메타데이터 필터입니다. 생략할 경우 필터링이 적용되지 않습니다.None로 설정하면 저장된 메타데이터가 없는 레코드만 반환됩니다. dict로 설정하면 저장된 메타데이터에 요청된 모든 키와 값이 포함되어야 합니다. 중첩된 딕셔너리는 재귀적으로 일치됩니다. 목록 값은 반복적인 부분 집합 일치가 아닌 정확한 동등으로 일치되므로 목록 순서와 길이도 일치해야 합니다.
- record_type
- 반품: 삽입 순서별로 정렬된 레코드입니다.
- 반품 유형: list[레코드]
예제
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']
방법 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– 포함할 선택적 레코드 유형 세트입니다. 생략할 경우 검색에는 모든 레코드 유형이 포함됩니다. - 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) - 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
메타데이터를 포함하여 누락된 관리 객체만 생성합니다.
재생성
관리되는 모든 스키마 객체를 삭제하고 재생성합니다. 이것은 파괴적입니다.