Dela via


Sökning efter mosaik-AI-vektorer

Den här artikeln ger en översikt över Databricks vektordatabaslösning, Mosaic AI Vector Search, inklusive vad den är och hur den fungerar.

Mosaic AI Vector Search är en vektordatabas som är inbyggd i Databricks Data Intelligence Platform och integrerad med dess styrnings- och produktivitetsverktyg. En vektordatabas är en databas som är optimerad för att lagra och hämta inbäddningar. Inbäddningar är matematiska representationer av det semantiska innehållet i data, vanligtvis text- eller bilddata. Inbäddningar genereras av en stor språkmodell och är en viktig komponent i många GenAI-program som är beroende av att hitta dokument eller bilder som liknar varandra. Exempel är RAG-system, rekommenderade system samt bild- och videoigenkänning.

Med Mosaic AI Vector Search skapar du ett vektorsökningsindex från en Delta-table. Indexet innehåller inbäddade data med metadata. Du kan sedan köra frågor mot indexet med hjälp av ett REST-API för att identifiera de mest liknande vektorerna och returnera de associerade dokumenten. Du kan strukturera indexet så att det automatiskt sync när den underliggande Delta table uppdateras.

Mosaic AI Vector Search stöder följande:

Hur fungerar Mosaic AI Vector Search?

Mosaic AI Vector Search använder HNSW-algoritmen (Hierarchical Navigable Small World) för sina ungefärliga närmsta grannsökningar och måttet för L2-avståndsavstånd för att mäta inbäddningsvektorlikhet. Om du vill använda cosinélikhet måste du normalisera dina inbäddningar för datapunkter innan du matar in dem i vektorsökning. När datapunkterna normaliseras är rangordningen som genereras av L2-avståndet samma som rangordningen ger av cosinélikhet.

Mosaic AI Vector Search stöder även sökning med nyckelordslikhet i hybrid, som kombinerar vektorbaserad inbäddningssökning med traditionella nyckelordsbaserade söktekniker. Den här metoden matchar exakta ord i frågan samtidigt som en vektorbaserad likhetssökning används för att samla in frågans semantiska relationer och kontext.

Genom att integrera dessa två tekniker hämtar hybridsök med nyckelordslikhet dokument som inte bara innehåller de exakta nyckelorden utan även de som är konceptuellt lika, vilket ger mer omfattande och relevanta sökresultat. Den här metoden är särskilt användbar i RAG-program where källdata har unika nyckelord som SKU:er eller identifierare som inte passar bra för ren likhetssökning.

Mer information om API:et finns i Python SDK-referensen och Fråga en slutpunkt för vektorsökning.

Beräkning av likhetssökning

Likhetssökningsberäkningen använder följande formel:

reciprocal av 1 plus kvadratavståndet

where dist är euklidiska avståndet mellan frågan q och indexposten x:

Eucidean avstånd, kvadratrot av summan av kvadratiska skillnader

Algoritm för nyckelordssökning

Relevanspoäng beräknas med okapi BM25. All text eller sträng columns genomsöks, inklusive inbäddning av källtext och metadata columns i text- eller strängformat. Tokeniseringsfunktionen delas vid ordgränser, tar bort skiljetecken och konverterar all text till gemener.

Hur likhetssökning och nyckelordssökning kombineras

Sökresultaten för likhetssökning och nyckelord kombineras med funktionen Reciprocal Rank Fusion (RRF).

RRF rescores varje dokument från varje metod med hjälp av poängen:

RRF-ekvation

I ekvationen ovan börjar rangordningen vid 0, summerar poängen för varje dokument och returnerar de dokument med högst poäng.

rrf_param styr den relativa betydelsen av högre rankade och lägre rankade dokument. Enligt litteraturen är rrf_param från set till 60.

Poängen normaliseras så att den högsta poängen är 1 och den lägsta poängen är 0 med hjälp av följande ekvation:

normalisering

Alternativ för att tillhandahålla vektorbäddningar

Om du vill skapa en vektordatabas i Databricks måste du först bestämma hur vektorbäddningar ska tillhandahållas. Databricks har stöd för tre alternativ:

  • Alternativ 1: Delta Sync Index med inbäddningar som beräknas av Databricks Du anger en Delta-källa table som innehåller data i textformat. Databricks beräknar inbäddningarna med hjälp av en modell som du anger och kan också spara inbäddningarna i en table i Unity Catalog. När Delta table uppdateras synkroniseras indexet med Delta table.

    Följande diagram illustrerar processen:

    1. Beräkna inbäddningar av frågor. Frågan kan innehålla metadatafilter.
    2. Utför likhetssökning för att identifiera de mest relevanta dokumenten.
    3. Returnera de mest relevanta dokumenten och lägg till dem i frågan.

    vektordatabas beräknar Databricks inbäddningar

  • Alternativ 2: Delta Sync Index med självhanterade inbäddningar Du anger en Delta-källa table som innehåller förberäknade inbäddningar. När Delta table uppdateras synkroniseras indexet med Delta table.

    Följande diagram illustrerar processen:

    1. Frågan består av inbäddningar och kan innehålla metadatafilter.
    2. Utför likhetssökning för att identifiera de mest relevanta dokumenten. Returnera de mest relevanta dokumenten och lägg till dem i frågan.

    vektordatabas, förberäknade inbäddningar

  • Alternativ 3: Direkt vektoråtkomstindex Du måste manuellt update indexet med REST-API när inbäddningarna table ändras.

    Följande diagram illustrerar processen:

    vektordatabas, preberäknade inbäddningar utan automatisk sync

