Delen via


Een vectorzoekindex maken en er query's op uitvoeren

In dit artikel wordt beschreven hoe u een vectorzoekindex maakt en opvraagt met behulp van Mozaïek AI Vector Search.

U kunt vectorzoekonderdelen maken en beheren, zoals een vectorzoekeindpunt en vectorzoekindexen, met behulp van de gebruikersinterface, de Python SDK of de REST API.

Vereisten

  • Werkruimte met Unity Catalog ingeschakeld.
  • Serverloze rekenkracht ingeschakeld.
  • Voor de brontabel moet Wijzigingengegevensfeed zijn ingeschakeld.
  • Als u een index wilt maken, moet u CREATE TABLE-bevoegdheden hebben voor catalogusschema('s) om indexen te maken. Als u een query wilt uitvoeren op een index die eigendom is van een andere gebruiker, moet u extra bevoegdheden hebben. Zie Een vectorzoekeindpunt opvragen.
  • Als u persoonlijke toegangstokens wilt gebruiken (niet aanbevolen voor productieworkloads), controleert u of persoonlijke toegangstokens zijn ingeschakeld. Als u in plaats daarvan een service-principaltoken wilt gebruiken, geeft u dit expliciet door met behulp van SDK- of API-aanroepen.

Als u de SDK wilt gebruiken, moet u deze installeren in uw notebook. Gebruik de volgende code:

%pip install databricks-vectorsearch

dbutils.library.restartPython()

from databricks.vector_search.client import VectorSearchClient

Een vectorzoekeindpunt maken

U kunt een vectorzoekeindpunt maken met behulp van de Databricks-gebruikersinterface, Python SDK of de API.

Een vectorzoekeindpunt maken met behulp van de gebruikersinterface

Volg deze stappen om een vectorzoekeindpunt te maken met behulp van de gebruikersinterface.

  1. Klik in de linkerzijbalk op Compute.

  2. Klik op het tabblad Vector search en klik op Maken.

    Eindpuntformulier maken

  3. Het formulier Eindpunt maken wordt geopend. Voer een naam in voor dit eindpunt.

  4. Klik op Bevestigen.

Een vectorzoekeindpunt maken met behulp van de Python SDK

In het volgende voorbeeld wordt de SDK-functie create_endpoint() gebruikt om een vectorzoekeindpunt te maken.

# The following line automatically generates a PAT Token for authentication
client = VectorSearchClient()

# The following line uses the service principal token for authentication
# client = VectorSearch(service_principal_client_id=<CLIENT_ID>,service_principal_client_secret=<CLIENT_SECRET>)

client.create_endpoint(
    name="vector_search_endpoint_name",
    endpoint_type="STANDARD"
)

Een vectorzoekeindpunt maken met behulp van de REST API

Zie POST /api/2.0/vector-search/endpoints.

(Optioneel) Een eindpunt maken en configureren voor het insluitmodel

Als u ervoor kiest om databricks de insluitingen te laten berekenen, kunt u een vooraf geconfigureerd Foundation Model-API-eindpunt gebruiken of een model voor eindpunt maken om het insluitmodel van uw keuze te leveren. Zie Api's voor betalen per token Foundation-model of maak een generatief AI-model voor eindpunten voor instructies. Zie bijvoorbeeld notebookvoorbeelden voor het aanroepen van een model voor insluitingen.

Wanneer u een insluiteindpunt configureert, raadt Databricks u aan de standaardselectie van Schaal naar nul te verwijderen. Het kan enkele minuten duren voordat het verwerken van eindpunten is opgewarmd en de eerste query op een index met een uitgeschaald eindpunt kan een time-out opleveren.

Notitie

Er kan een time-out optreedt voor de initialisatie van de vectorzoekindex als het insluiteindpunt niet juist is geconfigureerd voor de gegevensset. Gebruik alleen CPU-eindpunten voor kleine gegevenssets en tests. Gebruik voor grotere gegevenssets een GPU-eindpunt voor optimale prestaties.

Een vectorzoekindex maken

U kunt een vectorzoekindex maken met behulp van de gebruikersinterface, de Python SDK of de REST API. De gebruikersinterface is de eenvoudigste benadering.

Er zijn twee typen indexen:

  • Delta Sync Index wordt automatisch gesynchroniseerd met een Delta-brontabel, waarbij de index automatisch en incrementeel wordt bijgewerkt wanneer de onderliggende gegevens in de Delta-tabel worden gewijzigd.
  • Direct Vector Access Index ondersteunt direct lezen en schrijven van vectoren en metagegevens. De gebruiker is verantwoordelijk voor het bijwerken van deze tabel met behulp van de REST API of de Python SDK. Dit type index kan niet worden gemaakt met behulp van de gebruikersinterface. U moet de REST API of de SDK gebruiken.

Index maken met behulp van de gebruikersinterface

  1. Klik in de linkerzijbalk op Catalogus om de gebruikersinterface van Catalog Explorer te openen.

  2. Navigeer naar de Delta-tabel die u wilt gebruiken.

  3. Klik op de knop Maken in de rechterbovenhoek en selecteer Vectorzoekindex in de vervolgkeuzelijst.

    Knop Index maken

  4. Gebruik de selectors in het dialoogvenster om de index te configureren.

    dialoogvenster index maken

    Naam: De naam die moet worden gebruikt voor de onlinetabel in Unity Catalog. Voor de naam is een naamruimte met drie niveaus vereist. <catalog>.<schema>.<name> Alleen alfanumerieke tekens en onderstrepingstekens zijn toegestaan.

    Primaire sleutel: Kolom die moet worden gebruikt als primaire sleutel.

    Eindpunt: Selecteer het eindpunt voor vectorzoekopdrachten dat u wilt gebruiken.

    Te synchroniseren kolommen: selecteer de kolommen die u wilt synchroniseren met de vectorindex. Als u dit veld leeg laat, worden alle kolommen uit de brontabel gesynchroniseerd met de index. De primaire sleutelkolom en de bronkolom of de insluitvectorkolom worden altijd gesynchroniseerd.

    Bron voor insluiten: geef aan of Databricks insluitingen moet berekenen voor een tekstkolom in de Delta-tabel (compute-insluitingen) of dat uw Delta-tabel vooraf berekende insluitingen bevat (bestaande insluitingskolom gebruiken).

    • Als u Compute-insluitingen hebt geselecteerd, selecteert u de kolom waarvoor u insluitingen wilt berekenen en het eindpunt dat het insluitmodel bedient. Alleen tekstkolommen worden ondersteund.
    • Als u bestaande insluitingskolom gebruiken hebt geselecteerd, selecteert u de kolom die de vooraf berekende insluitingen en de insluitingsdimensie bevat. De indeling van de vooraf samengestelde insluitingskolom moet zijn array[float].

    Berekende insluitingen synchroniseren: schakel deze instelling in om de gegenereerde insluitingen op te slaan in een Unity Catalog-tabel. Zie De gegenereerde insluitingstabel opslaan voor meer informatie.

    Synchronisatiemodus: continue houdt de index gesynchroniseerd met seconden latentie. Er zijn echter hogere kosten aan gekoppeld omdat een rekencluster is ingericht om de pijplijn voor continue synchronisatiestreaming uit te voeren. Geactiveerd is rendabeler, maar moet handmatig worden gestart met behulp van de API. Voor zowel doorlopend als geactiveerd is de update incrementeel: alleen gegevens die zijn gewijzigd sinds de laatste synchronisatie wordt verwerkt.

  5. Wanneer u klaar bent met het configureren van de index, klikt u op Maken.

Index maken met behulp van de Python SDK

In het volgende voorbeeld wordt een Delta Sync-index gemaakt met insluitingen die worden berekend door Databricks.

client = VectorSearchClient()

index = client.create_delta_sync_index(
  endpoint_name="vector_search_demo_endpoint",
  source_table_name="vector_search_demo.vector_search.en_wiki",
  index_name="vector_search_demo.vector_search.en_wiki_index",
  pipeline_type="TRIGGERED",
  primary_key="id",
  embedding_source_column="text",
  embedding_model_endpoint_name="e5-small-v2"
)

In het volgende voorbeeld wordt een Delta Sync-index gemaakt met zelfbeheerde insluitingen. In dit voorbeeld ziet u ook het gebruik van de optionele parameter columns_to_sync om alleen een subset van kolommen te selecteren die in de index moeten worden gebruikt.

client = VectorSearchClient()

index = client.create_delta_sync_index(
  endpoint_name="vector_search_demo_endpoint",
  source_table_name="vector_search_demo.vector_search.en_wiki",
  index_name="vector_search_demo.vector_search.en_wiki_index",
  pipeline_type="TRIGGERED",
  primary_key="id",
  embedding_dimension=1024,
  embedding_vector_column="text_vector"
)

Standaard worden alle kolommen uit de brontabel gesynchroniseerd met de index. Als u alleen een subset kolommen wilt synchroniseren, gebruikt u columns_to_sync. De primaire sleutel en het insluiten van kolommen worden altijd opgenomen in de index.

Als u alleen de primaire sleutel en de kolom voor insluiten wilt synchroniseren, moet u deze opgeven zoals columns_to_sync wordt weergegeven:

index = client.create_delta_sync_index(
  ...
  columns_to_sync=["id", "text_vector"] # to sync only the primary key and the embedding column
)

Als u extra kolommen wilt synchroniseren, geeft u deze op zoals wordt weergegeven. U hoeft de primaire sleutel en de insluitingskolom niet op te nemen, omdat ze altijd worden gesynchroniseerd.

index = client.create_delta_sync_index(
  ...
  columns_to_sync=["revisionId", "text"] # to sync the `revisionId` and `text` columns in addition to the primary key and embedding column.
)

In het volgende voorbeeld wordt een Direct Vector Access-index gemaakt.


client = VectorSearchClient()

index = client.create_direct_access_index(
  endpoint_name="storage_endpoint",
  index_name="{catalog_name}.{schema_name}.{index_name}",
  primary_key="id",
  embedding_dimension=1024,
  embedding_vector_column="text_vector",
  schema={
    "id": "int",
    "field2": "str",
    "field3": "float",
    "text_vector": "array<float>"}
)

Index maken met behulp van de REST API

Zie POST /api/2.0/vector-search/indexen.

Gegenereerde insluitingstabel opslaan

Als Databricks de insluitingen genereert, kunt u de gegenereerde insluitingen opslaan in een tabel in Unity Catalog. Deze tabel wordt gemaakt in hetzelfde schema als de vectorindex en is gekoppeld vanaf de vectorindexpagina.

De naam van de tabel is de naam van de vectorzoekindex, toegevoegd door _writeback_table. De naam kan niet worden bewerkt.

U kunt de tabel als elke andere tabel in Unity Catalog openen en er query's op uitvoeren. U moet de tabel echter niet verwijderen of wijzigen, omdat deze niet handmatig moet worden bijgewerkt. De tabel wordt automatisch verwijderd als de index wordt verwijderd.

Een vectorzoekindex bijwerken

Een Delta Sync-index bijwerken

Indexen die zijn gemaakt met de modus Continue synchronisatie, worden automatisch bijgewerkt wanneer de delta-brontabel wordt gewijzigd. Als u de synchronisatiemodus Geactiveerd gebruikt, kunt u de Python SDK of de REST API gebruiken om de synchronisatie te starten.

Python SDK

index.sync()

REST-API

Zie REST API (POST /api/2.0/vector-search/indexes/{index_name}/sync).

Een Direct Vector Access-index bijwerken

U kunt de Python SDK of de REST API gebruiken om gegevens in te voegen, bij te werken of te verwijderen uit een Direct Vector Access Index.

Python SDK

   index.upsert([{"id": 1,
       "field2": "value2",
       "field3": 3.0,
       "text_vector": [1.0, 2.0, 3.0]
       },
       {"id": 2,
        "field2": "value2",
        "field3": 3.0,
        "text_vector": [1.1, 2.1, 3.0]
        }
        ])

REST-API

Zie REST API (POST /api/2.0/vector-search/indexen).

Een vectorzoekeindpunt opvragen

U kunt alleen een query uitvoeren op het eindpunt voor vectorzoekopdrachten met behulp van de Python SDK, de REST API of de SQL vector_search() AI-functie.

Notitie

Als de gebruiker die het eindpunt opvraagt niet de eigenaar is van de vectorzoekindex, moet de gebruiker de volgende UC-bevoegdheden hebben:

  • USE CATALOG in de catalogus die de vectorzoekindex bevat.
  • GEBRUIK SCHEMA in het schema dat de vectorzoekindex bevat.
  • SELECT op de vectorzoekindex.

Als u een hybride zoekactie voor trefwoorden wilt uitvoeren, stelt u de parameter query_type in op hybrid. De standaardwaarde is ann (bij benadering dichtstbijzijnde buur).

Python SDK

# Delta Sync Index with embeddings computed by Databricks
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    num_results=2
    )

