Leitfaden zur Qualität der KI-Suchergebnisse

Um die Abrufqualität von AI Search zu verbessern, gehen Sie diese Techniken der Reihe nach durch – von der höchsten Wirkung bei geringstem Aufwand bis zur geringsten Wirkung bei höchstem Aufwand. Diese Techniken sind nützlich für Rag-, Such- und Abgleichsanwendungen in Echtzeit.

Voraussetzungen: Einrichten eines Evaluierungsrahmens

Bevor Sie die Abrufqualität optimieren, müssen Sie über ein reproduzierbares Auswertungssystem verfügen.

Important

Wenn Sie keine Evaluierung haben, stoppen Sie hier und richten Sie diese zuerst ein. Optimierung ohne Messung ist Schätzarbeit.

Definieren von Latenzanforderungen

Richten Sie klare Latenzziele basierend auf Ihrem Anwendungsfall ein:

  • RAG-Agenten: Ziel für die Time to First Token (TTFT) (z.B. <2 Sekunden)
  • Suchleisten: End-to-End-Latenz zum Anzeigen von Ergebnissen (z. B. <100 ms)

Jede Optimierung, die Sie ausprobieren, muss diese Anforderungen erfüllen.

Einrichten der automatisierten Auswertung

Verwenden Sie einen oder mehrere der folgenden Ansätze:

  • Vorhandenes goldenes Dataset: Verwenden Sie Ihre beschrifteten Abfrage-Antwort-Paare.
  • Synthetische Auswertungsmenge: Verwenden Sie die synthetische Datengenerierung von Databricks, um automatisch Testfälle aus Ihren Dokumenten zu generieren.
  • Auswertung ohne Grundwahrheit: Verwenden Sie Databricks-Agentbewertung-Judges, um die Qualität ohne Bezeichnungen zu bewerten.

Der Schlüssel besteht darin, änderungen automatisiert zu messen – perfekte Daten sind nicht erforderlich. Konzentrieren Sie sich auf relative Verbesserungen , während Sie verschiedene Strategien testen, nicht auf absolute Ergebnisse. Selbst ein kleines synthetisches Dataset kann Ihnen mitteilen, ob die Neuanordnung die Qualität um 15 % verbessert oder ob die Hybridsuche Ihrem spezifischen Anwendungsfall hilft.

Auswählen von Qualitätsmetriken

Wählen Sie Ihre Qualitätsmetriken basierend auf Ihrem Anwendungsfall aus:

Wenn Rückruf am wichtigsten ist (benötigen Sie alle relevanten Informationen):

  • RAG-Agents: Fehlender Schlüsselkontext führt zu falschen Antworten oder Halluzinationen.
  • Übereinstimmung der klinischen Pharma-Studie: Es können keine berechtigten Patienten oder relevanten Studien fehlen.
  • Suche nach Finanzcompliance: Benötigen Sie alle relevanten Vorschriften, Risikofaktoren oder Präzedenzfälle.
  • Ursachenanalyse in der Fertigung: Muss alle zugehörigen Vorfälle und Fehlermuster aufdecken.
  • Metrik zum Nachverfolgen: Recall@k (z. B. recall@10, recall@50).

Wenn Präzision am wichtigsten ist (nur die relevantesten Ergebnisse benötigen):

  • Entitätsauflösung/Fuzzyvergleich: Übereinstimmende Kundendatensätze, Lieferantennamen oder Produkt-SKUs über Systeme hinweg.
  • Deduplizierung von Finanzdienstleistungen: Das Identifizieren doppelter Transaktionen oder Konten mit hoher Zuverlässigkeit.
  • Abgleich von Lieferkettenteilen: Suchen nach exakten oder kompatiblen Komponenten über Kataloge hinweg.
  • Tech-Support-Wissensdatenbank: Ingenieure benötigen die genaue Lösung in Top-Ergebnissen.
  • Metrik zum Nachverfolgen: Precision@k (z. B. precision@3, precision@10).

Ausgewogene Anwendungsfälle (benötigen sowohl eine gute Trefferquote als auch Präzision):

  • M&A-Due-Diligence: Risiken dürfen nicht übersehen werden (Abruf), aber zuerst werden relevante Dokumente benötigt (Genauigkeit).
  • Recherche zum Stand der Technik: Umfassende Abdeckung mit priorisierten, relevantesten Patenten.
  • Kunden-360-Abgleich: Vereinheitlichung von Kundendaten über mehrere Systeme hinweg.

