Anteckning
Å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.
Vektorer är högdimensionella inbäddningar som representerar text, bilder och annat innehåll matematiskt. Azure AI Search lagrar vektorer på fältnivå, vilket gör att vektor- och icke-bevektorinnehåll kan samexistera inom samma sökindex.
Ett sökindex blir ett vektorindex när du definierar vektorfält och en vektorkonfiguration. Om du vill fylla i vektorfält kan du push-överföra förberäknade inbäddningar till dem eller använda integrerad vektorisering, en inbyggd Azure AI Search-funktion som genererar inbäddningar under indexering.
Vid frågetillfället möjliggör vektorfälten i indexet likhetssökning, där systemet hämtar dokument vars vektorer mest liknar vektorfrågan. Du kan använda vektorsökning för likhetsmatchning ensam eller hybridsökning efter en kombination av likhet och nyckelordsmatchning.
Den här artikeln beskriver de viktigaste begreppen för att skapa och hantera ett vektorindex, inklusive:
- Mönster för vektorhämtning
- Innehåll (vektorfält och konfiguration)
- Fysisk datastruktur
- Grundläggande åtgärder
Tips/Råd
Vill du komma igång direkt? Se Skapa ett vektorindex.
Mönster för vektorhämtning
Azure AI Search stöder två mönster för vektorhämtning:
Klassisk sökning. Det här mönstret använder ett sökfält, frågeindata och renderade resultat. Under frågekörningen vektoriserar sökmotorn eller programkoden användarens indata. Sökmotorn utför sedan vektorsökning över vektorfälten i ditt index och formulerar ett svar som du renderar i en klientapp.
I Azure AI Search returneras resultaten som en utplattad raduppsättning och du kan välja vilka fält som ska inkluderas i svaret. Även om sökmotorn matchar vektorer bör ditt index ha icke-beläsbart innehåll som kan läsas av människor för att fylla i sökresultaten. Klassisk sökning stöder både vektorfrågor och hybridfrågor.
Generativ sökning. Språkmodeller använder data från Azure AI Search för att svara på användarfrågor. Ett orkestreringslager samordnar vanligtvis frågor och underhåller kontexten och matar sökresultat till chattmodeller som GPT. Det här mönstret baseras på RAG-arkitekturen (retrieval augmented generation), där sökindexet tillhandahåller grunddata.
Schema för ett vektorindex
Schemat för ett vektorindex kräver följande:
- Namn
- Nyckelfält (sträng)
- Ett eller flera vektorfält
- Vektorkonfiguration
Icke-vektorfält krävs inte, men vi rekommenderar att inkludera dem för hybridfrågor eller för att returnera ordagrant innehåll som inte bearbetas av en språkmodell. Mer information finns i Skapa ett vektorindex.
Indexschemat bör återspegla vektorhämtningsmönstret. I det här avsnittet beskrivs främst fältsammansättning för klassisk sökning, men det innehåller även schemavägledning för generativ sökning.
Grundläggande konfiguration av vektorfält
Vektorfält har unika datatyper och egenskaper. Så här ser ett vektorfält ut i en fältsamling:
{
"name": "content_vector",
"type": "Collection(Edm.Single)",
"searchable": true,
"retrievable": true,
"dimensions": 1536,
"vectorSearchProfile": "my-vector-profile"
}
Endast vissa datatyper stöds för vektorfält. Den vanligaste typen är Collection(Edm.Single)
, men att använda smala typer kan spara på lagringen.
Vektorfält måste vara sökbara och hämtningsbara, men de kan inte vara filterbara, fasettbara eller sorterbara. De kan inte heller ha analysverktyg, normaliserare eller synonymmappningstilldelningar.
Egenskapen dimensions
måste anges till antalet inbäddningar som genereras av inbäddningsmodellen. Text-embedding-ada-002 genererar till exempel 1 536 inbäddningar för varje textsegment.
Vektorfält indexeras med hjälp av algoritmer som anges i en vektorsökningsprofil, som definieras någon annanstans i indexet och inte visas i det här exemplet. Mer information finns i Lägga till en konfiguration för vektorsökning.
Fältsamling för grundläggande vektorarbetsbelastningar
Vektorindex kräver mer än bara vektorfält. Till exempel måste alla index ha ett nyckelfält, som finns id
i följande exempel:
"name": "example-basic-vector-idx",
"fields": [
{ "name": "id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "key": true },
{ "name": "content_vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": null },
{ "name": "content", "type": "Edm.String", "searchable": true, "retrievable": true, "analyzer": null },
{ "name": "metadata", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true }
]
Andra fält, till exempel fältet content
, anger den läsbara motsvarigheten till content_vector
fältet. Om du använder språkmodeller uteslutande för svarsformulering kan du utelämna icke-bevektorinnehållsfält, men lösningar som skickar sökresultat direkt till klientappar bör ha icke-bevektorinnehåll.
Metadatafält är användbara för filter, särskilt om de innehåller ursprungsinformation om källdokumentet. Även om du inte kan filtrera direkt på ett vektorfält kan du ange förfilter- eller postfilterlägen för att filtrera före eller efter körning av vektorfrågor.
Schema som genereras av guiden Importera och vektorisera data
Vi rekommenderar guiden Importera och vektorisera data för utvärderings- och koncepttestning. Guiden genererar exempelschemat i det här avsnittet.
Guiden delar upp innehållet i mindre sökdokument, vilket gynnar RAG-appar som använder språkmodeller för att formulera svar. Segmentering hjälper dig att hålla dig inom indatagränserna för språkmodeller och tokengränserna för semantisk rankning. Det förbättrar också precisionen i likhetssökningen genom att matcha frågor mot segment som hämtats från flera överordnade dokument. För mer information, se Segmentera stora dokument för vektorsökningslösningar.
För varje sökdokument i följande exempel finns det ett segment-ID, överordnat ID, segment, rubrik och vektorfält. Guiden:
Fyller i fälten
chunk_id
ochparent_id
med base64-kodade blobmetadata (sökväg).Extraherar fälten
chunk
ochtitle
från blobinnehållet respektive blobnamnet.Skapar fältet
vector
genom att anropa en Inbäddningsmodell för Azure OpenAI som du anger för att vektorisera fältetchunk
. Endast vektorfältet genereras helt under den här processen.
"name": "example-index-from-import-wizard",
"fields": [
{ "name": "chunk_id", "type": "Edm.String", "key": true, "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true, "analyzer": "keyword"},
{ "name": "parent_id", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true},
{ "name": "chunk", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "sortable": false},
{ "name": "title", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": false},
{ "name": "vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "vector-1707768500058-profile"}
]
Schema för generativ sökning
Om du utformar vektorlagring för RAG- och chattappar kan du skapa två index:
- En för statiskt innehåll som du indexerade och vektoriserade.
- En för konversationer som kan användas i promptflöden.
I illustrativt syfte använder det här avsnittet chat-with-your-data-solution-accelerator för att skapa indexen chat-index
och conversations
.
Följande fält från chat-index
stödjer generativa sökupplevelser:
"name": "example-index-from-accelerator",
"fields": [
{ "name": "id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true },
{ "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
{ "name": "content_vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "my-vector-profile"},
{ "name": "metadata", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
{ "name": "title", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "facetable": true },
{ "name": "source", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true },
{ "name": "chunk", "type": "Edm.Int32", "searchable": false, "filterable": true, "retrievable": true },
{ "name": "offset", "type": "Edm.Int32", "searchable": false, "filterable": true, "retrievable": true }
]
Följande fält från conversations
stöder orkestrering och chatthistorik:
"fields": [
{ "name": "id", "type": "Edm.String", "key": true, "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": false },
{ "name": "conversation_id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
{ "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
{ "name": "content_vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "default-profile" },
{ "name": "metadata", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
{ "name": "type", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
{ "name": "user_id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
{ "name": "sources", "type": "Collection(Edm.String)", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
{ "name": "created_at", "type": "Edm.DateTimeOffset", "searchable": false, "filterable": true, "retrievable": true },
{ "name": "updated_at", "type": "Edm.DateTimeOffset", "searchable": false, "filterable": true, "retrievable": true }
]
Följande skärmbild visar sökresultat för conversations
i Sökutforskaren:
I vårt exempel är sökpoängen 1,00 eftersom sökningen är okvalificerad. Flera fält stöder orkestrering och promptflöden:
-
conversation_id
identifierar varje chattsession. -
type
anger om innehållet kommer från användaren eller assistenten. -
created_at
ochupdated_at
tar bort chattar från historiken.
Fysisk struktur och storlek
I Azure AI Search är den fysiska strukturen för ett index till stor del en intern implementering. Du kan komma åt dess schema, läsa in och fråga dess innehåll, övervaka dess storlek och hantera dess kapacitet. Microsoft hanterar dock infrastruktur- och fysiska datastrukturer som lagras med din söktjänst.
Indexets storlek och ämne bestäms av följande:
Kvantitet och sammansättning av dina dokument.
Attribut för enskilda fält. Det krävs till exempel mer lagringsutrymme för filterbara fält.
Indexkonfiguration, inklusive vektorkonfigurationen som anger hur de interna navigeringsstrukturerna skapas. Du kan välja HNSW eller fullständig KNN för likhetssökning.
Azure AI Search begränsar vektorlagring, vilket hjälper till att upprätthålla ett balanserat och stabilt system för alla arbetsbelastningar. För att hjälpa dig att hålla dig under gränserna spåras vektoranvändningen och rapporteras separat i Azure-portalen och programmatiskt via tjänst- och indexstatistik.
Följande skärmbild visar en S1-tjänst som konfigurerats med en partition och en replik. Den här tjänsten har 24 små index, var och en med ett genomsnitt av ett vektorfält som består av 1 536 inbäddningar. Den andra panelen visar kvoten och användningen för vektorindex. Eftersom ett vektorindex är en intern datastruktur som skapats för varje vektorfält är lagring för vektorindex alltid en bråkdel av den totala lagring som används av indexet. Icke-vektorfält och andra datastrukturer förtär resten.
Gränser och uppskattningar för vektorindex beskrivs i en annan artikel, men två saker att betona är att maximal lagring beror på skapandedatum och prisnivå för söktjänsten. Nyare tjänster på samma nivå har betydligt mer kapacitet för vektorindex. Av följande skäl bör du:
Kontrollera skapandedatumet för söktjänsten. Om den skapades före den 3 april 2024 kanske du kan uppgradera tjänsten för större kapacitet.
Välj en skalbar nivå om du förväntar dig variationer i kraven på vektorlagring. För äldre söktjänster är Basic-nivån fast på en partition. Överväg Standard 1 (S1) och högre för mer flexibilitet och snabbare prestanda. I förhandsversionen 2025-02-01 kan du också växla från en lägre nivå till en högre nivå.
Grundläggande åtgärder och interaktion
I det här avsnittet beskrivs vektorkörningsåtgärder, inklusive anslutning till och skydd av ett enda index.
Kommentar
Det finns inget portal- eller API-stöd för att flytta eller kopiera ett index. Vanligtvis pekar du antingen din applikationsdistribution till en annan söktjänst (med samma indexnamn) eller ändrar namnet för att skapa en kopia på den aktuella söktjänsten och sedan bygga den.
Indexisolering
I Azure AI Search arbetar du med ett index i taget. Alla indexrelaterade åtgärder riktar sig mot ett enda index. Det finns inget begrepp om relaterade index eller sammanfogning av oberoende index för indexering eller frågor.
Kontinuerligt tillgänglig
Ett index är omedelbart tillgängligt för frågor så snart det första dokumentet indexeras, men det fungerar inte fullt ut förrän alla dokument har indexerats. Internt distribueras ett index mellan partitioner och körs på repliker. Det fysiska indexet hanteras internt. Du hanterar det logiska indexet.
Ett index är kontinuerligt tillgängligt och kan inte pausas eller tas offline. Eftersom det är utformat för kontinuerlig drift sker uppdateringar av innehållet och tillägg till själva indexet i realtid. Om en begäran sammanfaller med en dokumentuppdatering kan frågor tillfälligt returnera ofullständiga resultat.
Frågekontinuitet finns för dokumentåtgärder, till exempel uppdatering eller borttagning, och för ändringar som inte påverkar den befintliga strukturen eller integriteten för ett index, till exempel att lägga till nya fält. Strukturella uppdateringar, till exempel ändring av befintliga fält, hanteras vanligtvis med hjälp av ett drop-and-rebuild-arbetsflöde i en utvecklingsmiljö eller genom att skapa en ny version av indexet på produktionstjänsten.
För att undvika återskapande av index väljer vissa kunder som gör små ändringar att 'versionera' ett fält genom att skapa ett nytt som samexisterar med en tidigare version. Med tiden leder detta till överblivet innehåll genom föråldrade fält och föråldrade anpassade analysverktygsdefinitioner, särskilt i ett produktionsindex som är dyrt att replikera. Du kan åtgärda dessa problem under planerade uppdateringar av indexet som en del av indexets livscykelhantering.
Slutpunktsanslutning
Alla vektorindexerings- och frågebegäranden riktar sig mot ett index. Slutpunkter är vanligtvis en av följande:
Slutpunkt | Anslutning och åtkomstkontroll |
---|---|
<your-service>.search.windows.net/indexes |
Siktar in sig på indexsamlingen. Används när du skapar, listar eller tar bort ett index. Administratörsrättigheter krävs för dessa åtgärder och är tillgängliga via administratörs-API-nycklar eller en sökdeltagareroll. |
<your-service>.search.windows.net/indexes/<your-index>/docs |
Riktar in sig på dokumentsamlingen för ett enda index. Används när du kör frågor mot ett index eller en uppdatering av data. För frågor är läsbehörigheter tillräckliga och tillgängliga via fråge-API-nycklar eller en dataläsarroll. För datauppdatering krävs administratörsbehörighet. |
Så här ansluter du till Azure AI Search
Kontrollera att du har behörigheter eller en API-åtkomstnyckel. Såvida du inte ställer frågor mot ett befintligt index behöver du administratörsrättigheter eller rollen Deltagare för att hantera och visa innehåll i en söktjänst.
Börja med Azure Portal. Den person som skapade söktjänsten kan visa och hantera den, inklusive att ge åtkomst till andra på sidan Åtkomstkontroll (IAM).
Gå vidare till andra klienter för programmatisk åtkomst. För de första stegen rekommenderar vi snabbstart: Vektorsökning med REST och lagringsplatsen azure-search-vector-samples .
Hantera vektorlager
Azure tillhandahåller en övervakningsplattform som innehåller diagnostikloggning och aviseringar. Vi rekommenderar att du gör följande:
Säker åtkomst till vektordata
Azure AI Search implementerar datakryptering, privata anslutningar för scenarier utan Internet och rolltilldelningar för säker åtkomst via Microsoft Entra-ID. Mer information om företagssäkerhetsfunktioner finns i Säkerhet i Azure AI Search.