Dela via


Skapa och köra frågor mot ett vektorsökningsindex

Den här artikeln beskriver hur du skapar och frågar ett vektorsökningsindex med databricksvektorsökning.

Du kan skapa och hantera komponenter för vektorsökning, till exempel en slutpunkt för vektorsökning och vektorsökningsindex, med hjälp av användargränssnittet, Python SDK eller REST-API:et.

Krav

  • Unity Catalog-aktiverad arbetsyta.
  • Serverlös beräkning aktiverad.
  • Källtabellen måste ha Ändringsdataflöde aktiverat.
  • Om du vill skapa ett index måste du ha CREATE TABLE-behörigheter för katalogscheman för att skapa index. Om du vill köra frågor mot ett index som ägs av en annan användare måste du ha ytterligare behörigheter. Se Fråga en slutpunkt för vektorsökning.
  • Om du vill använda personliga åtkomsttoken (rekommenderas inte för produktionsarbetsbelastningar) kontrollerar du att personliga åtkomsttoken är aktiverade. Om du vill använda en token för tjänstens huvudnamn i stället skickar du den explicit med SDK- eller API-anrop.

Om du vill använda SDK:et måste du installera det i notebook-filen. Använd följande kod:

%pip install databricks-vectorsearch

dbutils.library.restartPython()

from databricks.vector_search.client import VectorSearchClient

Skapa en slutpunkt för vektorsökning

Du kan skapa en slutpunkt för vektorsökning med hjälp av Databricks-användargränssnittet, Python SDK eller API:et.

Skapa en slutpunkt för vektorsökning med hjälp av användargränssnittet

Följ de här stegen för att skapa en slutpunkt för vektorsökning med hjälp av användargränssnittet.

  1. Klicka på Beräkning i det vänstra sidofältet.

  2. Klicka på fliken Vektorsökning och klicka på Skapa.

    Skapa slutpunktsformulär

  3. Formuläret Skapa slutpunkt öppnas. Ange ett namn för den här slutpunkten.

  4. Klicka på Bekräfta.

Skapa en slutpunkt för vektorsökning med Hjälp av Python SDK

I följande exempel används funktionen create_endpoint() SDK för att skapa en slutpunkt för vektorsökning.

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

Skapa en slutpunkt för vektorsökning med hjälp av REST-API:et

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

(Valfritt) Skapa och konfigurera en slutpunkt för att hantera inbäddningsmodellen

Om du väljer att låta Databricks beräkna inbäddningarna kan du använda en förkonfigurerad FOUNDATION Model API-slutpunkt eller skapa en modell som betjänar slutpunkten för att hantera valfri inbäddningsmodell. Mer information finns i Api:er för Grundmodell för betalning per token eller Skapa grundmodell som betjänar slutpunkter. Exempel på notebook-filer finns i Notebook-exempel för att anropa en inbäddningsmodell.

När du konfigurerar en inbäddningsslutpunkt rekommenderar Databricks att du tar bort standardvalet Skala till noll. Det kan ta några minuter att värma upp serverdelsslutpunkterna, och den första frågan i ett index med en nedskalad slutpunkt kan överskrida tidsgränsen.

Kommentar

Initieringen av vektorsökningsindexet kan överskrida tidsgränsen om inbäddningsslutpunkten inte är korrekt konfigurerad för datauppsättningen. Du bör bara använda CPU-slutpunkter för små datamängder och tester. För större datamängder använder du en GPU-slutpunkt för optimala prestanda.

Skapa ett vektorsökningsindex

Du kan skapa ett vektorsökningsindex med hjälp av användargränssnittet, Python SDK eller REST-API:et. Användargränssnittet är den enklaste metoden.

Det finns två typer av index:

  • Delta Sync Index synkroniseras automatiskt med en deltatabell för källan, och uppdaterar automatiskt indexet när underliggande data i deltatabellen ändras.
  • Direct Vector Access Index stöder direkt läsning och skrivning av vektorer och metadata. Användaren ansvarar för att uppdatera den här tabellen med hjälp av REST API eller Python SDK. Det går inte att skapa den här typen av index med hjälp av användargränssnittet. Du måste använda REST-API:et eller SDK:n.

Skapa index med hjälp av användargränssnittet

  1. I det vänstra sidofältet klickar du på Katalog för att öppna katalogutforskarens användargränssnitt.

  2. Gå till den Delta-tabell som du vill använda.

  3. Klicka på knappen Skapa längst upp till höger och välj Vektorsökningsindex i den nedrullningsbara menyn.

    Knappen Skapa index

  4. Använd väljarna i dialogrutan för att konfigurera indexet.

    dialogrutan skapa index

    Namn: Namn som ska användas för onlinetabellen i Unity Catalog. Namnet kräver ett namnområde på tre nivåer, <catalog>.<schema>.<name>. Endast alfanumeriska tecken och understreck tillåts.

    Primärnyckel: Kolumn som ska användas som primärnyckel.

    Slutpunkt: Välj den slutpunkt för vektorsökning som du vill använda.

    Inbäddningskälla: Ange om du vill att Databricks ska beräkna inbäddningar för en textkolumn i Delta-tabellen (Beräkningsinbäddningar) eller om deltatabellen innehåller förberäknade inbäddningar (Använd befintlig inbäddningskolumn).

    • Om du har valt Beräkningsinbäddningar väljer du den kolumn som du vill att inbäddningar ska beräknas för och slutpunkten som betjänar inbäddningsmodellen. Endast textkolumner stöds.
    • Om du har valt Använd befintlig inbäddningskolumn väljer du den kolumn som innehåller de förberäknade inbäddningarna och inbäddningsdimensionen. Formatet för den förberäknade inbäddningskolumnen ska vara array[float].

    Synkronisera beräknade inbäddningar: Växla den här inställningen för att spara de genererade inbäddningarna i en Unity Catalog-tabell. Mer information finns i Spara genererad inbäddningstabell.

    Synkroniseringsläge: Kontinuerligt håller indexet synkroniserat med sekunders svarstid. Den har dock en högre kostnad som är associerad med den eftersom ett beräkningskluster har etablerats för att köra pipelinen för kontinuerlig synkroniseringsströmning. Utlöses är mer kostnadseffektivt, men måste startas manuellt med hjälp av API:et. För både Kontinuerlig och Utlöst är uppdateringen inkrementell – endast data som har ändrats sedan den senaste synkroniseringen bearbetas.

  5. När du har konfigurerat indexet klickar du på Skapa.

