문서
핵심 개념
Schift는 Schift Embed 1 기본 경로와 migration-first 벡터 변환 경로를 분리해서 각 표면의 책임을 명확하게 둡니다.
서로 다른 임베딩 모델의 벡터는 기본적으로 호환되지 않습니다. 차원이 같아도 모델이 바뀌면 기하 구조가 달라집니다.
두 가지 제품 표면
| 표면 | 주요 객체 | 쓰는 용도 |
|---|---|---|
| Schift Embed 1 기본 경로 | Schift, catalog, embed, db, query, usage | 새 임베딩 호출, 호스티드 컨렉션, canonical space 검색 |
| migration-first 런타임 | Client, Projection, migrate(), adapters | 원문 재임베딩 없이 projection 을 학습하고 저장 벡터를 재작성 |
Projection matrix
textsource vectors (N, src_dim)
-> learned matrix W (src_dim, tgt_dim)
-> projected vectors (N, tgt_dim)Schift는 두 모델로 모두 임베딩한 페어 샘플로 W를 학습합니다. 실제 마이그레이션 시점에는 기존 벡터에 행렬 곱만 적용하면 됩니다.
어댑터 파이프라인
textAdapter(source store)
-> Projection.transform(batch.embeddings)
-> Adapter(sink store)| 속성 | 일반적인 범위 |
|---|---|
| 필요한 페어 샘플 수 | 500-2,000 |
| 지원 마이그레이션 형태 | 1536->768, 3072->1024 등 |
| 실행 비용 | 벡터당 서브밀리초 |
| 대량 원문 필요 여부 | 아니오 |
운영 메모
Projection은 brownfield 경로이고, Schift Embed 1은 greenfield 기본 경로입니다. 둘 다 같은 canonical space로 들어옵니다.
Temporal Constraints (시간 제약)
모든 벡터는 event_time 메타데이터 필드(에포크 밀리초)를 가질 수 있습니다. temporal 쿼리 파라미터로 시간 기반 필터링을 적용하면 특정 시점의 데이터 조회나 시계열 검색이 가능합니다.
| 모드 | 동작 | 필수 필드 |
|---|---|---|
before | event_time < temporal_start | temporal_start |
after | event_time > temporal_start | temporal_start |
between | temporal_start <= event_time <= temporal_end | temporal_start, temporal_end |
as_of | event_time <= temporal_start (특정 시점의 스냅샷) | temporal_start |
latest | 가장 최근 event_time 순으로 정렬 | 없음 |
event_time 필드가 없는 벡터는 모든 temporal 쿼리에서 제외됩니다. latest 모드는 품질 보장을 위해 후보를 20배 오버페치한 후 정렬합니다.
pythonfrom schift import Schift
client = Schift(api_key="sch_xxx")
# 최근 24시간 이내 문서
import time
one_day_ago = int((time.time() - 86400) * 1000)
results = client.collections.search(
"news", "최신 AI 동향",
temporal="after", temporal_start=one_day_ago,
)
# 2026년 1월 1일 기준 스냅샷
results = client.collections.search(
"contracts", "해지 조항",
temporal="as_of", temporal_start=1735689600000,
)Edges & Graph (엣지 & 그래프)
Schift 버킷은 벡터 간 타입이 지정된 가중치 엣지를 지원하여 플랫 벡터 저장소를 지식 그래프로 전환합니다. 엣지는 supersedes, contradicts, caused_by 등의 도메인 관계를 인코딩합니다.
| 관계 타입 | 용도 |
|---|---|
related_to | 일반 연관 관계 (기본값) |
supersedes | 최신 버전이 이전 문서를 대체 |
contradicts | 두 문서가 상충 |
caused_by | 사건/이슈 간 인과 관계 |
is_a | 분류 체계 / 계층 구조 |
has_child | 부모-자식 트리 구조 |
follows | 순차적 순서 (예: 법률 조항) |
엣지는 WAL 기반 내구성을 갖춘 압축 CSR 포맷으로 저장됩니다. 각 엣지는 가중치(0.0-1.0)를 가지며, 방향(outgoing, incoming, both)과 관계 타입으로 조회할 수 있습니다.
bash# 법률 문서 간 인용 엣지 추가
curl -X POST https://api.schift.io/v1/buckets/{bucket_id}/edges \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"edges": [
{"source": "article-301", "target": "article-42", "relation": "supersedes", "weight": 1.0},
{"source": "ruling-2024-001", "target": "article-301", "relation": "caused_by", "weight": 0.8}
]}'
# 노드의 outgoing 엣지 조회
curl https://api.schift.io/v1/buckets/{bucket_id}/edges/article-301?direction=outgoing \
-H "Authorization: Bearer $SCHIFT_API_KEY"