Retrieval: 인덱스 위의 하이브리드 검색
Retrieval: 인덱스 위의 하이브리드 검색
문서를 인덱스에 넣고 나면, 이제 질문에 맞는 조각을 뽑아내야 해요. Retrieval 엔드포인트는 벡터 유사도 검색과 전문(full-text) 검색을 결합한 하이브리드 검색을 수행해요. 기본 제공 필드나 사용자 정의 메타데이터로 필터링하고, 리랭킹을 적용해 관련성을 한 단계 더 높일 수도 있어요.
출처: 공식문서
MCP 호환 에이전트는 LlamaParse MCP의 retrieveFromIndex 도구로 SDK 코드 없이 같은 하이브리드 검색을 쓸 수 있어요.
기본 검색
results = await client.beta.retrieval.retrieve(
index_id="<your-index-id>",
query="What were the Q3 revenue figures?",
top_k=10,
)
for result in results.results:
print(f"Score: {result.score}, Rerank: {result.rerank_score}")
print(result.content)
주요 파라미터
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
index_id |
string |
필수 | 검색할 인덱스 ID. |
query |
string |
필수 | 자연어 질의. |
top_k |
int |
서버 기본값 | 반환할 최대 결과 수. |
vector_pipeline_weight |
float |
null |
벡터 검색 가중치 (0—1). |
full_text_pipeline_weight |
float |
null |
전문 검색 가중치 (0—1). |
score_threshold |
float |
null |
반환 결과의 최소 점수. |
num_candidates |
int |
null |
ANN 후보 수 (높을수록 정확하지만 느림). |
리랭킹
리랭킹은 기본으로 켜져 있어요. 하이브리드 검색이 후보를 뽑으면 리랭커 모델이 그 후보를 다시 채점해서 관련성을 개선해요.
# 리랭킹 끄기
results = await client.beta.retrieval.retrieve(
index_id="<your-index-id>",
query="summary of findings",
rerank={"enabled": False},
)
# 리랭킹 유지 + 상위 3개로 제한
results = await client.beta.retrieval.retrieve(
index_id="<your-index-id>",
query="summary of findings",
rerank={"enabled": True, "top_n": 3},
)
필터링
내장 정적 필드나 사용자 정의 메타데이터로 결과를 좁힐 수 있어요.
정적 필터는 모든 청크에 저장된 내장 필드를 대상으로 해요. 현재는 parsed_directory_file_id를 지원해서, 특정 파일로 검색 범위를 제한할 수 있어요.
results = await client.beta.retrieval.retrieve(
index_id="<your-index-id>",
query="revenue breakdown",
static_filters={
"parsed_directory_file_id": {"operator": "eq", "value": "<file-id>"},
},
)
사용자 정의 메타데이터 필터는 파일이 디렉토리에 추가될 때 붙은 사용자 정의 메타데이터와 대조해요.
results = await client.beta.retrieval.retrieve(
index_id="<your-index-id>",
query="contract terms",
custom_filters={
"category": {"operator": "eq", "value": "legal"},
"year": {"operator": "gte", "value": 2024},
},
)
응답 형식
각 결과는 다음 필드를 담아요.
| 필드 | 설명 |
|---|---|
content |
검색된 청크의 텍스트 본문. |
score |
하이브리드 검색 관련성 점수. |
rerank_score |
리랭커 점수 (리랭킹을 적용한 경우). |
metadata |
청크에 연결된 사용자 정의 메타데이터. |
static_fields.parsed_directory_file_id |
이 청크가 속한 파싱 파일의 ID. |
static_fields.page_range_start / page_range_end |
청크가 덮는 페이지 범위. |
static_fields.chunk_index |
파일 내 청크의 위치. |
static_fields.chunk_token_count |
청크의 토큰 수. |
더 알아보기
- Index 시작 가이드 — 디렉토리·인덱스·검색 3단계 모델
- Chat — 인덱스 위에서 도는 내장 RAG 에이전트