Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per migliorare la qualità del recupero in Ricerca AI, applica queste tecniche in ordine, partendo da quelle con il maggiore impatto e il minimo sforzo fino ad arrivare a quelle con il minore impatto e il massimo sforzo. Queste tecniche sono utili per applicazioni RAG, ricerca e corrispondenza in tempo reale.
Prerequisiti: Stabilire un framework di valutazione
Prima di ottimizzare la qualità del recupero, è necessario disporre di un sistema di valutazione riproducibile.
Importante
Se non hai una valutazione impostata, fermati qui e configurala prima. L'ottimizzazione senza misurazione è un'ipotesi.
Definire i requisiti di latenza
Stabilire destinazioni di latenza chiare in base al caso d'uso:
- Agenti RAG: obiettivo TTFT (tempo al primo token) (ad esempio, <2 sec)
- Barre di ricerca: latenza end-to-end per visualizzare i risultati (ad esempio, <100 msec)
Qualsiasi ottimizzazione che si prova deve soddisfare questi requisiti.
Configurare la valutazione automatizzata
Usare uno o più degli approcci seguenti:
- Set di dati golden esistente: Usare le coppie domanda-risposta etichettate.
- Set di valutazione sintetica: usare la generazione di dati sintetici di Databricks per generare automaticamente test case dai documenti.
- Valutazione senza ground-truth: utilizzare Databricks Agent Evaluation per valutare la qualità senza etichette.
La chiave prevede un modo automatizzato per misurare le modifiche. I dati perfetti non sono necessari. Concentrarsi sui miglioramenti relativi quando si testano strategie diverse, non punteggi assoluti. Anche un piccolo set di dati sintetico può indicare se la reranking migliora la qualità di 15% o se la ricerca ibrida aiuta il caso d'uso specifico.
Scegliere le metriche di qualità
Scegliere le metriche di qualità in base al caso d'uso:
Se il richiamo è ciò che conta di più (sono necessarie tutte le informazioni rilevanti):
- Agenti RAG: il contesto chiave mancante porta a risposte o allucinazioni non corrette.
- Abbinamento di trial clinici farmaceutici: non devono essere persi i pazienti idonei o gli studi rilevanti.
- Ricerca di conformità finanziaria: sono necessari tutti i regolamenti, i fattori di rischio o i precedenti pertinenti.
- Analisi della causa radice manifatturiera: deve evidenziare tutti gli eventi imprevisti correlati e i modelli di errore.
- Metrica da tenere traccia: Recall@k (ad esempio, recall@10, recall@50).
Se la precisione è più importante (sono necessari solo i risultati più rilevanti):
- Risoluzione delle entità/corrispondenza fuzzy: corrispondenza dei record dei clienti, dei nomi dei fornitori o degli SKU di prodotto tra i sistemi.
- Deduplicazione dei servizi finanziari: identificazione di transazioni o conti duplicati con elevata attendibilità.
- Corrispondenza dei componenti della catena di fornitura: individuazione di componenti esatti o compatibili tra i cataloghi.
- Knowledge Base di supporto tecnico: i tecnici necessitano della soluzione esatta nei risultati principali.
- Metrica da tenere traccia: Precision@k (ad esempio, precision@3, precision@10).
Casi d'uso bilanciati (richiedono sia un buon richiamo che una precisione):
- Due diligence di M&A: non si possono ignorare i rischi (richiamo), ma è necessario avere prima dei documenti pertinenti (precisione).
- Ricerca dello stato dell'arte dei brevetti: copertura completa con i brevetti più rilevanti prioritizzati.
- Integrazione Cliente 360: unificazione dei dati dei clienti attraverso più sistemi.
Passaggio 1: Abilitare la ricerca ibrida
Combinare la precisione delle parole chiave con la comprensione semantica.
Quando usare:
- Gli utenti cercano con termini specifici (codici di prodotto, termini tecnici).
- È necessaria una corrispondenza esatta per determinate query.
- È necessario un ripiego quando la ricerca semantica non individua corrispondenze evidenti delle parole chiave.
Impatto sulle metriche:
- Migliora il richiamo rilevando corrispondenze semantiche e di parole chiave.
- Migliora la precisione per le query con termini specifici.
Implementazione: modifica di una sola riga in Ricerca AI.
# Enable hybrid search
results = index.similarity_search(
query_text="error code E404",
query_type="HYBRID" # Combines vector and keyword search
)
Per altre informazioni, vedere Eseguire query su un indice di ricerca di intelligenza artificiale.
Passaggio 2: Implementare il filtro dei metadati
Questa è la tua leva più grande per la qualità dell'estrazione dati.
L'applicazione di filtri riduce notevolmente lo spazio di ricerca e migliora sia la precisione che il richiamo.
Impatto sulle metriche:
- Migliora notevolmente la precisione eliminando risultati irrilevanti.
- Migliora il richiamo all'interno del subset filtrato.
- Può ridurre lo spazio di ricerca di 90%+.
Examples
- Documentazione tecnica: Filtrare in base alla versione del prodotto, al componente o al modulo.
- Manuali dell'auto: filtra per marca, modello, anno.
- Supporto tecnico: filtra in base alla linea di prodotto, all'area geografica, alla categoria di problemi.
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
)
Selezione di filtri dinamici
Approccio programmatico:
# 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
Filtro basato su agente con 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
)
L'agente opera automaticamente:
- Estrae le entità pertinenti dalla query.
- Genera stringhe di filtro in stile SQL appropriate.
- Esegue la ricerca sia con la comprensione semantica che con un filtro preciso.
Impatto: può ridurre lo spazio di ricerca di 90%+ migliorando la pertinenza.
Passaggio 3: Aggiungi riordinamento
Modifica di una riga per circa 15% miglioramento della qualità.
Databricks offre un reranker predefinito perfetto per gli agenti RAG.
Impatto sulle metriche:
- Aumenta la precisione ottenendo un richiamo elevato con un minor numero di candidati.
- Funziona meglio quando si combina con tecniche come la ricerca ibrida e il filtro.
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"]
}
}
)
Per ulteriori informazioni, vedere Riorganizzare i risultati delle query.
Quando utilizzare
Perfetto per:
- Agenti RAG (la latenza è dominata dalla generazione di LLM).
- Applicazioni incentrate sulla qualità.
- QPS da basso a moderato (~5 QPS ottenibili con le impostazioni predefinite).
Reranker integrato non adatto per:
- Applicazioni QPS elevate (>5 QPS senza scalabilità aggiuntiva).
- Barre di ricerca in tempo reale che richiedono <una latenza di 100 msec.
- Applicazioni in cui un tempo di reranking inferiore a un secondo non è accettabile.
Prestazioni: classifica 50 risultati in meno di 1 secondo nei carichi di lavoro tipici. Velocità pari a circa 250 msec per blocchi più brevi.
Per casi d'uso a bassa latenza/non RAG
Il reranking può comunque offrire miglioramenti significativi di qualità per le barre di ricerca e le applicazioni high-QPS. È sufficiente un reranker più veloce. Prendere in considerazione la distribuzione di un modello di reranking leggero (ad esempio, cross-encoder/ms-marco-TinyBERT-L-2-v2) come modello personalizzato su Databricks Model Serving per il nuovo ordinamento inferiore a 100 millisecondi.
Passaggio 4: Migliorare la preparazione dei dati
Questa sezione descrive alcune tecniche che è possibile usare per migliorare la preparazione dei dati: suddivisione in blocchi, analisi, aggiunta di contesto semantico e pulizia dei dati.
Strategia di suddivisione in blocchi
L'ottimizzazione delle dimensioni dei blocchi rimane un'area attiva della ricerca. Il lavoro recente di DeepMind (LIMIT) mostra che gli incorporamenti non possono acquisire informazioni di base in contesti lunghi, rendendo questa decisione sfumata.
Punti di partenza per la sperimentazione:
# Common configurations to test
small_chunks = 256 # Better for precise fact retrieval
medium_chunks = 512 # Balanced approach
large_chunks = 1024 # More context per chunk
Compromessi chiave da considerare:
- Blocchi più piccoli: migliore localizzazione di informazioni specifiche, ma può perdere contesto.
- Blocchi più grandi: più contesto mantenuto, ma più difficile da individuare le informazioni pertinenti.
- Limiti di contesto: deve rientrare nella finestra di contesto LLM durante il recupero di più blocchi.
Ottimizzazioni più impattanti: invece di ottimizzare le dimensioni dei blocchi, concentrarsi su:
- Estrazione delle informazioni per i metadati: estrarre entità, argomenti e categorie per consentire un filtro preciso.
- Analisi di alta qualità: usare ai_parse_document per il testo pulito e strutturato.
- Metadati semantici: aggiungere riepiloghi di documenti e intestazioni di sezione ai blocchi.
Considerare anche i seguenti approcci avanzati. Queste tecniche richiedono maggiore impegno, ma possono avere un impatto maggiore:
Suddivisione in blocchi semantici: raggruppare le frasi in base alla somiglianza anziché alle dimensioni fisse.
- Usare gli incorporamenti per trovare limiti semantici naturali.
- Mantiene insieme le idee correlate.
- Migliore conservazione del contesto.
- Vedere La guida finale alle strategie di suddivisione in blocchi per le applicazioni RAG.
Suddivisione in blocchi padre-figlio (recupero da piccolo a grande):
# 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"]
)
Vedere la documentazione del recupero di documenti principali di LangChain.
Analisi dei documenti
Per i PDF e i documenti complessi, Databricks consiglia di usare ai_parse_document per l'analisi di alta qualità. L'analisi insufficiente (tabelle mancanti, formattazione interrotta) influisce direttamente sulla qualità del recupero.
Arricchire con metadati semantici
Aggiungere un contesto semantico per migliorare il recupero.
Perché funziona:
- Fornisce un segnale semantico aggiuntivo per l'incorporamento dei modelli.
- Fornisce più contesto ai reranker per l'assegnazione dei punteggi.
- Consente di gestire richieste che fanno riferimento a concetti a livello documentale.
Opzione 1: Includere i metadati in blocchi
# Prepend document summary to each chunk
chunk_with_context = f"""
Document: {doc_title}
Summary: {doc_summary}
Section: {section_name}
{chunk_content}
"""
Opzione 2: Archiviare come colonne di metadati separate
# 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"]
}
Importante
Questo approccio richiede l'elaborazione downstream per sfruttare i metadati:
- Per i metadati semantici: usare il reranking con il parametro
columns_to_rerankper prendere in considerazione queste colonne. - Per i metadati di sola parola chiave: usare la ricerca ibrida (modalità full-text) per la corrispondenza con questi campi.
Pulizia dei dati
- Rimuovere boilerplate (intestazioni, piè di pagina, numeri di pagina).
- Mantenere la struttura del documento (intestazioni, elenchi, tabelle).
- Mantenere i limiti semantici durante la segmentazione.
Passaggio 5: Ottimizzazione della query
Espansione delle query
Generare più varianti di query per migliorare il richiamo. Vedi la guida di LangChain.
Impatto: migliora il richiamo trovando documenti con terminologia diversa.
# 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)
Esempio: "manutenzione auto" cerca anche "riparazione automobile", "servizio di manutenzione del veicolo", "manutenzione auto"
Per altre tecniche, vedere:
Riformulazione delle query
Per le query complesse, scomporre o riformulare. Vedere Strategie RAG di OpenAI.
- Domande multi-hop → ricerche sequenziali
- Query ambigue → Ricerche specifiche multiple
- Vedere Tecniche di scomposizione
Passaggio 6: Tecniche avanzate di richiesta
Ottimizzazione prompt
Usare tecniche di ottimizzazione automatica dei prompt, ad esempio MIPROv2 o GEPA (disponibile in DSPy) per migliorare le richieste usate per la preparazione dei dati, la riscrittura delle query o in qualsiasi punto del sistema di recupero. Knowledge Assistant e Supervisor Agent incorporano GEPA per miglioramenti delle prestazioni di grandi dimensioni a basso costo. Vedi Costruire agenti aziendali all'avanguardia 90 volte più economici con l'ottimizzazione automatica dei prompt.
Per maggiori informazioni, consultare L'evoluzione del prompt riflettente con GEPA.
Passaggio 7: Strategie di recupero adattivo
Modello dell'agente React
Creare agenti che possono orchestrare in modo intelligente il recupero:
- Motivi dell'agente sull'eventuale necessità del recupero.
- Può riformulare le query in base ai risultati iniziali.
- Combina il recupero con altri strumenti (calcolatrici, API e così via).
- Riprova i recuperi non riusciti con query modificate.
- Implementare l'uso di agenti personalizzati.
Esempi di recupero agentico
# 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"
)
Passaggio 8: Ottimizzare i modelli di incorporamento
Prima di tutto: diagnosticare se si verifica un problema di incorporamento
Test rapido: confrontare GTE e incorporamenti OpenAI in 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
Interpretazione:
- Se
text-embedding-3-largeoffre prestazioni molto migliori rispetto agte-large-en, considerare una regolazione fine. È possibile ottenere una qualità simile con un modello più piccolo. - Se
text-embedding-3-largeesegue approssimativamente lo stesso comegte-large-en, il problema non è il modello di embedding. Concentrarsi su altre ottimizzazioni.
Quando ottimizzare
Importante
L'ottimizzazione deve essere considerata un'ultima risorsa e deve essere considerata solo quando vengono soddisfatti i criteri seguenti:
- Hai provato i passaggi da 1 a 7.
- OpenAI supera significativamente le prestazioni GTE nei test.
- Si dispone di un vocabolario specifico del dominio o del caso d'uso.
Note
Non sono necessari dati di training etichettati: è possibile usare la generazione di dati sintetici, come illustrato nel blog di incorporamento di Databricks.