Kombinieren Sie die Schlüsselwortgenauigkeit mit semantischem Verständnis.

Verwendungsbedingungen:

  • Benutzer suchen mit bestimmten Begriffen (Produktcodes, technische Begriffe).
  • Benötigen Sie eine genaue Übereinstimmung für bestimmte Abfragen.
  • Wollen Sie eine Alternative, wenn in der semantischen Suche offensichtliche Schlüsselwort-Übereinstimmungen nicht gefunden werden?

Auswirkungen auf Metriken:

  • Verbessert den Rückruf , indem sowohl semantische als auch Schlüsselwort-Übereinstimmungen eingefangen werden.
  • Verbessert die Genauigkeit für Abfragen mit bestimmten Ausdrücken.

Implementierung: Einzeilige Änderung in der KI-Suche.

# Enable hybrid search
results = index.similarity_search(
    query_text="error code E404",
    query_type="HYBRID"  # Combines vector and keyword search
)

Weitere Informationen finden Sie unter Abfragen eines KI-Suchindexes.

Schritt 2: Implementieren der Metadatenfilterung

Dies ist Ihr größter Hebel für die Abrufqualität.

Das Filtern reduziert den Suchbereich erheblich und verbessert sowohl Präzision als auch Rückrufe.

Auswirkungen auf Metriken:

  • Verbessert die Genauigkeit erheblich, indem irrelevante Ergebnisse eliminiert werden.
  • Verbessert den Abruf innerhalb der gefilterten Teilmenge.
  • Kann den Suchbereich um 90%+reduzieren.

Examples

  • Technische Dokumentation: Nach Produktversion, Komponente oder Modul filtern.
  • Autohandbücher: Filtern nach Make, Modell, Jahr.
  • Kundensupport: Nach Produktlinie, Region, Problemkategorie filtern.

Implementation

# AI 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
)

Dynamische Filterauswahl

Programmgesteuerter Ansatz:

# 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

Agentbasierte Filterung mit Databricks:

from databricks_ai_bridge.agents.tools.vector_search import VectorSearchTool

# Create the AI 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
)

Der Agent führt automatisch folgende Aktionen aus:

  1. Extrahiert relevante Entitäten aus der Abfrage.
  2. Generiert entsprechende SQL-ähnliche Filterzeichenfolgen.
  3. Führt die Suche mit semantischem Verständnis und präziser Filterung aus.

Auswirkung: Kann den Suchbereich um 90%+ reduzieren und gleichzeitig die Relevanz verbessern.

Schritt 3: Hinzufügen einer Neurankung

Einzeilige Änderung für ~15% Qualitätsverbesserung.

Databricks bietet einen integrierten Reranker, der ideal für RAG-Agenten ist.

Auswirkungen auf Metriken:

  • Erhöht die Präzision, indem ein hoher Recall mit weniger Kandidaten erzielt wird.
  • Funktioniert am besten in Kombination mit Techniken wie hybrider Suche und Filterung.

Implementation

# Python SDK
results = index.similarity_search(
    query_text="How to create an AI Search index",
    num_results=10,
    columns=["id", "text", "parent_doc_summary"],
    reranker={
        "model": "databricks_reranker",
        "parameters": {
            "columns_to_rerank": ["text", "parent_doc_summary"]
        }
    }
)

Weitere Informationen finden Sie unter "Rerank query results".

Wann verwenden?

Perfekt für:

  • RAG-Agents (Latenz wird durch LLM-Generierung dominiert).
  • Anwendungen, bei denen Qualität an erster Stelle steht.
  • Niedrige bis mittlere Anfragen pro Sekunde (~5 Anfragen pro Sekunde direkt nach der Installation).

Integrierter Reranker eignet sich nicht für:

  • Hohe QPS-Anwendungen (>5 QPS ohne zusätzliche Skalierung).
  • Echtzeitsuchleisten, die eine Latenz von <100 ms erfordern.
  • Anwendungen, bei denen eine Neuordnung der Rangfolge in unter einer Sekunde inakzeptabel ist.

