Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En esta guía se proporciona un enfoque sistemático para mejorar la calidad de recuperación en aplicaciones de búsqueda, coincidencia y RAG en tiempo real, mediante Mosaic AI Vector Search. Las recomendaciones se ordenan del mayor impacto o esfuerzo más bajo para el menor impacto o mayor esfuerzo.
Requisitos previos: Establecimiento del marco de evaluación
Antes de optimizar la calidad de recuperación, debe tener un sistema de evaluación reproducible.
Importante
Si no tiene la evaluación en su lugar, deténgase aquí y establézcala primero. La optimización sin medición es adivinación.
Definición de los requisitos de latencia
Establezca objetivos de latencia claros en función del caso de uso:
- Agentes RAG: objetivo de tiempo hasta el primer token (TTFT) (por ejemplo, <2 segundos)
- Barras de búsqueda: latencia de un extremo a otro para mostrar los resultados (por ejemplo, <100 msec)
Cualquier optimización que intente debe cumplir estos requisitos.
Configuración de la evaluación automatizada
Use uno o varios de los enfoques siguientes:
- Conjunto de datos dorado existente: use los pares de respuesta de consulta etiquetados.
- Conjunto de evaluación sintético: utilice la generación de datos sintéticos de Databricks para generar automáticamente casos de prueba a partir de sus documentos.
- Evaluación sin fundamento: use jueces de evaluación del agente de Databricks para evaluar la calidad sin etiquetas.
La clave es tener alguna manera automatizada de medir los cambios: no se requieren datos perfectos. Céntrese en mejoras relativas a medida que pruebe estrategias diferentes, no puntuaciones absolutas. Incluso un pequeño conjunto de datos sintético puede avisarle si el cambio de escala mejora la calidad en 15% o si la búsqueda híbrida ayuda a su caso de uso específico.
Elección de métricas de calidad
Elija las métricas de calidad en función del caso de uso:
Si la recuperación es importante más (necesita toda la información pertinente):
- Agentes RAG: el contexto clave que falta conduce a respuestas incorrectas o alucinaciones.
- Coincidencia de ensayos clínicos farmacéuticos: no se puede perder a los pacientes elegibles ni a los estudios pertinentes.
- Búsqueda de cumplimiento financiero: necesita todas las regulaciones, factores de riesgo o precedentes pertinentes.
- Análisis de la causa principal de fabricación: debe exponer todos los incidentes y patrones de error relacionados.
- Métrica para realizar un seguimiento: Recall@k (por ejemplo, recall@10, recall@50).
Si la precisión es importante más (solo necesita los resultados más relevantes):
- Resolución de entidades/coincidencia difusa: Coincidencia de registros de clientes, nombres de proveedores o SKU de productos en varios sistemas.
- Desduplicación de servicios financieros: identificación de transacciones o cuentas duplicadas con alta seguridad.
- Coincidencia de elementos de la cadena de suministro: buscar componentes exactos o compatibles entre catálogos.
- Base de conocimiento de soporte técnico: los ingenieros necesitan la solución exacta en los mejores resultados.
- Métrica para realizar un seguimiento: Precision@k (por ejemplo, precision@3, precision@10).
Casos de uso equilibrados (necesitan una buena recuperación y precisión):
- M&A due diligence: No se pueden ignorar los riesgos (exhaustividad), pero primero se necesitan documentos relevantes (precisión).
- Búsqueda de estado de la técnica en patentes: Cobertura completa, con prioridad en las patentes más relevantes.
- Customer 360 matching: unificar los datos de los clientes en los varios sistemas.
Paso 1: Habilitación de la búsqueda híbrida
Combine la precisión de palabras clave con comprensión semántica.
Cuándo usar:
- Los usuarios buscan con términos específicos (códigos de producto, términos técnicos).
- Necesita coincidencia exacta para determinadas consultas.
- ¿Quieres una alternativa cuando la búsqueda semántica no encuentre coincidencias evidentes de palabras clave?
Impacto en las métricas:
- Mejora la recuperación detectando coincidencias semánticas y de palabras clave.
- Mejora la precisión de las consultas con términos específicos.
Implementación: cambio de una línea en la Búsqueda de Vectores de Mosaic AI.
# Enable hybrid search
results = index.similarity_search(
query_text="error code E404",
query_type="HYBRID" # Combines vector and keyword search
)
Para obtener más información, consulte Consulta de un índice de búsqueda vectorial.
Paso 2: Implementar el filtrado de metadatos
Esta es su mayor palanca para la calidad de recuperación.
El filtrado reduce drásticamente el espacio de búsqueda y mejora la precisión y la recuperación.
Impacto en las métricas:
- Mejora drásticamente la precisión mediante la eliminación de resultados irrelevantes.
- Mejora la recuperación dentro del subconjunto filtrado.
- Puede reducir el espacio de búsqueda en 90%+.
Examples
- Documentación técnica: filtre por versión del producto, componente o módulo.
- Manuales de automóviles: Filtrar por marca, modelo, año.
- Atención al cliente: filtre por línea de producto, región, categoría de problema.
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
)
Selección de filtro dinámico
Enfoque mediante programación:
# 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
Filtrado basado en agente con 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
)
El agente actúa automáticamente:
- Extrae las entidades pertinentes de la consulta.
- Genera las cadenas de filtro de tipo SQL adecuadas.
- Ejecuta la búsqueda con comprensión semántica y filtrado preciso.
Impacto: puede reducir el espacio de búsqueda en 90%+ al tiempo que mejora la relevancia.
Paso 3: Agregar el reranking
Cambio de una línea para una mejora del 15% en la calidad.
Databricks proporciona un reranker integrado que es perfecto para los agentes RAG.
Impacto en las métricas:
- Aumenta la precisión al lograr un alto recall con menos candidatos.
- Funciona mejor cuando se combina con técnicas como la búsqueda híbrida y el filtrado.
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"]
}
}
)
Para obtener más información, consulte Reordenar los resultados de la consulta.
Cuándo usar
Perfecto para:
- Agentes RAG (la latencia está dominada por la generación de modelos de lenguaje extensos).
- Aplicaciones de primera calidad.
- QPS de baja a moderada (~5 QPS de forma predeterminada).
El reranker integrado no es adecuado para:
- Aplicaciones de QPS elevadas (>5 QPS sin escalado adicional).
- Barras de búsqueda en tiempo real que requieren <una latencia de 100 msec.
- Las aplicaciones en las que el tiempo de reordenamiento de 1.5s no es aceptable.
Rendimiento: Reclasifica 50 resultados en unos 1,5 segundos en cargas de trabajo típicas. Tan rápido como ~250 milisegundos para bloques más cortos.
Para casos de uso de baja latencia o sin RAG
El reordenamiento todavía puede proporcionar mejoras de calidad significativas para las barras de búsqueda y las aplicaciones de alta QPS: solo necesita tener un reordenador más rápido. Considere la posibilidad de implementar un modelo de reranking ligero (por ejemplo, cross-encoder/ms-marco-TinyBERT-L-2-v2) como un modelo personalizado en Databricks Model Serving para el reranking de menos de 100 ms.
Paso 4: Mejorar la preparación de datos
En esta sección se describen algunas técnicas que puede usar para mejorar la preparación de datos: fragmentación, análisis, adición de contexto semántico y limpieza de datos.
Estrategia de fragmentación
La optimización del tamaño del fragmento sigue siendo un área activa de investigación. El trabajo reciente de DeepMind (LIMIT) muestra que las incrustaciones pueden no capturar información básica en contextos largos, haciendo de esto una decisión matizada.
Puntos de partida para la experimentación:
# Common configurations to test
small_chunks = 256 # Better for precise fact retrieval
medium_chunks = 512 # Balanced approach
large_chunks = 1024 # More context per chunk
Ventajas clave que se deben tener en cuenta:
- Fragmentos más pequeños: mejor localización de información específica, pero puede perder contexto.
- Fragmentos más grandes: se conserva más contexto, pero más difícil de identificar información relevante.
- Límites de contexto: debe caber en la ventana de contexto de LLM al recuperar varios fragmentos.
Optimizaciones más impactantes: en lugar de optimizar demasiado el tamaño del fragmento, céntrese en:
- Extracción de información para metadatos: extraiga entidades, temas y categorías para habilitar el filtrado preciso.
- Análisis de alta calidad: use ai_parse_document para texto estructurado limpio.
- Metadatos semánticos: agregue resúmenes de documentos y encabezados de sección a fragmentos.
Tenga en cuenta también los siguientes enfoques avanzados. Estas técnicas requieren más esfuerzo, pero pueden tener un mayor impacto:
Fragmentación semántica: agrupa las oraciones por similitud en lugar de tamaño fijo.
- Usar embeddings para encontrar límites semánticos naturales.
- Mantiene las ideas relacionadas juntas.
- Mejor conservación del contexto.
- Consulte la guía definitiva sobre estrategias de fragmentación para aplicaciones RAG.
Fragmentación jerárquica (recuperación de menor a mayor tamaño):
# 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"]
)
Consulte la documentación del recuperador de documentos principal de LangChain.
Análisis de documentos
Para archivos PDF y documentos complejos, Databricks recomienda usar ai_parse_document para el análisis de alta calidad. El análisis deficiente (tablas que faltan, formato roto) afecta directamente a la calidad de recuperación.
Enriquecimiento con metadatos semánticos
Agregue contexto semántico para mejorar la recuperación.
Por qué funciona esto:
- Proporciona una señal semántica adicional para insertar modelos.
- Proporciona a los rerankers más contexto para evaluar las puntuaciones.
- Ayuda con las consultas que hacen referencia a conceptos de nivel de documento.
Opción 1: Incluir metadatos en fragmentos
# Prepend document summary to each chunk
chunk_with_context = f"""
Document: {doc_title}
Summary: {doc_summary}
Section: {section_name}
{chunk_content}
"""
Opción 2: Almacenar como columnas de metadatos independientes
# 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
Este enfoque requiere un procesamiento posterior para aprovechar los metadatos:
- En el caso de los metadatos semánticos: use la reordenación con el parámetro
columns_to_rerankpara considerar estas columnas. - Para metadatos de solo palabras clave: use la búsqueda híbrida (modo de texto completo) para que coincida con estos campos.
Limpieza de datos
- Eliminar partes repetitivas (encabezados, pies de página, números de página).
- Conservar la estructura del documento (encabezados, listas, tablas).
- Mantener límites semánticos al fragmentar.
Paso 5: Optimización de consultas
Expansión de consultas
Genere consultas variadas para mejorar la recuperación de información. Consulte la Guía LangChain.
Impacto: mejora la recuperación mediante la búsqueda de documentos con terminología diferente.
# 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)
Ejemplo: "mantenimiento del automóvil" también busca "reparación de automóviles", "servicio del vehículo", "mantenimiento del automóvil"
Para obtener más técnicas, consulte:
- Técnicas avanzadas de expansión de consultas
- Implementación del mecanismo de recuperación de consultas múltiples
Reformulación de consultas
Para consultas complejas, descomponerlas o reformularlas. Consulte las Estrategias RAG de OpenAI.
- Preguntas de varios saltos → búsquedas secuenciales
- Consultas ambiguas → varias búsquedas específicas
- Consulte Técnicas de descomposición
Paso 6: Técnicas avanzadas de indicaciones
Optimización del prompt
Use técnicas de optimización automática de mensajes como MIPROv2 o GEPA (disponible en DSPy) para mejorar las solicitudes usadas para la preparación de datos, la reescritura de consultas o cualquier lugar del sistema de recuperación. El Asistente de conocimientos y el Agente supervisor incorporan GEPA para mejoras de rendimiento grandes a bajo costo. Consulte la creación de agentes empresariales de última generación 90 veces más barato con optimización automatizada de sugerencias.
Para obtener más información, vea Reflect prompt Evolution with GEPA (Evolución del aviso reflectante con GEPA).
Paso 7: Estrategias de recuperación adaptable
Patrón de agente de React
Cree agentes que puedan orquestar de forma inteligente la recuperación:
- El agente evalúa si se necesita la recuperación de datos.
- Puede reconfigurar las consultas en función de los resultados iniciales.
- Combina la recuperación con otras herramientas (calculadoras, API, etc.).
- Reintentar recuperaciones fallidas con consultas modificadas.
- Implemente utilizando Databricks Mosaic AI Agent Framework.
Ejemplos de recuperación agéntica
# 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"
)
Paso 8: Ajustar modelos de inserción
En primer lugar: Diagnostique si tiene usted un problema de incrustación
Prueba rápida: compare GTE frente a inserciones de OpenAI en 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
Interpretación:
- Si
text-embedding-3-largefunciona mucho mejor quegte-large-en, considere la posibilidad de ajustar. Puede lograr una calidad similar con un modelo más pequeño. - Si
text-embedding-3-largerealiza aproximadamente lo mismo quegte-large-en, el problema no es el modelo de inserción. Céntrese en otras optimizaciones.
Cuándo hacer un ajuste preciso
Importante
El ajuste fino debe considerarse un último recurso y solo debe tenerse en cuenta cuando se cumplan los siguientes criterios:
- Ha probado los pasos 1 a 7.
- OpenAI supera significativamente el rendimiento de GTE en las pruebas.
- Tiene vocabulario específico del dominio o su caso de uso.
Nota:
No necesita datos de entrenamiento etiquetados: puede usar la generación de datos sintéticos como se muestra en el blog de Databricks sobre el ajuste fino de embeddings.