No pude captar la clase, lo que hice fue que gemini me generar el codigo para python paa crear multiples indices, para el ejemplo que se tiene 2 departamentos, finanzas y RRHH aqui esta el codigo
import os
from azure.core.credentials import AzureKeyCredential
from azure.search.document.indexes import SearchIndexClient
from azure.search.document.indexes.models import (
SearchIndex,
SearchField,
SearchFieldDataType,
SimpleField,
SearchableField,
VectorSearch,
VectorSearchProfile,
HnswAlgorithmConfiguration,
ScalarQuantizationCompression,
ScalarQuantizationParameters
)
# 1. Inicializar las credenciales del servicio
SERVICE_ENDPOINT = "https://windows.net"
API_KEY = "TU_API_KEY_DE_AZURE"
credential = AzureKeyCredential(API_KEY)
index_client = SearchIndexClient(endpoint=SERVICE_ENDPOINT, credential=credential)
# 2. Función reutilizable para crear índices vectoriales optimizados
def construir_indice_rag(nombre_indice: str, dimensiones_vector: int = 1536):
"""
Crea un índice en Azure AI Search configurado con HNSW y
compresión escalar para optimizar costos de memoria.
"""
# Campos base que compartirá cada índice RAG
fields = [
SimpleField(name="id", type=SearchFieldDataType.String, key=True),
SearchableField(name="titulo", type=SearchFieldDataType.String, analyzer_name="es.microsoft"),
SearchableField(name="contenido", type=SearchFieldDataType.String, analyzer_name="es.microsoft"),
# Campo vectorial para los embeddings del contenido
SearchField(
name="contenido_vector",
type=SearchFieldDataType.Collection(SearchFieldDataType.Single),
vector_search_dimensions=dimensiones_vector,
vector_search_profile_name="perfil-vectorial-optimizado"
)
]
# Configuración de búsqueda vectorial y ahorro de costos (Cuantización)
vector_search = VectorSearch(
algorithms=[
HnswAlgorithmConfiguration(
name="algoritmo-hnsw"
)
],
compressions=[
ScalarQuantizationCompression(
name="compresion-escalar",
parameters=ScalarQuantizationParameters(readonly=True) # Ahorra ~75% de RAM en Azure
)
],
profiles=[
VectorSearchProfile(
name="perfil-vectorial-optimizado",
algorithm_configuration_name="algoritmo-hnsw",
compression_configuration_name="compresion-escalar"
)
]
)
# Definición final del índice
index_definition = SearchIndex(
name=nombre_indice,
fields=fields,
vector_search=vector_search
)
# Crear o actualizar el índice en Azure
print(f"Creando índice: '{nombre_indice}'...")
resultado = index_client.create_or_update_index(index_definition)
print(f"¡Índice '{resultado.name}' creado con éxito!")
# 3. Creación masiva de múltiples índices
# Definimos los nombres de los índices que requiere nuestra arquitectura RAG
indices_a_crear = ["indice-rag-rrhh", "indice-rag-finanzas", "indice-rag-soporte"]
for nombre in indices_a_crear:
try:
# Usamos 1536 dimensiones (estándar para modelos como text-embedding-3-small de OpenAI)
construir_indice_rag(nombre_indice=nombre, dimensiones_vector=1536)
except Exception as e:
print(f"Error al crear el índice {nombre}: {e}")
****
****
Puntos clave de este diseño:
- create_or_update_index: Se utiliza en lugar de create_index. Si ejecutas el script más de una vez, no arrojará un error de "índice duplicado", sino que actualizará el esquema existente sin romper nada.
- Centralización del algoritmo: Todos los índices creados a través del ciclo heredan automáticamente el algoritmo de velocidad HnswAlgorithmConfiguration junto con la compresión ScalarQuantizationCompression para mantener bajo el costo de tu suscripción de Azure.
- Analizador en Español: Se configuró analyzer_name="es.microsoft" en los campos de texto para que las búsquedas híbridas (texto + vector) entiendan correctamente plurales, sinónimos y acentos en español.