Leistung: Ordnet 50 Ergebnisse in typischen Workloads in unter 1 Sekunde neu. So schnell wie ~250 msec für kürzere Abschnitte.

Für Anwendungsfälle mit geringer Latenz/Nicht-RAG

Das erneute Ranking kann bei Suchleisten und Anwendungen mit hohen QPS-Werten (Queries Per Second) immer noch zu erheblichen Qualitätsverbesserungen führen – Sie benötigen lediglich einen schnelleren Reranker. Erwägen Sie die Bereitstellung eines einfachen Reranking-Modells (z. B. cross-encoder/ms-marco-TinyBERT-L-2-v2) als benutzerdefiniertes Modell für die Databricks-Modellbereitstellung für ein erneutes Ranking in unter 100 ms.

Schritt 4: Verbessern der Datenvorbereitung

In diesem Abschnitt werden einige Techniken beschrieben, mit denen Sie die Datenvorbereitung verbessern können: Blöcke, Analysieren, Hinzufügen semantischer Kontext und Bereinigen von Daten.

Blockerstellungsstrategie

Die Optimierung der Blockgröße bleibt ein aktiver Forschungsbereich. Aktuelle Arbeiten von DeepMind (LIMIT) zeigen, dass Einbettungen grundlegende Informationen in langen Kontexten nicht erfassen können, wodurch dies eine differenzierte Entscheidung ist.

Ausgangspunkte für Experimente:

# Common configurations to test
small_chunks = 256   # Better for precise fact retrieval
medium_chunks = 512  # Balanced approach
large_chunks = 1024  # More context per chunk

Wichtige Trade-Offs, die sie berücksichtigen sollten:

  • Kleinere Blöcke: Bessere Lokalisierung bestimmter Informationen, kann aber den Kontext verlieren.
  • Größere Blöcke: Mehr Kontext bleibt erhalten, aber es ist schwieriger, relevante Informationen zu identifizieren.
  • Kontextbeschränkungen: Muss beim Abrufen mehrerer Blöcke innerhalb des LLM-Kontextfensters passen.

Wirkungsvollere Optimierungen: Anstatt die Datenstückgröße übermäßig zu optimieren, konzentrieren Sie sich auf:

  1. Informationsextraktion für Metadaten: Extrahieren Sie Entitäten, Themen und Kategorien, um eine präzise Filterung zu ermöglichen.
  2. Hochwertige Analyse: Verwenden Sie ai_parse_document für sauberen, strukturierten Text.
  3. Semantische Metadaten: Fügen Sie Dokumentzusammenfassungen und Abschnittsüberschriften zu Abschnitten hinzu.

Berücksichtigen Sie auch die folgenden erweiterten Ansätze. Diese Techniken erfordern mehr Aufwand, können aber größere Auswirkungen haben:

Semantische Gliederung: Gruppieren Sie Sätze nach Ähnlichkeit und nicht nach fester Größe.

Über-/untergeordnete Blockerstellung (Small-to-Big-Abruf):

# 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"]
)

Weitere Informationen finden Sie in der Dokumentation zum LangChain-Abruf für übergeordnete Dokumente.

Dokumentanalysen

Bei PDFs und komplexen Dokumenten empfiehlt Databricks die Verwendung von ai_parse_document für eine qualitativ hochwertige Analyse. Schlechte Analyse (fehlende Tabellen, fehlerhafte Formatierung) wirkt sich direkt auf die Abrufqualität aus.

Anreichern mit semantischen Metadaten

Fügen Sie semantischen Kontext hinzu, um den Abruf zu verbessern.

Warum dies funktioniert:

  • Stellt zusätzliches semantisches Signal für Einbettungsmodelle bereit.
  • Gibt Rerankern mehr Kontext für die Bewertung.
  • Hilft bei Abfragen, die auf Konzepte auf Dokumentebene verweisen.

Option 1: Einschließen von Metadaten in Blöcken

# Prepend document summary to each chunk
chunk_with_context = f"""
Document: {doc_title}
Summary: {doc_summary}
Section: {section_name}
{chunk_content}
"""

Option 2: Als separate Metadatenspalten speichern

# 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"]
}

Important

