이 가이드에서는 Mosaic AI Vector Search를 사용하여 실시간 RAG, 검색 및 일치하는 애플리케이션에 대한 검색 품질을 개선하는 체계적인 방법을 제공합니다. 권장 사항은 가장 높은 영향/최저 노력에서 가장 낮은 영향/가장 높은 노력으로 정렬됩니다.
필수 구성 요소: 평가 프레임워크 설정
검색 품질을 최적화하기 전에 재현 가능한 평가 시스템이 있어야 합니다 .
중요합니다
평가가 없는 경우 여기에서 중지하고 먼저 설정합니다. 측정하지 않고 최적화하는 것은 추측입니다.
대기 시간 요구 사항 정의
사용 사례에 따라 명확한 대기 시간 목표를 설정합니다.
- RAG 에이전트: 처음 토큰까지의 시간(TTFT) 목표 (예: <2초)
- 검색 표시줄: 결과를 표시하는 종단 간 대기 시간(예: <100msec)
모든 최적화는 이러한 요구 사항을 충족해야 합니다.
자동화된 평가 설정
다음 방법 중 하나 이상을 사용합니다.
- 기존 골든 데이터 세트: 레이블이 지정된 쿼리-응답 쌍을 사용합니다.
- 가상 평가 집합: Databricks 가상 데이터 생성 을 사용하여 문서에서 테스트 사례를 자동으로 생성합니다.
- 근거 없는 평가: Databricks 에이전트 평가 심사위원을 사용하여 레이블 없이 품질을 평가합니다.
핵심은 변경 내용을 측정하는 몇 가지 자동화된 방법을 갖는 것입니다. 완벽한 데이터는 필요하지 않습니다. 절대 점수가 아닌 다양한 전략을 테스트할 때 상대적인 개선 에 집중합니다. 작은 가상 데이터 세트조차도 재정렬로 품질이 15% 향상되는지 또는 하이브리드 검색이 특정 사용 사례에 도움이 되는지를 확인할 수 있습니다.
품질 메트릭 선택
사용 사례에 따라 품질 메트릭을 선택합니다.
회수가 가장 중요한 경우 (모든 관련 정보 필요):
- RAG 에이전트: 주요 컨텍스트가 없으면 잘못된 답변 또는 환각이 발생합니다.
- 제약 임상 시험 일치: 적격 환자 또는 관련 연구를 놓칠 수 없습니다.
- 재무 규정 준수 검색: 모든 관련 규정, 위험 요소 또는 선례가 필요합니다.
- 제조 근본 원인 분석: 관련된 모든 인시던트 및 오류 패턴을 표시해야 합니다.
- 추적할 메트릭: Recall@k(예: recall@10, recall@50)
정밀도가 가장 중요한 경우 (가장 관련성이 큰 결과만 필요):
- 엔터티 해상도/퍼지 매칭: 시스템 간 고객 레코드, 공급업체 이름 또는 제품 SKU를 일치시키기.
- 금융 서비스 중복 제거: 신뢰도가 높은 중복 트랜잭션 또는 계정 식별
- 공급망 부분 일치: 카탈로그 전체에서 정확하거나 호환되는 구성 요소 찾기
- 기술 지원 기술 자료: 엔지니어는 최고의 결과에 정확한 솔루션이 필요합니다.
- 추적할 메트릭: Precision@k(예: precision@3, precision@10).
균형 잡힌 사용 사례 (좋은 재현율과 정밀도 모두 필요):
- M&A 실사: 리스크(식별)을 놓칠 수는 없지만 먼저 정확한 문서가 필요합니다.
- 특허 사전 아트 검색: 가장 관련성이 큰 특허를 우선적으로 적용하는 포괄적인 범위입니다.
- 고객 360 일치: 여러 시스템에서 고객 데이터 통합
1단계: 하이브리드 검색 사용
키워드 정밀도를 의미 체계 이해와 결합합니다.
사용 시기:
- 사용자는 특정 용어(제품 코드, 기술 용어)를 사용하여 검색합니다.
- 특정 쿼리에 대해 정확히 일치해야 합니다.
- 의미 체계 검색에서 명백한 키워드 일치 항목이 누락된 경우 대체를 원합니다.
메트릭에 미치는 영향:
- 의미와 키워드 일치를 모두 포착하여 기억력을 개선합니다.
- 특정 용어를 사용하는 쿼리의 정밀도 를 향상시킵니다.
구현: 모자이크 AI 벡터 검색의 한 줄 변경.
# Enable hybrid search
results = index.similarity_search(
query_text="error code E404",
query_type="HYBRID" # Combines vector and keyword search
)
자세한 내용은 벡터 검색 인덱스 쿼리를 참조하세요.
2단계: 메타데이터 필터링 구현
검색 품질에 대한 가장 큰 레버입니다.
필터링은 검색 공간을 크게 줄이고 정밀도와 재현율을 모두 향상시킵니다.
메트릭에 미치는 영향:
- 관련 없는 결과를 제거하여 정밀도 를 크게 향상시킵니다.
- 필터링된 하위 집합 내에서 리콜을 개선합니다.
- 검색 공간을 90%이상 줄일 수 있습니다.
예시
- 기술 설명서: 제품 버전, 구성 요소 또는 모듈별로 필터링합니다.
- 자동차 설명서: 메이크, 모델, 연도별로 필터링합니다.
- 고객 지원: 제품 라인, 지역, 문제 범주별로 필터링합니다.
Implementation
# Vector Search with metadata filtering
results = index.similarity_search(
query_text="brake system maintenance",
filters='make = "Toyota" AND model = "Camry" AND year = 2023',
num_results=10
)
동적 필터 선택
프로그래밍 방식:
# Parse query for filter criteria
def extract_filters(user_query):
filter_parts = []
if "Toyota" in user_query:
filter_parts.append('make = "Toyota"')
if "2023" in user_query:
filter_parts.append('year = 2023')
return " AND ".join(filter_parts) if filter_parts else None
Databricks를 사용하여 에이전트 기반 필터링:
from databricks_ai_bridge.agents.tools.vector_search import VectorSearchTool
# Create the vector search tool
vector_search_tool = VectorSearchTool(
index_name="catalog.schema.car_manuals_index",
# Optional: specify columns to return
columns=["content", "make", "model", "year", "chunk_id"],
# Optional: set number of results
num_results=10,
# Optional: add additional parameters as needed
additional_parameters={
"query_type": "HYBRID" # Enable hybrid search
}
)
# The tool automatically handles filter generation based on the agent's understanding
# Agent analyzes "brake issues in my 2023 Toyota Camry" and generates appropriate filters
# For LangChain agents:
from langchain.agents import create_react_agent
agent = create_react_agent(
tools=[vector_search_tool],
llm=your_llm,
prompt=your_prompt
)
에이전트는 자동으로 다음을 수행합니다.
- 쿼리에서 관련 엔터티를 추출합니다.
- 적절한 SQL 유사 필터 문자열을 생성합니다.
- 의미 체계 이해와 정확한 필터링을 모두 사용하여 검색을 실행합니다.
영향: 관련성을 향상시키면서 검색 공간을 90%이상 줄일 수 있습니다.
3단계: 재정렬 추가
한 줄 변경으로 약 15%의 품질 향상을 이룹니다.
Databricks는 RAG 에이전트에 적합한 기본 제공 리랜커를 제공합니다.
메트릭에 미치는 영향:
- 더 적은 후보군으로 높은 재현율을 달성하여 정밀도를 높입니다.
- 하이브리드 검색 및 필터링과 같은 기술과 결합할 때 가장 잘 작동합니다.
Implementation
# Python SDK
results = index.similarity_search(
query_text="How to create a Vector Search index",
num_results=10,
columns=["id", "text", "parent_doc_summary"],
reranker={
"model": "databricks_reranker",
"parameters": {
"columns_to_rerank": ["text", "parent_doc_summary"]
}
}
)
자세한 내용은 쿼리 결과 재정렬을 참조하세요.
사용 시기
완벽하게 알맞음:
- RAG 에이전트(대기 시간은 LLM 생성에 의해 지배됨).
- 품질 우선 애플리케이션.
- 초기 기본값으로 약 5 QPS인 낮거나 보통 수준의 QPS.
기본 제공 재정렬기는 다음에 적합하지 않습니다.
- 높은 QPS 애플리케이션(>추가 크기 조정 없이 5개의 QPS).
- 100msec 대기 시간이 필요한 <실시간 검색 막대입니다.
- 1.5s 재랭킹 시간이 허용되지 않는 어플리케이션.
성능: 일반적인 워크로드에서 50개의 결과를 약 1.5초 만에 재정렬합니다. 짧은 청크의 경우 최대 250msec의 속도입니다.
짧은 대기 시간/비 RAG 사용 사례
재랭킹은 검색 표시줄 및 높은 QPS 애플리케이션에 대한 상당한 품질 향상을 여전히 제공할 수 있습니다. 다만, 더 빠른 재랭커가 필요합니다. 100밀리초 미만의 재정렬을 위해 Databricks 모델 서빙에서 사용자 지정 모델로 경량 재정렬 모델(예: cross-encoder/ms-marco-TinyBERT-L-2-v2)을 배포하는 것이 좋습니다.
4단계: 데이터 준비 개선
이 섹션에서는 청크 분할, 구문 분석, 의미 체계 컨텍스트 추가, 데이터 정리 등 데이터 준비를 개선하는 데 사용할 수 있는 몇 가지 기술에 대해 설명합니다.
청크 분할 전략
청크 크기 최적화는 연구의 활성 영역으로 남아 있습니다. DeepMind(LIMIT)의 최근 작업에 따르면 임베딩은 긴 문맥에서 기본 정보를 캡처하지 못할 수 있으므로 세심한 판단이 필요합니다.
실험의 시작점:
# Common configurations to test
small_chunks = 256 # Better for precise fact retrieval
medium_chunks = 512 # Balanced approach
large_chunks = 1024 # More context per chunk
고려해야 할 주요 장차:
- 작은 청크: 특정 정보의 지역화가 향상되지만 컨텍스트가 손실될 수 있습니다.
- 더 큰 청크: 더 많은 컨텍스트가 유지되지만 관련 정보를 정확히 파악하기가 어렵습니다.
- 컨텍스트 제한: 여러 청크를 검색할 때 LLM 컨텍스트 창에 맞아야 합니다.
보다 강력한 최적화: 청크 크기를 과도하게 최적화하는 대신 다음 사항에 집중합니다.
- 메타데이터에 대한 정보 추출: 엔터티, 토픽 및 범주를 추출하여 정확한 필터링을 사용하도록 설정합니다.
- 고품질 구문 분석: ai_parse_document 사용하여 깨끗하고 구조화된 텍스트를 사용합니다.
- 의미 체계 메타데이터: 문서 요약 및 섹션 머리글을 청크에 추가합니다.
또한 다음과 같은 고급 방법을 고려합니다. 이러한 기술은 더 많은 노력이 필요하지만 더 큰 영향을 미칠 수 있습니다.
의미 체계 청크: 문장을 고정 크기가 아닌 유사성으로 그룹화합니다.
- 임베딩을 사용하여 자연스러운 의미적 경계를 찾습니다.
- 관련 아이디어를 함께 묶어 놓습니다.
- 더 나은 컨텍스트 보존.
- RAG 애플리케이션에 대한 청크 분할 전략에 대한 궁극적인 가이드를 참조하세요.
부모-자식 단위 (작은 것에서 큰 것으로 검색):
# Record child and parent chunks in your source table
for parent_chunk in create_chunks(doc, size=2048): # Large for context
for child_chunk in create_chunks(parent_chunk, size=512): # Small for precision
source_table.append({"text": child_chunk, "parent_text": parent_chunk})
# Search children, return parents
results = index.similarity_search(
query_text="Is attention all you need?",
num_results=10,
columns=["text", "parent_text"]
)
LangChain 부모 문서 검색기 문서를 참조하세요.
문서 구문 분석
PDF 및 복잡한 문서의 경우 Databricks는 고품질 구문 분석을 위해 ai_parse_document 사용하는 것이 좋습니다. 잘못된 구문 분석(누락된 테이블, 깨진 서식)은 검색 품질에 직접적인 영향을 줍니다.
의미 체계 메타데이터를 사용하여 보강
검색을 개선하기 위해 의미 체계 컨텍스트를 추가합니다.
이것이 작동하는 이유:
- 모델을 포함하기 위한 추가 의미 체계 신호를 제공합니다.
- 새로운 컨텍스트로 재정렬자에게 더 많은 채점 정보를 제공합니다.
- 문서 수준 개념을 참조하는 쿼리에 도움이 됩니다.
옵션 1: 청크에 메타데이터 포함
# Prepend document summary to each chunk
chunk_with_context = f"""
Document: {doc_title}
Summary: {doc_summary}
Section: {section_name}
{chunk_content}
"""
옵션 2: 별도의 메타데이터 열로 저장
# Store semantic metadata for reranker to use
metadata = {
"doc_summary": "Technical manual for brake system maintenance",
"section": "Emergency brake adjustment procedures",
"keywords": ["brake", "safety", "adjustment"]
}
중요합니다
이 방법을 사용하려면 메타데이터를 활용하기 위해 다운스트림 처리가 필요합니다.
- 의미 체계 메타데이터의 경우:
columns_to_rerank매개 변수를 사용하여 재순위 지정을 통해 이러한 열을 고려합니다. - 키워드 전용 메타데이터의 경우: 하이브리드 검색(전체 텍스트 모드)을 사용하여 이러한 필드와 일치합니다.
데이터 정리
- 상용구(머리글, 바닥글, 페이지 번호)를 제거합니다.
- 문서 구조(제목, 목록, 표)를 유지합니다.
- 청크 분할 시 의미 체계 경계를 유지 관리합니다.
5단계: 쿼리 최적화
쿼리 확장
회수를 개선하기 위해 여러 쿼리 변형을 생성합니다. LangChain 가이드를 참조하세요.
영향: 다양한 용어를 사용하는 문서를 찾아 재현율을 개선합니다.
# Use LLM to expand query with synonyms and related terms
def expand_query(user_query):
prompt = f"""Generate 3 variations of this search query including synonyms:
Query: {user_query}
Return only the variations, one per line."""
variations = llm.generate(prompt).split('\n')
# Search with original + variations
all_results = []
for query in [user_query] + variations:
results = index.similarity_search(query_text=query, num_results=10)
all_results.extend(results)
# Deduplicate and return
return deduplicate_results(all_results)
예: "자동차 유지 관리"는 "자동차 수리", "차량 서비스", "자동 유지 관리"도 검색합니다.
자세한 방법은 다음을 참조하세요.
쿼리 다시 작성
복잡한 쿼리의 경우 세분화하거나 구문을 변경합니다. OpenAI RAG 전략을 참조하세요.
- 다중 홉 질문 → 순차 검색
- 모호한 쿼리 → 여러 특정 검색
- 분해 기술 참조
6단계: 고급 프롬프트 기술
프롬프트 최적화
MIPROv2 또는 GEPA( DSPy에서 사용 가능)와 같은 자동 프롬프트 최적화 기술을 사용하여 데이터 준비, 쿼리 다시 쓰기 또는 검색 시스템의 어디에서나 사용되는 프롬프트를 개선합니다. 지식 도우미 및 감독자 에이전트 는 저렴한 비용으로 대규모 성능 향상을 위해 GEPA를 통합합니다. 자동화된 프롬프트 최적화를 사용하여 최신 엔터프라이즈 에이전트를 90배 더 저렴하게 빌드하는 것을 참조하세요.
자세한 내용은 GEPA를 사용한 반사 프롬프트 진화를 참조하세요.
7단계: 적응 검색 전략
React 에이전트 패턴
검색을 지능적으로 오케스트레이션할 수 있는 에이전트를 빌드합니다.
- 에이전트는 검색이 필요한지 여부를 검토합니다.
- 초기 결과에 따라 쿼리를 다시 구성할 수 있습니다.
- 검색을 다른 도구(계산기, API 등)와 결합합니다.
- 수정된 쿼리를 사용하여 실패한 검색을 다시 시도합니다.
- Databricks Mosaic AI 에이전트 프레임워크를 사용하여 구현합니다.
에이전트 검색 예제
# Agent decides when to search and what filters to apply
# Based on conversation context and user intent
agent = create_agent(
tools=[vector_search_tool, calculator, web_search],
instructions="Retrieve relevant docs only when needed, apply appropriate filters"
)
8단계: 포함 모델 미세 조정
첫 번째: 임베딩 문제가 있는지 진단
빠른 테스트: Databricks에서 GTE와 OpenAI 포함을 비교합니다.
# Test with both embedding models
# Databricks native: gte-large-en-v1.5
gte_results = gte_index.similarity_search(query)
# OpenAI: text-embedding-3-large (3072 dims)
openai_results = openai_index.similarity_search(query)
# If OpenAI text-embedding-3-large significantly outperforms GTE:
# - Fine-tuning a smaller model could match or exceed OpenAI quality
# - You have an embedding model problem, not a data problem
해석:
-
text-embedding-3-large의 성능이gte-large-en보다 훨씬 더 좋은 경우, 미세 조정을 고려하세요. 더 작은 모델을 사용하여 비슷한 품질을 얻을 수 있습니다. -
text-embedding-3-large와gte-large-en의 성능이 거의 동일하다면, 문제는 임베딩 모델이 아닙니다. 다른 최적화에 집중합니다.
미세 조정 시기
중요합니다
미세 조정은 최후의 수단으로 간주되어야 하며 다음 조건을 충족하는 경우에만 고려해야 합니다.
- 1-7단계를 시도했습니다.
- OpenAI는 테스트에서 GTE보다 훨씬 우수합니다.
- 도메인별 어휘 또는 사용 사례가 있습니다.
비고
레이블이 지정된 학습 데이터가 필요하지 않습니다. Databricks의 세부 조정 블로그에 표시된 대로 가상 데이터 생성을 사용할 수 있습니다.