# Delta Sync Index using hybrid search, with embeddings computed by Databricks
results3 = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    num_results=2,
    query_type="hybrid"
    )

# Delta Sync Index with pre-calculated embeddings
results2 = index.similarity_search(
    query_vector=[0.2, 0.33, 0.19, 0.52],
    columns=["id", "text"],
    num_results=2
    )

REST-API

Zie POST /api/2.0/vector-search/indexes/{index_name}/query.

SQL

Belangrijk

De vector_search() AI-functie bevindt zich in openbare preview.

Zie vector_search functie om deze AI-functie te gebruiken.

Filters gebruiken voor query's

Een query kan filters definiëren op basis van elke kolom in de Delta-tabel. similarity_search retourneert alleen rijen die overeenkomen met de opgegeven filters. De volgende filters worden ondersteund:

Filteroperator Gedrag Voorbeelden
NOT Hiermee wordt het filter ontkend. De sleutel moet eindigen op 'NIET'. 'color NOT' met de waarde 'rood' komt bijvoorbeeld overeen met documenten waarbij de kleur niet rood is. {"id NOT": 2} {“color NOT”: “red”}
< Controleert of de veldwaarde kleiner is dan de filterwaarde. De sleutel moet eindigen op ' ' <. Bijvoorbeeld ' prijs <' met waarde 100 komt overeen met documenten waarbij de prijs kleiner is dan 100. {"id <": 200}
<= Hiermee wordt gecontroleerd of de veldwaarde kleiner is dan of gelijk is aan de filterwaarde. De sleutel moet eindigen op " <=". 'price <=' met waarde 100 komt bijvoorbeeld overeen met documenten waarbij de prijs kleiner is dan of gelijk is aan 100. {"id <=": 200}
> Controleert of de veldwaarde groter is dan de filterwaarde. De sleutel moet eindigen op ' ' >. 'prijs >' met waarde 100 komt bijvoorbeeld overeen met documenten waarbij de prijs groter is dan 100. {"id >": 200}
>= Hiermee wordt gecontroleerd of de veldwaarde groter is dan of gelijk is aan de filterwaarde. De sleutel moet eindigen op " >=". 'price >=' met waarde 100 komt bijvoorbeeld overeen met documenten waarbij de prijs groter is dan of gelijk is aan 100. {"id >=": 200}
OR Controleert of de veldwaarde overeenkomt met een van de filterwaarden. De sleutel moet OR meerdere subsleutels scheiden. Met waarde komt bijvoorbeeld color1 OR color2 overeen met documenten waarin color1 dat wel of color2 niet het geval is red blue.["red", "blue"] {"color1 OR color2": ["red", "blue"]}
LIKE Komt overeen met gedeeltelijke tekenreeksen. {"column LIKE": "hello"}
Er is geen filteroperator opgegeven Filter controleert op een exacte overeenkomst. Als er meerdere waarden zijn opgegeven, komt deze overeen met een van de waarden. {"id": 200} {"id": [200, 300]}

