Dela via


Sökning efter mosaik-AI-vektorer

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

Mosaic AI Vector Search är en vektorsökningslösning som är inbyggd i Databricks Data Intelligence Platform och integrerad med dess styrnings- och produktivitetsverktyg. Vektorsökning är en typ av sökning som är optimerad för att 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 generativa AI-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-tabell. 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 synkroniseras automatiskt när den underliggande Delta-tabellen 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 (ANN) 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 där 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:

inversen av 1 plus (kvadratavståndet)

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

Euklidiskt avstånd, kvadratrot av summan av kvadrerade skillnader

Algoritm för nyckelordssökning

Relevanspoäng beräknas med okapi BM25. Alla text- eller strängkolumner genomsöks, inklusive inbäddning av källtext och metadatakolumner i text- eller strängformat. Tokeniseringsfunktionen delar upp 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 beräknar om varje dokuments poäng från varje metod.

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. Baserat på litteraturen är rrf_param satt 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 ett vektorsökningsindex i Databricks måste du först bestämma hur vektorinbä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älltabell 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 tabell i Unity Catalog. När deltatabellen uppdateras förblir indexet synkroniserat med Delta-tabellen.

    Följande diagram illustrerar processen:

    1. Beräkna frågeinbäddningar. 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.

    vektorsökningsindex, Databricks beräknar inbäddningar

  • Alternativ 2: Delta Sync Index med självhanterade inbäddningar Du anger en Delta-källtabell som innehåller förberäknade inbäddningar. När deltatabellen uppdateras förblir indexet synkroniserat med Delta-tabellen.

    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.

    vektorsökningsindex, förberäknade inbäddningar

  • Alternativ 3: Direktvektoråtkomstindex Du måste uppdatera indexet manuellt med rest-API:et när inbäddningstabellen ändras.

    Följande diagram illustrerar processen:

    vektorsökningsindex, förberäknade inbäddningar utan automatisk synkronisering

Alternativ för slutpunkter

Mosaic AI Vector Search innehåller följande alternativ så att du kan välja den slutpunktskonfiguration som uppfyller programmets behov.

Anmärkning

Lagringsoptimerade slutpunkter finns i offentlig förhandsversion.

  • Standardslutpunkter har en kapacitet på 320 miljoner vektorer vid dimension 768.
  • Lagringsoptimerade slutpunkter har en större kapacitet (över en miljard vektorer vid dimension 768) och ger 10–20 x snabbare indexering. Frågor på lagringsoptimerade slutpunkter har en något ökad svarstid på cirka 250 msek. Prissättningen för det här alternativet är optimerad för det större antalet vektorer. Prisinformation finns på prissidan för vektorsökning. Information om hur du hanterar kostnader för vektorsökning finns i Guiden För ai-vektorsökning i Mosaik: Kostnadshantering.

Du anger slutpunktstypen när du skapar slutpunkten.

Se även Begränsningar för lagringsoptimerade slutpunkter.

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 fråga och uppdatera slutpunkten med hjälp av REST-API:et eller SDK:n. 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. Lagringsoptimerade slutpunkter skalas ned automatiskt när ett index tas bort. Standardslutpunkter skalas inte ned automatiskt.

  • Ett vektorsökningsindex. Vektorsökningsindexet skapas från en Delta-tabell och är optimerat för att ge ungefärliga ann-sökningar 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å valfri kolumn i Delta-tabellen. 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 slutpunkts-ACL:er för vektorsökning.

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, tjänstens huvudnamn och personliga åtkomsttoken (PAT). För produktionsprogram rekommenderar Databricks att du använder tjänsteprincipaler, vilket kan ha en hastighet per förfrågan upp till 100 ms snabbare i förhållande till personliga åtkomsttoken.

  • Token för tjänstens huvudidentitet. En administratör kan generera en token för tjänstens huvudnamn och skicka den till SDK:n eller API:et. Se använda tjänstens huvudnamn. För användningsfall i produktion rekommenderar Databricks att du använder en service principal-token.

    # 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 den fakturerbara användningssystemtabellen 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'
              WHEN usage_type = "STORAGE_SPACE" THEN 'storage'
              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,
       CASE WHEN workload_type = 'serving' THEN SUM(usage_quantity)
            WHEN workload_type = 'ingest' THEN SUM(usage_quantity)
            ELSE null
            END as dbus,
       CASE WHEN workload_type = 'storage' THEN SUM(usage_quantity)
            ELSE null
            END as dsus
 FROM all_vector_search_usage
 GROUP BY all