Für diesen Ansatz ist eine nachgelagerte Verarbeitung erforderlich, um die Metadaten zu nutzen:

  • Für semantische Metadaten: Verwenden Sie "Reranking" mit columns_to_rerank Parametern, um diese Spalten zu berücksichtigen.
  • Für nur Schlüsselwortmetadaten: Verwenden Sie die Hybridsuche im Volltextmodus, um diese Felder zu durchsuchen.

Datenreinigung

  • Entfernen Sie Textbausteine (Kopfzeilen, Fußzeilen, Seitenzahlen).
  • Dokumentstruktur beibehalten (Überschriften, Listen, Tabellen).
  • Behalten Sie bei der Blockerstellung semantische Grenzen bei.

Schritt 5: Abfrageoptimierung

Abfrageerweiterung

Generieren Sie mehrere Abfragevariationen, um den Rückruf zu verbessern. Siehe LangChain Guide.

Auswirkung: Verbessert den Rückruf , indem Dokumente mit unterschiedlicher Terminologie gefunden werden.

# 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)

Beispiel: "Autowartung" sucht auch nach "Automobilreparatur", "Fahrzeugwartung", "Autowartung"

Weitere Techniken finden Sie unter:

Anfrageumformulierung

Bei komplexen Abfragen diese zerlegen oder neu formulieren. Siehe OpenAI RAG-Strategien.

  • Multi-Hop-Fragen → Sequenzielle Suchen
  • Mehrdeutige Abfragen → Mehrere bestimmte Suchvorgänge
  • Siehe Zerlegungstechniken

Schritt 6: Erweiterte Prompting-Techniken

Promptoptimierung

Verwenden Sie automatische Eingabeaufforderungsoptimierungstechniken wie MIPROv2 oder GEPA (verfügbar in DSPy), um Ihre Eingabeaufforderungen zu verbessern, die für die Datenvorbereitung, abfrageumschreibung oder überall in Ihrem Abrufsystem verwendet werden. Wissensassistent und Supervisor Agent integrieren GEPA für große Leistungsverbesserungen zu niedrigen Kosten. Weitere Informationen finden Sie unter Erstellen hochmoderner Unternehmens-Agents, die durch automatisierte Promptoptimierung 90-mal günstiger sind.

Weitere Informationen finden Sie unter "Reflektierende Prompt Evolution" mit GEPA.

Schritt 7: Adaptive Abrufstrategien

React-Agent-Muster

Erstellen Sie Agents, die den Abruf intelligent koordinieren können:

  • Der Agent überlegt, ob der Abruf erforderlich ist.
  • Kann Abfragen basierend auf den ersten Ergebnissen neu erstellen.
  • Kombiniert den Abruf mit anderen Tools (Rechner, APIs usw.).
  • Wiederholen Sie fehlgeschlagene Abrufe mit geänderten Abfragen.
  • Implementieren sie mithilfe von benutzerdefinierten Agents.

Beispiele für Agent-Abruf

# 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"
)

Schritt 8: Feinabstimmung von Einbettungsmodellen

Erstens: Diagnostizieren Sie, ob Sie ein Einbettungsproblem haben

Schnelltest: Vergleichen Sie GTE mit OpenAI-Einbettungen auf Databricks.

# 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

Interpretation:

  • Wenn text-embedding-3-large eine viel bessere Leistung als gte-large-en aufweist, sollten Sie eine Feinabstimmung in Betracht ziehen. Sie können eine ähnliche Qualität mit kleinerem Modell erzielen.
  • Wenn text-embedding-3-large ungefähr dasselbe leistet wie gte-large-en, liegt das Problem nicht beim Einbettungsmodell. Konzentrieren Sie sich auf andere Optimierungen.

Zeitpunkt der Feinabstimmung

Important

Die Feinabstimmung sollte als letzter Ausweg betrachtet werden und nur in Betracht gezogen werden, wenn die folgenden Kriterien erfüllt sind:

  1. Sie haben die Schritte 1 bis 7 ausprobiert.
  2. OpenAI übertrifft GTE in Ihren Tests erheblich.
  3. Sie haben domänenspezifisches Vokabular oder Anwendungsfall.

Note

Sie benötigen keine beschrifteten Schulungsdaten – Sie können die synthetische Datengenerierung verwenden, wie im Einbettungsblog von Databricks gezeigt.