Om du vill använda Mosaic AI Vector Search måste du skapa följande:

  • En slutpunkt för vektorsökning. Den här slutpunkten hanterar vektorsökningsindexet. Du kan anropa och update slutpunkten med hjälp av REST API eller SDK. Anvisningar finns i Skapa en slutpunkt för vektorsökning.

    Slutpunkter skalas upp automatiskt för att stödja indexets storlek eller antalet samtidiga begäranden. Slutpunkter skalas inte ned automatiskt.

  • Ett vektorsökningsindex. Vektorsökningsindexet skapas från en Delta-table och är optimerat för approximativa sökningar av närmaste granne i realtid. Målet med sökningen är att identifiera dokument som liknar frågan. Vektorsökningsindex visas i och styrs av Unity Catalog. Anvisningar finns i Skapa ett vektorsökningsindex .

Om du väljer att låta Databricks beräkna inbäddningarna kan du dessutom 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. Anvisningar finns i Betala per token Foundation Model API:er eller Skapa slutpunkter för betjäning av grundmodell.

Om du vill köra frågor mot modellens serverslutpunkt använder du antingen REST-API:et eller Python SDK. Din fråga kan definiera filter baserat på alla column i Delta table. Mer information finns i Använda filter för frågor, API-referensen eller Python SDK-referensen.

Krav

Behörighet att skapa och hantera slutpunkter för vektorsökning konfigureras med hjälp av åtkomstkontrollistor. Se ACL:er för vektorsökningsslutpunkt.

Dataskydd och autentisering

Databricks implementerar följande säkerhetskontroller för att skydda dina data:

  • Varje kundbegäran till Mosaic AI Vector Search är logiskt isolerad, autentiserad och auktoriserad.
  • Mosaic AI Vector Search krypterar alla vilande data (AES-256) och under överföring (TLS 1.2+).

Mosaic AI Vector Search stöder två autentiseringslägen:

  • Token för tjänstens huvudnamn. En administratör kan generate en token för tjänstens huvudnamn och skicka den till SDK:n eller API:et. Se använda tjänstens huvudnamn. För produktionsanvändningsfall rekommenderar Databricks att du använder en token för tjänstens huvudnamn.

    # Pass in a service principal
    vsc = VectorSearchClient(workspace_url="...",
            service_principal_client_id="...",
            service_principal_client_secret="..."
            )
    
  • Personlig åtkomsttoken. Du kan använda en personlig åtkomsttoken för att autentisera med Mosaic AI Vector Search. Se autentiseringstoken för personlig åtkomst. Om du använder SDK:t i en notebook-miljö genererar SDK automatiskt en PAT-token för autentisering.

    # Pass in the PAT token
    client = VectorSearchClient(workspace_url="...", personal_access_token="...")
    

Kundhanterade nycklar (CMK) stöds på slutpunkter som skapats den 8 maj 2024 eller senare.

Övervaka användning och kostnader

Med det fakturerbara användningssystemet table kan du övervaka användning och kostnader som är associerade med vektorsökningsindex och slutpunkter. Här är en exempelfråga:

WITH all_vector_search_usage (
  SELECT *,
         CASE WHEN usage_metadata.endpoint_name IS NULL
              THEN 'ingest'
              ELSE 'serving'
        END as workload_type
    FROM system.billing.usage
   WHERE billing_origin_product = 'VECTOR_SEARCH'
),
daily_dbus AS (
  SELECT workspace_id,
       cloud,
       usage_date,
       workload_type,
       usage_metadata.endpoint_name as vector_search_endpoint,
       SUM(usage_quantity) as dbus
 FROM all_vector_search_usage
 GROUP BY all
ORDER BY 1,2,3,4,5 DESC
)
SELECT * FROM daily_dbus

Mer information om innehållet i faktureringsanvändningen tablefinns i Fakturerbart användningssystem table referens. Ytterligare frågor finns i följande notebook-exempel.

Anteckningsbok för vektorsökningssystem tables sökfrågor

Get anteckningsbok

Begränsningar för resurs- och datastorlek

Följande table sammanfattar resurs- och datastorleksgränser för slutpunkter och index för vektorsökning:

Resurs Precision Limit
Slutpunkter för vektorsökning Per arbetsyta 100
Inbäddningar Per slutpunkt 320,000,000
Inbäddningsdimension Per index 4096
Index Per slutpunkt 50
Columns Per index 50
Columns Typer som stöds: Bytes, short, integer, long, float, double, boolean, string, timestamp, date
Metadatafält Per index 50
Indexnamn Per index 128 tecken

Följande begränsningar gäller för skapande och update av vektorsökningsindex:

Resurs Precision Limit
Radstorlek för Delta Sync Index Per index 100 KB
Inbäddning av källstorlek column för Delta Sync-index Per Index 32764 byte
Massuppsert-begärandestorlek limit för Direct Vector-index Per Index 10 MB
Massborttagning av begärandestorlek limit för Direct Vector-index Per Index 10 MB

Följande begränsningar gäller för fråge-API:et.

Resurs Precision Limit
Frågetextlängd Per fråga 32764 byte
Maximalt antal returnerade resultat Per fråga 10,000

Begränsningar

  • Behörigheter på rad- och column nivå stöds inte. Du kan dock implementera dina egna ACL:er på programnivå med hjälp av filter-API:et.

Ytterligare resurser