ORDER BY 1,2,3,4,5 DESC
)
SELECT * FROM daily_dbus

Du kan också fråga efter användning efter budgetprincip. Se Mosaic AI Vector Search: Budget policies (Mosaik-AI-vektorsökning: Budgetprinciper).

Mer information om innehållet i tabellen för faktureringsanvändning finns i tabellreferens för fakturerbart användningssystem. Ytterligare frågor finns i följande notebook-exempel.

Vektorsökningssystem, tabeller, sökfrågor och anteckningsbok

Hämta anteckningsbok

Begränsningar för resurs- och datastorlek

I följande tabell sammanfattas resurs- och datastorleksgränser för slutpunkter och index för vektorsökning:

Resurs Detaljnivå Gräns
Slutpunkter för vektorsökning Per arbetsyta 100
Inbäddningar (Delta Sync-index) Per standardslutpunkt ~ 320 000 000 vid 768 inbäddningsdimension
~ 160 000 000 vid 1536 inbäddningsdimension
~ 80 000 000 med 3 072 dimensioner för inbäddning
(skalas ungefär linjärt)
Inbäddningar (Direct Vector Access-index) Per standardslutpunkt ~ 2 000 000 vid 768 inbäddningsdimensioner
Inbäddningar (lagringsoptimerad slutpunkt) Per lagringsoptimerad slutpunkt ~ 1 000 000 000 vid 768 inbäddningsdimension
Inbäddningsdimension Per indexen 4096
Indexar Per slutpunkt 50
Kolumner Per indexen 50
Kolumner Typer som stöds: Bytes, short, integer, long, float, double, boolean, string, tidsstämpel, datum
Metadatafält Per indexen 50
Indexnamn Per indexen 128 tecken

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

Resurs Detaljnivå Gräns
Radstorlek för Delta Sync Index Per indexen 100 KB
Bädda in källkolumnstorlek för Delta Sync-index per index 32764 byte
Storleksgräns för massuppsertbegäran för Direct Vector-index per index 10 MB
Storleksgräns för massborttagningsbegäran för Direct Vector-index per index 10 MB

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

Resurs Detaljnivå Gräns
Frågetextlängd Per begäran 32764 tecken
Token när du använder hybridsökning Per begäran 1 024 ord eller 2 byte tecken
Filtervillkor Satsen Per filter 1024-element
Maximalt antal returnerade resultat (ungefärlig sökning efter närmaste granne) Per begäran 10 000
Maximalt antal returnerade resultat (hybridsökning med nyckelordslikhet) Per begäran 200

Begränsningar

  • Kolumnnamnet _id är reserverat. Om källtabellen har en kolumn med namnet _idbyter du namn på den innan du skapar ett vektorsökningsindex.
  • Behörigheter på rad- och kolumnnivå stöds inte. Du kan dock implementera dina egna ACL:er på programnivå med hjälp av filter-API:et.

Begränsningar för lagringsoptimerade slutpunkter

Begränsningarna i det här avsnittet gäller endast för lagringsoptimerade slutpunkter. Lagringsoptimerade slutpunkter finns i offentlig förhandsversion.

  • Kontinuerlig synkläge stöds inte.
  • Kolumner som ska synkroniseras stöds inte.
  • Inbäddningsdimensionen måste vara delbar med 16.
  • Inkrementell uppdatering stöds delvis. Varje synkronisering måste återskapa delar av vektorsökningsindexet.
    • För hanterade index återanvänds alla inbäddningar som tidigare beräknats om källraden inte har ändrats.
    • Du bör förvänta dig en betydande minskning av tiden från slutpunkt till slutpunkt som krävs för en synkronisering jämfört med standardslutpunkterna. Datauppsättningar med 1 miljard inbäddningar bör slutföra en synkronisering på under 8 timmar. Mindre datauppsättningar tar mindre tid att synkronisera.
  • FedRAMP-kompatibla arbetsytor stöds inte.
  • Kundhanterade nycklar (CMK) stöds inte.
  • Om du vill använda en anpassad inbäddningsmodell för ett hanterat Delta Sync-index måste förhandsversionen av AI-frågan för anpassade modeller och externa modeller vara aktiverad. Mer information om hur du aktiverar förhandsversioner finns i Hantera förhandsversioner av Azure Databricks .
  • Lagringsoptimerade slutpunkter stöder upp till 1 miljard inbäddningar av vektorer med 768 dimensioner. Om du har ett användningsfall i större skala, kontakta ditt kontoteam.

Ytterligare resurser