Zie de volgende codevoorbeelden:

Python SDK

# Match rows where `title` exactly matches `Athena` or `Ares`
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    filters={"title": ["Ares", "Athena"]}
    num_results=2
    )

# Match rows where `title` or `id` exactly matches `Athena` or `Ares`
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    filters={"title OR id": ["Ares", "Athena"]}
    num_results=2
    )

# Match only rows where `title` is not `Hercules`
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    filters={"title NOT": "Hercules"}
    num_results=2
    )

REST-API

Zie POST /api/2.0/vector-search/indexes/{index_name}/query.

Voorbeeldnotitieblokken

De voorbeelden in deze sectie laten het gebruik van de Python SDK voor vectorzoekopdrachten zien.

Voorbeelden van LangChain

Zie Hoe u LangChain gebruikt met Mozaïek AI Vector Search voor het gebruik van Mosaic AI Vector Search, net als in integratie met LangChain-pakketten.

In het volgende notebook ziet u hoe u zoekresultaten voor overeenkomsten converteert naar LangChain-documenten.

Vector zoeken met het Python SDK-notebook

Notebook downloaden

Notebookvoorbeelden voor het aanroepen van een model voor insluitingen

In de volgende notebooks wordt gedemonstreerd hoe u een Mozaïek AI Model Serve-eindpunt configureert voor het genereren van insluitingen.

Een OpenAI-insluitingsmodel aanroepen met behulp van een Mozaïek AI Model Serving-notebook

Notebook downloaden

Een GTE-insluitingsmodel aanroepen met behulp van een Mozaïek AI Model Serving-notebook

Notebook downloaden

Een OSS-notebook voor het insluiten van modellen registreren en leveren

Notebook downloaden