벡터 검색 검색 품질 가이드

이 가이드에서는 Mosaic AI Vector Search를 사용하여 실시간 RAG, 검색 및 일치하는 애플리케이션에 대한 검색 품질을 개선하는 체계적인 방법을 제공합니다. 권장 사항은 가장 높은 영향/최저 노력에서 가장 낮은 영향/가장 높은 노력으로 정렬됩니다.

필수 구성 요소: 평가 프레임워크 설정

검색 품질을 최적화하기 전에 재현 가능한 평가 시스템이 있어야 합니다 .

중요합니다

평가가 없는 경우 여기에서 중지하고 먼저 설정합니다. 측정하지 않고 최적화하는 것은 추측입니다.

대기 시간 요구 사항 정의

사용 사례에 따라 명확한 대기 시간 목표를 설정합니다.

  • RAG 에이전트: 처음 토큰까지의 시간(TTFT) 목표 (예: <2초)
  • 검색 표시줄: 결과를 표시하는 종단 간 대기 시간(예: <100msec)

모든 최적화는 이러한 요구 사항을 충족해야 합니다.

자동화된 평가 설정

다음 방법 중 하나 이상을 사용합니다.

핵심은 변경 내용을 측정하는 몇 가지 자동화된 방법을 갖는 것입니다. 완벽한 데이터는 필요하지 않습니다. 절대 점수가 아닌 다양한 전략을 테스트할 때 상대적인 개선 에 집중합니다. 작은 가상 데이터 세트조차도 재정렬로 품질이 15% 향상되는지 또는 하이브리드 검색이 특정 사용 사례에 도움이 되는지를 확인할 수 있습니다.

품질 메트릭 선택

사용 사례에 따라 품질 메트릭을 선택합니다.

회수가 가장 중요한 경우 (모든 관련 정보 필요):

  • RAG 에이전트: 주요 컨텍스트가 없으면 잘못된 답변 또는 환각이 발생합니다.
  • 제약 임상 시험 일치: 적격 환자 또는 관련 연구를 놓칠 수 없습니다.
  • 재무 규정 준수 검색: 모든 관련 규정, 위험 요소 또는 선례가 필요합니다.
  • 제조 근본 원인 분석: 관련된 모든 인시던트 및 오류 패턴을 표시해야 합니다.
  • 추적할 메트릭: Recall@k(예: recall@10, recall@50)

정밀도가 가장 중요한 경우 (가장 관련성이 큰 결과만 필요):

  • 엔터티 해상도/퍼지 매칭: 시스템 간 고객 레코드, 공급업체 이름 또는 제품 SKU를 일치시키기.
  • 금융 서비스 중복 제거: 신뢰도가 높은 중복 트랜잭션 또는 계정 식별
  • 공급망 부분 일치: 카탈로그 전체에서 정확하거나 호환되는 구성 요소 찾기
  • 기술 지원 기술 자료: 엔지니어는 최고의 결과에 정확한 솔루션이 필요합니다.
  • 추적할 메트릭: Precision@k(예: precision@3, precision@10).

균형 잡힌 사용 사례 (좋은 재현율과 정밀도 모두 필요):

  • M&A 실사: 리스크(식별)을 놓칠 수는 없지만 먼저 정확한 문서가 필요합니다.
  • 특허 사전 아트 검색: 가장 관련성이 큰 특허를 우선적으로 적용하는 포괄적인 범위입니다.
  • 고객 360 일치: 여러 시스템에서 고객 데이터 통합

키워드 정밀도를 의미 체계 이해와 결합합니다.

사용 시기:

  • 사용자는 특정 용어(제품 코드, 기술 용어)를 사용하여 검색합니다.
  • 특정 쿼리에 대해 정확히 일치해야 합니다.
  • 의미 체계 검색에서 명백한 키워드 일치 항목이 누락된 경우 대체를 원합니다.

메트릭에 미치는 영향:

  • 의미와 키워드 일치를 모두 포착하여 기억력을 개선합니다.
  • 특정 용어를 사용하는 쿼리의 정밀도 를 향상시킵니다.

구현: 모자이크 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
)

에이전트는 자동으로 다음을 수행합니다.

  1. 쿼리에서 관련 엔터티를 추출합니다.
  2. 적절한 SQL 유사 필터 문자열을 생성합니다.
  3. 의미 체계 이해와 정확한 필터링을 모두 사용하여 검색을 실행합니다.

영향: 관련성을 향상시키면서 검색 공간을 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 컨텍스트 창에 맞아야 합니다.

보다 강력한 최적화: 청크 크기를 과도하게 최적화하는 대신 다음 사항에 집중합니다.

  1. 메타데이터에 대한 정보 추출: 엔터티, 토픽 및 범주를 추출하여 정확한 필터링을 사용하도록 설정합니다.
  2. 고품질 구문 분석: ai_parse_document 사용하여 깨끗하고 구조화된 텍스트를 사용합니다.
  3. 의미 체계 메타데이터: 문서 요약 및 섹션 머리글을 청크에 추가합니다.

또한 다음과 같은 고급 방법을 고려합니다. 이러한 기술은 더 많은 노력이 필요하지만 더 큰 영향을 미칠 수 있습니다.

의미 체계 청크: 문장을 고정 크기가 아닌 유사성으로 그룹화합니다.

부모-자식 단위 (작은 것에서 큰 것으로 검색):

# 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-largegte-large-en의 성능이 거의 동일하다면, 문제는 임베딩 모델이 아닙니다. 다른 최적화에 집중합니다.

미세 조정 시기

중요합니다

미세 조정은 최후의 수단으로 간주되어야 하며 다음 조건을 충족하는 경우에만 고려해야 합니다.

  1. 1-7단계를 시도했습니다.
  2. OpenAI는 테스트에서 GTE보다 훨씬 우수합니다.
  3. 도메인별 어휘 또는 사용 사례가 있습니다.

비고

레이블이 지정된 학습 데이터가 필요하지 않습니다. Databricks의 세부 조정 블로그에 표시된 대로 가상 데이터 생성을 사용할 수 있습니다.