Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u vectorgegevens maakt, de gegevens indexeert en vervolgens een query uitvoert op de gegevens in een container.
Voordat u vectorindexering en zoekopdrachten gebruikt, moet u eerst vectorzoekopdrachten inschakelen in Azure Cosmos DB voor NoSQL. Nadat u de Azure Cosmos DB-container voor vectorzoekopdrachten hebt ingesteld, maakt u een beleid voor het insluiten van vectoren. Vervolgens voegt u vectorindexen toe aan het indexeringsbeleid voor containers. Vervolgens maakt u een container met vectorindexen en een beleid voor het insluiten van vectoren. Ten slotte voert u een vectorzoekopdracht uit op de opgeslagen gegevens.
Vereiste voorwaarden
- Een bestaand Azure Cosmos DB for NoSQL-account.
- Als u geen Azure-abonnement hebt, kunt u er gratis een maken.
- Als u een bestaand Azure-abonnement hebt, maakt u een nieuw Azure Cosmos DB for NoSQL-account.
- De nieuwste versie van de Python SDK van Azure Cosmos DB.
De functie inschakelen
Voer de volgende stappen uit om vectorzoekopdrachten in te schakelen voor Azure Cosmos DB voor NoSQL:
- Ga naar de resourcepagina van uw Azure Cosmos DB voor NoSQL.
- Selecteer Functies in het linkerdeelvenster onder Instellingen.
- Selecteer Vector Search voor NoSQL-API.
- Lees de beschrijving van de functie om te bevestigen dat u deze wilt inschakelen.
- Selecteer Inschakelen om vectorzoekopdrachten in te schakelen in Azure Cosmos DB voor NoSQL.
Aanbeveling
U kunt ook de Azure CLI gebruiken om de mogelijkheden van uw account bij te werken ter ondersteuning van Azure Cosmos DB voor NoSQL Vector Search.
az cosmosdb update \
--resource-group <resource-group-name> \
--name <account-name> \
--capabilities EnableNoSQLVectorSearch
De registratieaanvraag wordt automatisch goedgekeurd, maar het kan 15 minuten duren voordat deze van kracht is.
Inzicht in de stappen die betrokken zijn bij vectorzoekopdrachten
In de volgende stappen wordt ervan uitgegaan dat u weet hoe u een Azure Cosmos DB for NoSQL-account instelt en een database maakt. De vectorzoekfunctie wordt momenteel niet ondersteund voor bestaande containers. U moet een nieuwe container maken. Wanneer u de container maakt, geeft u het insluitbeleid voor vectoren op containerniveau en het indexeringsbeleid voor vectoren op.
Laten we een voorbeeld nemen van het maken van een database voor een internetboekwinkel. U wilt titel-, auteur-, ISBN- en beschrijvingsinformatie voor elk boek opslaan. U moet ook de volgende twee eigenschappen definiëren voor het insluiten van vectoren:
- De
contentVectoreigenschap bevat tekst insluitingen die worden gegenereerd op basis van de tekstinhoud van het boek. U voegt bijvoorbeeld de eigenschappentitle,author,isbnendescriptionsamen voordat u de insluiting maakt. - De
coverImageVectoreigenschap wordt gegenereerd op basis van afbeeldingen van de omslag van het boek.
Als u een vectorzoekopdracht wilt uitvoeren, gaat u als volgt te werk:
- Vector insluitingen maken en opslaan voor de velden waarop u vectorzoekopdrachten wilt uitvoeren.
- Geef de paden voor het insluiten van vectoren op in het beleid voor het insluiten van vectoren.
- Neem eventuele vectorindexen op die u wilt opnemen in het indexeringsbeleid voor de container.
Bekijk voor volgende secties van dit artikel de volgende structuur voor de items die zijn opgeslagen in uw container:
{
"title": "book-title",
"author": "book-author",
"isbn": "book-isbn",
"description": "book-description",
"contentVector": [2, -1, 4, 3, 5, -2, 5, -7, 3, 1],
"coverImageVector": [0.33, -0.52, 0.45, -0.67, 0.89, -0.34, 0.86, -0.78]
}
Een vectorinsluitingsbeleid maken voor uw container
U moet nu een containervectorbeleid definiëren. Dit beleid bevat informatie die wordt gebruikt om de Azure Cosmos DB-query-engine te informeren over het verwerken van vectoreigenschappen in de VectorDistance systeemfuncties. Dit beleid biedt ook noodzakelijke informatie aan het vectorindexeringsbeleid, als u ervoor kiest om er een op te geven.
De volgende informatie is opgenomen in het containervectorbeleid:
| Kenmerk | Description |
|---|---|
path |
Het eigenschapspad dat vectoren bevat. |
datatype |
Het type van de elementen van de vector. De standaardwaarde is Float32. |
dimensions |
De lengte van elke vector in het pad. De standaardwaarde is 1536. |
distanceFunction |
De metrische waarde die wordt gebruikt voor het berekenen van afstand/overeenkomsten. De standaardwaarde is Cosine. |
Voor het voorbeeld met boekdetails kan het vectorbeleid eruitzien als in het volgende voorbeeld:
vector_embedding_policy = {
"vectorEmbeddings": [
{
"path": "/coverImageVector",
"dataType": "float32",
"distanceFunction": "dotproduct",
"dimensions": 8
},
{
"path": "/contentVector",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 10
}
]
}
Een vectorindex maken in het indexeringsbeleid
Nadat u de paden voor het insluiten van vectoren hebt bepaald, moet u vectorindexen toevoegen aan het indexeringsbeleid. Het indexeringsbeleid ziet er ongeveer als volgt uit:
indexing_policy = {
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?",
"path": "/coverImageVector/*",
"path": "/contentVector/*"
}
],
"vectorIndexes": [
{"path": "/coverImageVector",
"type": "quantizedFlat"
},
{"path": "/contentVector",
"type": "quantizedFlat"
}
]
}
Belangrijk
Het vectorpad wordt toegevoegd aan de excludedPaths sectie van het indexeringsbeleid om geoptimaliseerde prestaties voor invoeging te garanderen. Als het vectorpad niet wordt toegevoegd aan excludedPaths, leidt dit tot hogere kosten per aanvraageenheid en grotere latentie voor vectorinvoegingen.
Op dit moment wordt vectorzoekopdrachten in Azure Cosmos DB voor NoSQL alleen ondersteund in nieuwe containers. U moet zowel het containervectorbeleid als een vectorindexeringsbeleid instellen wanneer u de container maakt, omdat u deze later niet kunt wijzigen.
Een container maken met een vectorbeleid
Momenteel wordt de vectorzoekfunctie voor Azure Cosmos DB voor NoSQL alleen ondersteund voor nieuwe containers. Wanneer u de container maakt, past u het vectorbeleid toe. U kunt het beleid later niet meer wijzigen.
try:
container = db.create_container_if_not_exists(
id=CONTAINER_NAME,
partition_key=PartitionKey(path='/id'),
indexing_policy=indexing_policy,
vector_embedding_policy=vector_embedding_policy)
print('Container with id \'{0}\' created'.format(id))
except exceptions.CosmosHttpResponseError:
raise
Een zoekquery voor vector-overeenkomsten uitvoeren
Nadat u een container hebt gemaakt met het vectorbeleid dat u wilt gebruiken en vectorgegevens in de container hebt ingevoegd, gebruikt u de functie VectorDistance in een query om een vectorzoekopdracht uit te voeren.
Stel dat u wilt zoeken naar boeken over voedselrecepten door de beschrijving te bekijken. U moet eerst de embeddingen voor uw query-tekst ophalen. In dit geval wilt u mogelijk insluitingen genereren voor de querytekst food recipe. Nadat u de insluiting voor uw zoekquery hebt uitgevoerd, kunt u deze gebruiken in de VectorDistance functie in de vectorzoekquery om alle items op te halen die vergelijkbaar zijn met uw query:
SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3,4,5,6,7,8,9,10]) AS SimilarityScore
FROM c
ORDER BY VectorDistance(c.contentVector, [1,2,3,4,5,6,7,8,9,10])
Met deze query worden de boektitels samen met overeenkomstenscores opgehaald met betrekking tot uw query. Hier volgt een voorbeeld in Python:
query_embedding = [1,2,3,4,5,6,7,8,9,10]
# Query for items
for item in container.query_items(
query='SELECT c.title, VectorDistance(c.contentVector,@embedding) AS SimilarityScore FROM c ORDER BY VectorDistance(c.contentVector,@embedding)',
parameters=[
{"name": "@embedding", "value": query_embedding}
],
enable_cross_partition_query=True):
print(json.dumps(item, indent=True))