Skapa index med Python SDK

I följande exempel skapas ett Delta Sync-index med inbäddningar som beräknas av 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"
)

I följande exempel skapas ett direktvektoråtkomstindex.


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

Skapa index med hjälp av REST-API:et

Se POST /api/2.0/vector-search/indexes.

Spara genererad inbäddningstabell

Om Databricks genererar inbäddningarna kan du spara de genererade inbäddningarna i en tabell i Unity Catalog. Den här tabellen skapas i samma schema som vektorindexet och länkas från vektorindexsidan.

Namnet på tabellen är namnet på vektorsökningsindexet, som läggs till av _writeback_table. Namnet kan inte redigeras.

Du kan komma åt och köra frågor mot tabellen på samma sätt som andra tabeller i Unity Catalog. Du bör dock inte släppa eller ändra tabellen eftersom den inte är avsedd att uppdateras manuellt. Tabellen tas bort automatiskt om indexet tas bort.

Uppdatera ett vektorsökningsindex

Uppdatera ett Delta Sync-index

Index som skapas med läget För kontinuerlig synkronisering uppdateras automatiskt när deltatabellen för källan ändras. Om du använder utlöst synkroniseringsläge kan du använda Python SDK eller REST-API:et för att starta synkroniseringen.

Python-sdk

index.sync()

Rest API

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

Uppdatera ett direktvektoråtkomstindex

Du kan använda Python SDK eller REST API för att infoga, uppdatera eller ta bort data från ett 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

Se REST API (POST /api/2.0/vector-search/indexes).

Fråga en slutpunkt för vektorsökning

Du kan bara köra frågor mot slutpunkten för vektorsökning med hjälp av Python SDK eller REST-API:et.

Kommentar

Om användaren som frågar slutpunkten inte är ägare till vektorsökningsindexet måste användaren ha följande UC-behörigheter:

  • ANVÄND KATALOG i katalogen som innehåller vektorsökningsindexet.
  • ANVÄND SCHEMA för schemat som innehåller vektorsökningsindexet.
  • VÄLJ på vektorsökningsindexet.

Python-sdk

results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    num_results=2
    )

results

Rest API

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

Använda filter för frågor

En fråga kan definiera filter baserat på valfri kolumn i Delta-tabellen. similarity_search returnerar endast rader som matchar de angivna filtren. Följande filter stöds:

Filteroperator Funktionssätt Exempel
NOT Negerar filtret. Nyckeln måste sluta med "NOT". Till exempel matchar "color NOT" med värdet "red" dokument där färgen inte är röd. {"id NOT": 2} {“color NOT”: “red”}
< Kontrollerar om fältvärdet är mindre än filtervärdet. Nyckeln måste sluta med " <". Till exempel matchar "price <" med värdet 100 dokument där priset är mindre än 100. {"id <": 200}
<= Kontrollerar om fältvärdet är mindre än eller lika med filtervärdet. Nyckeln måste sluta med " <=". Till exempel matchar "price <=" med värdet 100 dokument där priset är mindre än eller lika med 100. {"id <=": 200}
> Kontrollerar om fältvärdet är större än filtervärdet. Nyckeln måste sluta med " >". Till exempel matchar "price >" med värdet 100 dokument där priset är större än 100. {"id >": 200}
>= Kontrollerar om fältvärdet är större än eller lika med filtervärdet. Nyckeln måste sluta med " >=". Till exempel matchar "price >=" med värdet 100 dokument där priset är större än eller lika med 100. {"id >=": 200}
OR Kontrollerar om fältvärdet matchar något av filtervärdena. Nyckeln måste innehålla OR för att avgränsa flera undernycklar. Med värdet matchar till exempel color1 OR color2 dokument där antingen color1 är red eller color2 är blue.["red", "blue"] {"color1 OR color2": ["red", "blue"]}
LIKE Matchar partiella strängar. {"column LIKE": "hello"}
Ingen filteroperator har angetts Filtrera söker efter en exakt matchning. Om flera värden anges matchar det något av värdena. {"id": 200} {"id": [200, 300]}

Se följande kodexempel:

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

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

Exempel på notebook-filer

Exemplen i det här avsnittet visar användningen av Python SDK för vektorsökning.

LangChain-exempel

Se Använda LangChain med Databricks Vector Search för att använda Databricks Vector Search som i integrering med LangChain-paket.

Följande notebook-fil visar hur du konverterar sökresultat för likhet till LangChain-dokument.

Vektorsökning med Python SDK-notebook-filen

Hämta notebook-fil

Notebook-exempel för att anropa en inbäddningsmodell

Följande notebook-filer visar hur du konfigurerar en Databricks-modell som betjänar slutpunkten för inbäddningsgenerering.

Anropa en OpenAI-inbäddningsmodell med hjälp av Databricks Model Serving Notebook

Hämta notebook-fil

Anropa en BGE-inbäddningsmodell med hjälp av Databricks Model Serving Notebook

Hämta notebook-fil

Registrera och hantera en OSS-inbäddningsmodellanteckningsbok

Hämta notebook-fil