Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur du skapar slutpunkter och index för vektorsökning med hjälp av Mosaic AI Vector Search.
Du kan skapa och hantera vektorsökningskomponenter, till exempel en slutpunkt för vektorsökning och vektorsökningsindex, med hjälp av användargränssnittet, Python SDKeller REST API.
Exempel på notebook-filer som illustrerar hur du skapar och frågar efter vektorsökningsslutpunkter finns i Notebook-filer för vektorsökningsexempel. Referensinformation finns i Python SDK-referensen.
Kravspecifikation
- Unity Catalog-aktiverad arbetsyta
- Serverlös beräkning aktiverad. Anvisningar finns i Ansluta till serverlös beräkning.
- För standardslutpunkter måste källtabellen ha Ändringsdataflöde aktiverat. Se Använda Delta Lake-ändringsdataflöde i Azure Databricks.
- Om du vill skapa ett vektorsökningsindex måste du ha CREATE TABLE behörigheter i katalogschemat där indexet skapas.
- 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 Så här gör du för att fråga ett vektorsökningsindex.
Behörighet att skapa och hantera slutpunkter för vektorsökning konfigureras med hjälp av åtkomstkontrollistor. Se slutpunkts-ACL:er för vektorsökning.
Installation
Om du vill använda SDK för vektorsökning måste du installera det i din notebook. Använd följande kod för att installera paketet:
%pip install databricks-vectorsearch
dbutils.library.restartPython()
Använd sedan följande kommando för att importera VectorSearchClient:
from databricks.vector_search.client import VectorSearchClient
Information om autentisering finns i Dataskydd och autentisering.
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.
I det vänstra sidofältet klickar du på Compute.
Klicka på fliken Vector Search och klicka på Skapa.
Formuläret för att skapa slutpunkt öppnas. Ange ett namn för den här slutpunkten.
I fältet Typ väljer du Standard eller Lagringsoptimerad. Se Alternativ för slutpunkt.
(Valfritt) Under Avancerade inställningar väljer du en budgetprincip. Se Mosaic AI Vector Search: Budget policies (Mosaik-AI-vektorsökning: Budgetprinciper).
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 = VectorSearchClient(service_principal_client_id=<CLIENT_ID>,service_principal_client_secret=<CLIENT_SECRET>)
client.create_endpoint(
name="vector_search_endpoint_name",
endpoint_type="STANDARD" # or "STORAGE_OPTIMIZED"
)
Skapa en slutpunkt för vektorsökning med hjälp av REST-API:et
Se REST API-referensdokumentation: 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:er-slutpunkt eller skapa en modell som betjänar slutpunkten för att hantera den inbäddningsmodell du väljer. För instruktioner, se API:er för betalt per token-grundmodell eller Skapa slutpunkter för betjäning av grundmodeller. Exempel på notebook-filer finns i Vektorsökningsexempel notebook-filer.
När du konfigurerar en inbäddningsslutpunkt rekommenderar Databricks att du tar bort standardvalet för Skala till noll. Det kan ta några minuter för att värma upp slutpunkterna, och den första frågan i ett index med en nedskalad slutpunkt kan leda till timeout.
Anmärkning
Initialiseringen av vektorsökningsindexet kan överskrida tidsgränsen om slutpunkten för inbäddning inte är korrekt konfigurerad för datasetet. 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 indexet automatiskt 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.
Anmärkning
Kolumnnamnet _id är reserverat. Om källtabellen har en kolumn med namnet _idbyter du namn på den innan du skapar ett vektorsökningsindex.
Skapa index med hjälp av användargränssnittet
I det vänstra sidofältet klickar du på Catalog för att öppna katalogutforskarens användargränssnitt.
Gå till den Delta-tabell som du vill använda.
Klicka på knappen Skapa längst upp till höger och välj Vector-sökindex från den nedrullningsbara menyn.
Använd väljarna i dialogrutan för att konfigurera indexet.
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.
Kolumner som ska synkroniseras: (stöds endast för standardslutpunkter.) Välj de kolumner som ska synkroniseras med vektorindexet. Om du lämnar det här fältet tomt synkroniseras alla kolumner från källtabellen med indexet. Den primära nyckelkolumnen och den inbäddade källkolumnen eller vektorkolumnen för inbäddning synkroniseras alltid. För lagringsoptimerade slutpunkter synkroniseras alltid alla kolumner från källtabellen.
Inbäddningskälla: Ange om du vill att Databricks ska beräkna inbäddningar för en textkolumn i Delta-tabellen (Compute-inbäddningar), eller om deltatabellen innehåller förkomputerade 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 den inbäddningsmodell som ska användas för beräkningen. Endast textkolumner stöds.
För produktionsprogram som använder standardslutpunkter rekommenderar Databricks att du använder grundmodellen
databricks-gte-large-enmed ett etablerat dataflöde som betjänar slutpunkten.För produktionsapplikationer som använder lagringsoptimerade slutpunkter med modeller som är värd på Databricks, använd modellnamnet direkt (till exempel
databricks-gte-large-en) som inbäddningsmodellslutpunkt. Lagringsoptimerade slutpunkter användsai_querymed batchinferens vid inmatningstid, vilket ger högt dataflöde för inbäddningsjobbet. Om du föredrar att använda en etablerad dataflödesslutpunkt för frågor anger du denmodel_endpoint_name_for_queryi fältet när du skapar indexet.
Om du har valt Använd befintlig inbäddningskolumnvä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]. För lagringsoptimerade slutpunkter måste inbäddningsdimensionen vara jämnt delbar med 16.
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.
Slutpunkt för vektorsökning: Välj slutpunkten för vektorsökning för att lagra indexet.
Synkroniseringsläge: Kontinuerlig håller indexet synkroniserat med sekunder av svarstid. Dock är det förenat med högre kostnader eftersom ett beräkningskluster tillhandahålls för att köra den kontinuerliga synkroniseringsströmningsprocessen.
- För standardslutpunkter utför både kontinuerliga och utlösta inkrementella uppdateringar, så endast data som har ändrats sedan den senaste synkroniseringen bearbetas.
- För lagringsoptimerade slutpunkter återskapar varje synkronisering delvis indexet. För hanterade index vid efterföljande synkroniseringar återanvänds alla genererade inbäddningar där källraden inte har ändrats och behöver inte omberäknas. Se Begränsningar för lagringsoptimerade slutpunkter.
Med utlöst synkroniseringsläge använder du Python SDK eller REST API för att starta synkroniseringen. Se Uppdatera ett deltasynkroniseringsindex.
För lagringsoptimerade slutpunkter stöds endast utlöst synkroniseringsläge .
Avancerade inställningar: (Valfritt) Om du har valt Beräkningsinbäddningar kan du ange en separat inbäddningsmodell för att fråga ditt vektorsökindex. Detta kan vara användbart om du behöver en slutpunkt för högt dataflöde för inmatning men en slutpunkt med lägre svarstid för att köra frågor mot indexet. Modellen som anges i fältet Inbäddningsmodell används alltid för inmatning och används även för frågor, såvida du inte anger en annan modell här. Om du vill ange en annan modell klickar du på Välj separat inbäddningsmodell för att fråga indexet och väljer en modell på den nedrullningsbara menyn.
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. Mer information finns i Python SDK-referensen.
Det här exemplet visar också den valfria parametern model_endpoint_name_for_query, som anger en separat inbäddningsmodell som betjänar slutpunkten som ska användas för att fråga indexet.
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", # This model is used for ingestion, and is also used for querying unless model_endpoint_name_for_query is specified.
model_endpoint_name_for_query="e5-mini-v2" # Optional. If specified, used only for querying the index.
)
I följande exempel skapas ett Delta Sync-index med självhanterade inbäddningar.
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"
)
Som standard synkroniseras alla kolumner från källtabellen med indexet.
På standardslutpunkter kan du välja en delmängd av kolumner som ska synkroniseras med .columns_to_sync Primärnyckeln och inbäddningskolumnerna ingår alltid i indexet.
Om du bara vill synkronisera primärnyckeln och inbäddningskolumnen måste du ange dem i columns_to_sync enligt följande:
index = client.create_delta_sync_index(
...
columns_to_sync=["id", "text_vector"] # to sync only the primary key and the embedding column
)
Om du vill synkronisera ytterligare kolumner anger du dem som visas. Du behöver inte inkludera primärnyckeln och inbäddningskolumnen eftersom de alltid synkroniseras.
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.
)
I följande exempel skapas ett direktvektoråtkomstindex.
client = VectorSearchClient()
index = client.create_direct_access_index(
endpoint_name="storage_endpoint",
index_name=f"{catalog_name}.{schema_name}.{index_name}",
primary_key="id",
embedding_dimension=1024,
embedding_vector_column="text_vector",
schema={
"id": "int",
"field2": "string",
"field3": "float",
"text_vector": "array<float>"}
)
Skapa index med hjälp av REST-API:et
Se dokumentationen för REST API-referensen: 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 deltasynkroniseringsindex
Index som skapats med läget kontinuerlig synkronisering uppdateras automatiskt när Delta-källtabellen ändras. Om du använder utlöst synkroniseringsläge kan du starta synkroniseringen med hjälp av användargränssnittet, Python SDK eller REST-API:et.
Databricks-användargränssnitt
I Katalogutforskaren navigerar du till vektorsökningsindexet.
På fliken Översikt går du till avsnittet Datamatning och klickar på Synkronisera nu.
.
Python SDK
Mer information finns i Python SDK-referensen.
client = VectorSearchClient()
index = client.get_index(index_name="vector_search_demo.vector_search.en_wiki_index")
index.sync()
REST API
Se dokumentationen för REST API-referensen: 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
Mer information finns i Python SDK-referensen.
index.upsert([
{
"id": 1,
"field2": "value2",
"field3": 3.0,
"text_vector": [1.0] * 1024
},
{
"id": 2,
"field2": "value2",
"field3": 3.0,
"text_vector": [1.1] * 1024
}
])
REST API
Se dokumentationen för REST API-referensen: POST /api/2.0/vector-search/indexes.
För produktionsprogram rekommenderar Databricks att du använder tjänstens huvudnamn i stället för personliga åtkomsttoken. Prestanda kan förbättras med upp till 100 msec per fråga.
I följande kodexempel visas hur du uppdaterar ett index med hjälp av tjänstens huvudnamn.
export SP_CLIENT_ID=...
export SP_CLIENT_SECRET=...
export INDEX_NAME=...
export WORKSPACE_URL=https://...
export WORKSPACE_ID=...
# Set authorization details to generate OAuth token
export AUTHORIZATION_DETAILS='{"type":"unity_catalog_permission","securable_type":"table","securable_object_name":"'"$INDEX_NAME"'","operation": "WriteVectorIndex"}'
# Generate OAuth token
export TOKEN=$(curl -X POST --url $WORKSPACE_URL/oidc/v1/token -u "$SP_CLIENT_ID:$SP_CLIENT_SECRET" --data 'grant_type=client_credentials' --data 'scope=all-apis' --data-urlencode 'authorization_details=['"$AUTHORIZATION_DETAILS"']' | jq .access_token | tr -d '"')
# Get index URL
export INDEX_URL=$(curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url $WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME | jq -r '.status.index_url' | tr -d '"')
# Upsert data into vector search index.
curl -X POST -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url https://$INDEX_URL/upsert-data --data '{"inputs_json": "[...]"}'
# Delete data from vector search index
curl -X DELETE -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url https://$INDEX_URL/delete-data --data '{"primary_keys": [...]}'
I följande kodexempel visas hur du uppdaterar ett index med hjälp av en personlig åtkomsttoken (PAT).
export TOKEN=...
export INDEX_NAME=...
export WORKSPACE_URL=https://...
# Upsert data into vector search index.
curl -X POST -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url $WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME/upsert-data --data '{"inputs_json": "..."}'
# Delete data from vector search index
curl -X DELETE -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url $WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME/delete-data --data '{"primary_keys": [...]}'
Så här gör du schemaändringar utan avbrott
Om schemat för befintliga kolumner i källtabellen ändras måste du återskapa indexet. Om tillbakaskrivningstabellen är aktiverad måste du även återskapa indexet när nya kolumner läggs till i källtabellen. Om tillbakaskrivningstabellen inte är aktiverad behöver nya kolumner inte återskapa indexet.
Följ de här stegen för att återskapa och distribuera indexet utan stilleståndstid:
- Utför schemaändringen i källtabellen.
- Skapa ett nytt index.
- När det nya indexet är klart växlar du trafik till det nya indexet.
- Ta bort det ursprungliga indexet.