Vector Store i Azure Cosmos DB för MongoDB vCore
GÄLLER FÖR: MongoDB vCore
Använd den integrerade vektordatabasen i Azure Cosmos DB for MongoDB vCore för att smidigt ansluta dina AI-baserade program till dina data som lagras i Azure Cosmos DB. Den här integreringen kan omfatta appar som du har skapat med hjälp av Azure OpenAI-inbäddningar. Med den inbyggda integrerade vektordatabasen kan du effektivt lagra, indexeras och köra frågor mot högdimensionella vektordata som lagras direkt i Azure Cosmos DB for MongoDB vCore, tillsammans med de ursprungliga data som vektordata skapas från. Det eliminerar behovet av att överföra dina data till alternativa vektorlager och medför ytterligare kostnader.
Vad är ett vektorlager?
Ett vektorlager eller en vektordatabas är en databas som är utformad för att lagra och hantera inbäddningar av vektorer, som är matematiska representationer av data i ett högdimensionellt utrymme. I det här utrymmet motsvarar varje dimension en funktion i data och tiotusentals dimensioner kan användas för att representera avancerade data. En vektors position i det här utrymmet representerar dess egenskaper. Ord, fraser eller hela dokument och bilder, ljud och andra typer av data kan alla vektoriseras.
Hur fungerar ett vektorlager?
I ett vektorlager används algoritmer för vektorsökning för att indexera och fråga inbäddningar. Några välkända vektorsökningsalgoritmer är HNSW (Hierarchical Navigable Small World), Inverted File (IVF), DiskANN osv. Vektorsökning är en metod som hjälper dig att hitta liknande objekt baserat på deras dataegenskaper i stället för exakta matchningar i ett egenskapsfält. Den här tekniken är användbar i program som att söka efter liknande text, hitta relaterade bilder, göra rekommendationer eller till och med identifiera avvikelser. Den används för att fråga vektorinbäddningar (listor med siffror) för dina data som du skapade med hjälp av en maskininlärningsmodell med hjälp av ett INBÄDDNINGS-API. Exempel på API:er för inbäddningar är Azure OpenAI-inbäddningar eller Hugging Face på Azure. Vektorsökning mäter avståndet mellan datavektorerna och frågevektorn. De datavektorer som är närmast din frågevektor är de som är mest lika semantiskt.
I den integrerade vektordatabasen i Azure Cosmos DB for MongoDB vCore kan inbäddningar lagras, indexeras och efterfrågas tillsammans med de ursprungliga data. Den här metoden eliminerar den extra kostnaden för att replikera data i en separat ren vektordatabas. Dessutom håller den här arkitekturen samman vektorbäddningar och ursprungliga data, vilket bättre underlättar multimodala dataåtgärder och ger bättre datakonsekvens, skalning och prestanda.
Skapa ett vektorindex
Om du vill utföra vektorsimiliaritetssökning över vektoregenskaper i dina dokument måste du först skapa ett vektorindex.
Skapa ett vektorindex med HNSW
Du kan skapa (hierarkisk navigeringsbar liten värld) index på M40-klusternivåer och högre. Om du vill skapa HSNW-indexet måste du skapa ett vektorindex med parametern "kind"
inställd på att "vector-hnsw"
följa mallen nedan:
{
"createIndexes": "<collection_name>",
"indexes": [
{
"name": "<index_name>",
"key": {
"<path_to_property>": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-hnsw",
"m": <integer_value>,
"efConstruction": <integer_value>,
"similarity": "<string_value>",
"dimensions": <integer_value>
}
}
]
}
Fält | Type | Description |
---|---|---|
index_name |
sträng | Unikt namn på indexet. |
path_to_property |
sträng | Sökväg till egenskapen som innehåller vektorn. Den här sökvägen kan vara en toppnivåegenskap eller en punkt notationssökväg till egenskapen. Om en punkt notation sökväg används, kan alla icke-af element inte vara matriser. Vektorer måste vara en number[] som ska indexeras och returneras i vektorsökningsresultat. |
kind |
sträng | Typ av vektorindex som ska skapas. Alternativen är vector-ivf och vector-hnsw . Obs! vector-ivf Är tillgängligt på alla klusternivåer och vector-hnsw är tillgängligt på M40-klusternivåer och högre. |
m |
integer | Det maximala antalet anslutningar per lager (16 som standard är 2 det lägsta värdet , maxvärdet är 100 ). Högre m lämpar sig för datamängder med hög dimensionalitet och/eller höga noggrannhetskrav. |
efConstruction |
integer | storleken på den dynamiska kandidatlistan för att konstruera grafen (64 som standard är 4 det lägsta värdet , maxvärdet är 1000 ). Högre efConstruction ger bättre indexkvalitet och högre noggrannhet, men det ökar också den tid som krävs för att skapa indexet. efConstruction måste vara minst 2 * m |
similarity |
sträng | Likhetsmått att använda med indexet. Möjliga alternativ är COS (cosinusavstånd), L2 (Euklidiska avstånd) och IP (inre produkt). |
dimensions |
integer | Antal dimensioner för vektorlikhet. Det maximala antalet dimensioner som stöds är 2000 . |
Utföra en vektorsökning med HNSW
Om du vill utföra en vektorsökning använder du $search
aggregeringspipelinesteget för frågan med operatorn cosmosSearch
.
{
"$search": {
"cosmosSearch": {
"vector": <query_vector>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
"efSearch": <integer_value>
},
}
}
}
Fält | Type | Beskrivning |
---|---|---|
efSearch |
integer | Storleken på den dynamiska kandidatlistan för sökning (40 som standard). Ett högre värde ger bättre träffsäkerhet på bekostnad av hastigheten. |
k |
integer | Antalet resultat som ska returneras. den ska vara mindre än eller lika med efSearch |
Kommentar
Om du skapar ett HSNW-index med stora datamängder kan det leda till att din Azure Cosmos DB for MongoDB vCore-resurs får slut på minne eller kan begränsa prestandan för andra åtgärder som körs i databasen. Om du stöter på sådana problem kan du minska dessa genom att skala resursen till en högre klusternivå eller minska datamängdens storlek.
Skapa ett vektorindex med IVF
Om du vill skapa ett vektorindex med ivf-algoritmen (inverterad fil) använder du följande createIndexes
mall och anger paramtern "kind"
till "vector-ivf"
:
{
"createIndexes": "<collection_name>",
"indexes": [
{
"name": "<index_name>",
"key": {
"<path_to_property>": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-ivf",
"numLists": <integer_value>,
"similarity": "<string_value>",
"dimensions": <integer_value>
}
}
]
}
Fält | Type | Description |
---|---|---|
index_name |
sträng | Unikt namn på indexet. |
path_to_property |
sträng | Sökväg till egenskapen som innehåller vektorn. Den här sökvägen kan vara en toppnivåegenskap eller en punkt notationssökväg till egenskapen. Om en punkt notation sökväg används, kan alla icke-af element inte vara matriser. Vektorer måste vara en number[] som ska indexeras och returneras i vektorsökningsresultat. |
kind |
sträng | Typ av vektorindex som ska skapas. Alternativen är vector-ivf och vector-hnsw . Obs! vector-ivf Är tillgängligt på alla klusternivåer och vector-hnsw är tillgängligt på M40-klusternivåer och högre. |
numLists |
integer | Det här heltalet är antalet kluster som det inverterade filindexet (IVF) använder för att gruppera vektordata. Vi rekommenderar att det numLists är inställt på documentCount/1000 för upp till 1 miljon dokument och för sqrt(documentCount) mer än 1 miljon dokument. Att använda värdet numLists 1 för liknar att utföra brute-force-sökning, vilket har begränsad prestanda. |
similarity |
sträng | Likhetsmått att använda med indexet. Möjliga alternativ är COS (cosinusavstånd), L2 (Euklidiska avstånd) och IP (inre produkt). |
dimensions |
integer | Antal dimensioner för vektorlikhet. Det maximala antalet dimensioner som stöds är 2000 . |
Viktigt!
Det är viktigt att ange parametern numLists korrekt för att uppnå god noggrannhet och prestanda. Vi rekommenderar att det numLists
är inställt på documentCount/1000
för upp till 1 miljon dokument och för sqrt(documentCount)
mer än 1 miljon dokument.
När antalet objekt i databasen växer bör du justera numLists så att de blir större för att uppnå bra svarstidsprestanda för vektorsökning.
Om du experimenterar med ett nytt scenario eller skapar en liten demo kan du börja med numLists
inställd på att 1
utföra en brute-force-sökning över alla vektorer. Detta bör ge dig de mest exakta resultaten från vektorsökningen, men tänk på att sökhastigheten och svarstiden kommer att vara långsam. Efter den första installationen bör du gå vidare och finjustera parametern numLists
med hjälp av ovanstående vägledning.
Utföra en vektorsökning med IVF
Om du vill utföra en vektorsökning använder du $search
sammansättningens pipelinesteg i en MongoDB-fråga. Använd den nya cosmosSearch
operatorn om du vill använda indexetcosmosSearch
.
{
{
"$search": {
"cosmosSearch": {
"vector": <query_vector>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
},
"returnStoredSource": True }},
{
"$project": { "<custom_name_for_similarity_score>": {
"$meta": "searchScore" },
"document" : "$$ROOT"
}
}
}
Om du vill hämta likhetspoängen (searchScore
) tillsammans med de dokument som hittas av vektorsökningen använder du operatorn $project
för att inkludera searchScore
och byta namn på den som <custom_name_for_similarity_score>
i resultatet. Sedan projiceras dokumentet också som kapslat objekt. Observera att likhetspoängen beräknas med hjälp av måttet som definierats i vektorindexet.
Viktigt!
Vektorer måste vara en number[]
som ska indexeras. Om du använder en annan typ, till exempel double[]
, förhindras dokumentet från att indexeras. Icke-indexerade dokument returneras inte i resultatet av en vektorsökning.
Exempel med ett HNSW-index.
I följande exempel visas hur du indexar vektorer, lägger till dokument som har vektoregenskaper, utför en vektorsökning och hämtar indexkonfigurationen.
use test;
db.createCollection("exampleCollection");
db.runCommand({
"createIndexes": "exampleCollection",
"indexes": [
{
"name": "VectorSearchIndex",
"key": {
"contentVector": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-hnsw",
"m": 16,
"efConstruction": 64,
"similarity": "COS",
"dimensions": 3
}
}
]
});
Det här kommandot skapar ett HNSW-index mot contentVector
egenskapen i dokumenten som lagras i den angivna samlingen, exampleCollection
. Egenskapen cosmosSearchOptions
anger parametrarna för HNSW-vektorindexet. Om vektorn lagras i en kapslad egenskap i dokumentet kan du ange den här egenskapen med hjälp av en punkt notationssökväg. Du kan till exempel använda text.contentVector
om contentVector
är en undereproperty av text
.
Lägga till vektorer i databasen
Om du vill lägga till vektorer i databasens samling måste du först skapa inbäddningarna med hjälp av din egen modell, Azure OpenAI-inbäddningar eller ett annat API (till exempel Hugging Face on Azure). I det här exemplet läggs nya dokument till via exempelinbäddningar:
db.exampleCollection.insertMany([
{name: "Eugenia Lopez", bio: "Eugenia is the CEO of AdvenureWorks.", vectorContent: [0.51, 0.12, 0.23]},
{name: "Cameron Baker", bio: "Cameron Baker CFO of AdvenureWorks.", vectorContent: [0.55, 0.89, 0.44]},
{name: "Jessie Irwin", bio: "Jessie Irwin is the former CEO of AdventureWorks and now the director of the Our Planet initiative.", vectorContent: [0.13, 0.92, 0.85]},
{name: "Rory Nguyen", bio: "Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.", vectorContent: [0.91, 0.76, 0.83]},
]);
Utföra en vektorsökning
Om du fortsätter med det sista exemplet skapar du en annan vektor, queryVector
. Vektorsökning mäter avståndet mellan queryVector
och vektorerna i sökvägen till contentVector
dina dokument. Du kan ange antalet resultat som sökningen returnerar genom att ange parametern k
, som är inställd 2
på här. Du kan också ange efSearch
, vilket är ett heltal som styr storleken på kandidatvektorlistan. Ett högre värde kan förbättra noggrannheten, men sökningen blir långsammare som ett resultat. Det här är en valfri parameter med standardvärdet 40.
const queryVector = [0.52, 0.28, 0.12];
db.exampleCollection.aggregate([
{
"$search": {
"cosmosSearch": {
"vector": "queryVector",
"path": "contentVector",
"k": 2,
"efSearch": 40
},
}
}
}
]);
I det här exemplet utförs en vektorsökning med hjälp queryVector
av som indata via Mongo-gränssnittet. Sökresultatet är en lista över två objekt som mest liknar frågevektorn, sorterade efter deras likhetspoäng.
[
{
similarityScore: 0.9465376,
document: {
_id: ObjectId("645acb54413be5502badff94"),
name: 'Eugenia Lopez',
bio: 'Eugenia is the CEO of AdvenureWorks.',
vectorContent: [ 0.51, 0.12, 0.23 ]
}
},
{
similarityScore: 0.9006955,
document: {
_id: ObjectId("645acb54413be5502badff97"),
name: 'Rory Nguyen',
bio: 'Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.',
vectorContent: [ 0.91, 0.76, 0.83 ]
}
}
]
Hämta definitioner för vektorindex
Om du vill hämta vektorindexdefinitionen från samlingen använder du listIndexes
kommandot:
db.exampleCollection.getIndexes();
I det här exemplet vectorIndex
returneras med alla cosmosSearch
parametrar som användes för att skapa indexet:
[
{ v: 2, key: { _id: 1 }, name: '_id_', ns: 'test.exampleCollection' },
{
v: 2,
key: { contentVector: 'cosmosSearch' },
name: 'vectorSearchIndex',
cosmosSearch: {
kind: 'vector-hnsw',
m: 40,
efConstruction: 64,
similarity: 'COS',
dimensions: 3
},
ns: 'test.exampleCollection'
}
]
Exempel med ett IVF-index
Inverterad filindexering (IVF) är en metod som organiserar vektorer i kluster. Under en vektorsökning jämförs frågevektorn först med mitten av dessa kluster. Sökningen utförs sedan i klustret vars centrum ligger närmast frågevektorn.
Parametern numList
s avgör hur många kluster som ska skapas. Ett enda kluster innebär att sökningen utförs mot alla vektorer i databasen, som liknar en brute-force- eller kNN-sökning. Den här inställningen ger högsta noggrannhet men också den högsta svarstiden.
numLists
Att öka värdet resulterar i fler kluster som var och en innehåller färre vektorer. Om till exempel numLists=2
innehåller varje kluster fler vektorer än om numLists=3
, och så vidare. Färre vektorer per kluster påskyndar sökningen (kortare svarstid, högre frågor per sekund). Detta ökar dock sannolikheten för att den mest liknande vektorn i databasen saknas med frågevektorn. Detta beror på klustrings ofullständiga karaktär, där sökningen kan fokusera på ett kluster medan den faktiska "närmaste" vektorn finns i ett annat kluster.
Parametern nProbes
styr antalet kluster som ska genomsökas. Som standard är den inställd på 1, vilket innebär att den endast söker i klustret med det centrum som är närmast frågevektorn. Genom att öka det här värdet kan sökningen täcka fler kluster, förbättra noggrannheten men också öka svarstiden (vilket minskar antalet frågor per sekund) när fler kluster och vektorer genomsöks.
I följande exempel visas hur du indexar vektorer, lägger till dokument som har vektoregenskaper, utför en vektorsökning och hämtar indexkonfigurationen.
Skapa ett vektorindex
use test;
db.createCollection("exampleCollection");
db.runCommand({
createIndexes: 'exampleCollection',
indexes: [
{
name: 'vectorSearchIndex',
key: {
"vectorContent": "cosmosSearch"
},
cosmosSearchOptions: {
kind: 'vector-ivf',
numLists: 3,
similarity: 'COS',
dimensions: 3
}
}
]
});
Det här kommandot skapar ett vector-ivf
index mot vectorContent
egenskapen i dokumenten som lagras i den angivna samlingen, exampleCollection
. Egenskapen cosmosSearchOptions
anger parametrarna för IVF-vektorindexet. Om vektorn lagras i en kapslad egenskap i dokumentet kan du ange den här egenskapen med hjälp av en punkt notationssökväg. Du kan till exempel använda text.vectorContent
om vectorContent
är en undereproperty av text
.
Lägga till vektorer i databasen
Om du vill lägga till vektorer i databasens samling måste du först skapa inbäddningarna med hjälp av din egen modell, Azure OpenAI-inbäddningar eller ett annat API (till exempel Hugging Face on Azure). I det här exemplet läggs nya dokument till via exempelinbäddningar:
db.exampleCollection.insertMany([
{name: "Eugenia Lopez", bio: "Eugenia is the CEO of AdvenureWorks.", vectorContent: [0.51, 0.12, 0.23]},
{name: "Cameron Baker", bio: "Cameron Baker CFO of AdvenureWorks.", vectorContent: [0.55, 0.89, 0.44]},
{name: "Jessie Irwin", bio: "Jessie Irwin is the former CEO of AdventureWorks and now the director of the Our Planet initiative.", vectorContent: [0.13, 0.92, 0.85]},
{name: "Rory Nguyen", bio: "Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.", vectorContent: [0.91, 0.76, 0.83]},
]);
Utföra en vektorsökning
Om du vill utföra en vektorsökning använder du $search
sammansättningens pipelinesteg i en MongoDB-fråga. Använd den nya cosmosSearch
operatorn om du vill använda indexetcosmosSearch
.
{
{
"$search": {
"cosmosSearch": {
"vector": <vector_to_search>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
},
"returnStoredSource": True }},
{
"$project": { "<custom_name_for_similarity_score>": {
"$meta": "searchScore" },
"document" : "$$ROOT"
}
}
}
Om du vill hämta likhetspoängen (searchScore
) tillsammans med de dokument som hittas av vektorsökningen använder du operatorn $project
för att inkludera searchScore
och byta namn på den som <custom_name_for_similarity_score>
i resultatet. Sedan projiceras dokumentet också som kapslat objekt. Observera att likhetspoängen beräknas med hjälp av måttet som definierats i vektorindexet.
Frågevektorer och vektoravstånd (även kallat likhetspoäng) med hjälp av $search"
Om du fortsätter med det sista exemplet skapar du en annan vektor, queryVector
. Vektorsökning mäter avståndet mellan queryVector
och vektorerna i sökvägen till vectorContent
dina dokument. Du kan ange antalet resultat som sökningen returnerar genom att ange parametern k
, som är inställd 2
på här. Du kan också ange nProbes
, vilket är ett heltal som styr antalet närliggande kluster som inspekteras i varje sökning. Ett högre värde kan förbättra noggrannheten, men sökningen blir långsammare som ett resultat. Det här är en valfri parameter med standardvärdet 1 och får inte vara större än det numLists
värde som anges i vektorindexet.
const queryVector = [0.52, 0.28, 0.12];
db.exampleCollection.aggregate([
{
$search: {
"cosmosSearch": {
"vector": queryVector,
"path": "vectorContent",
"k": 2
},
"returnStoredSource": true }},
{
"$project": { "similarityScore": {
"$meta": "searchScore" },
"document" : "$$ROOT"
}
}
]);
I det här exemplet utförs en vektorsökning med hjälp queryVector
av som indata via Mongo-gränssnittet. Sökresultatet är en lista över två objekt som mest liknar frågevektorn, sorterade efter deras likhetspoäng.
[
{
similarityScore: 0.9465376,
document: {
_id: ObjectId("645acb54413be5502badff94"),
name: 'Eugenia Lopez',
bio: 'Eugenia is the CEO of AdvenureWorks.',
vectorContent: [ 0.51, 0.12, 0.23 ]
}
},
{
similarityScore: 0.9006955,
document: {
_id: ObjectId("645acb54413be5502badff97"),
name: 'Rory Nguyen',
bio: 'Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.',
vectorContent: [ 0.91, 0.76, 0.83 ]
}
}
]
Hämta definitioner för vektorindex
Om du vill hämta vektorindexdefinitionen från samlingen använder du listIndexes
kommandot:
db.exampleCollection.getIndexes();
I det här exemplet vectorIndex
returneras med alla cosmosSearch
parametrar som användes för att skapa indexet:
[
{ v: 2, key: { _id: 1 }, name: '_id_', ns: 'test.exampleCollection' },
{
v: 2,
key: { vectorContent: 'cosmosSearch' },
name: 'vectorSearchIndex',
cosmosSearch: {
kind: 'vector-ivf',
numLists: 3,
similarity: 'COS',
dimensions: 3
},
ns: 'test.exampleCollection'
}
]
Filtrerad vektorsökning (förhandsversion)
Nu kan du köra vektorsökningar med valfritt frågefilter som stöds, till exempel $lt
, $lte
, $eq
, $neq
$gte
, $gt
, $in
, $nin
och $regex
. Aktivera funktionen "filtreringsvektorsökning" på fliken Förhandsversionsfunktioner i din Azure-prenumeration. Läs mer om förhandsversionsfunktioner här.
Först måste du definiera ett index för filtret utöver ett vektorindex. Du kan till exempel definiera filterindexet för en egenskap
db.runCommand({
"createIndexes": "<collection_name",
"indexes": [ {
"key": {
"<property_to_filter>": 1
},
"name": "<name_of_filter_index>"
}
]
});
Sedan kan du lägga till termen i vektorsökningen "filter"
enligt nedan. I det här exemplet letar filtret efter dokument där "title"
egenskapen inte finns i listan med ["not in this text", "or this text"]
.
db.exampleCollection.aggregate([
{
'$search': {
"cosmosSearch": {
"vector": "<query_vector>",
"path": <path_to_vector>,
"k": num_results,
"filter": {<property_to_filter>: {"$nin": ["not in this text", "or this text"]}}
},
"returnStoredSource": True }},
{'$project': { 'similarityScore': { '$meta': 'searchScore' }, 'document' : '$$ROOT' }
}
]);
Viktigt!
I förhandsversionen kan filtrerad vektorsökning kräva att du justerar vektorindexparametrarna för att uppnå högre noggrannhet. Om du till exempel ökar m
, , eller efSearch
när du använder HNSW eller numLists
, eller nProbes
när du använder IVF, kan det leda efConstruction
till bättre resultat. Du bör testa konfigurationen innan du använder den för att säkerställa att resultaten är tillfredsställande.
Använda VERKTYG FÖR LLM-orkestrering
Använda som vektordatabas med semantisk kernel
Använd semantisk kernel för att orkestrera din informationshämtning från Azure Cosmos DB för MongoDB vCore och din LLM. Läs mer här.
Använda som vektordatabas med LangChain
Använd LangChain för att samordna din informationshämtning från Azure Cosmos DB för MongoDB vCore och din LLM. Läs mer här.
Använda som en semantisk cache med LangChain
Använd LangChain och Azure Cosmos DB for MongoDB (vCore) för att orkestrera semantisk cachelagring med hjälp av tidigare recocrded LLM-respones som kan spara kostnader för LLM API och minska svarstiden. Läs mer här
Funktioner och begränsningar
- Avståndsmått som stöds: L2 (Euklidiska), inre produkt och cosinus.
- Indexeringsmetoder som stöds: IVFFLAT (GA) och HSNW (förhandsversion)
- Indexeringsvektorer upp till 2 000 dimensioner i storlek.
- Indexering gäller endast för en vektor per sökväg.
- Endast ett index kan skapas per vektorsökväg.
Sammanfattning
Den här guiden visar hur du skapar ett vektorindex, lägger till dokument som har vektordata, utför en likhetssökning och hämtar indexdefinitionen. Med hjälp av vår integrerade vektordatabas kan du effektivt lagra, indexeras och köra frågor mot högdimensionella vektordata direkt i Azure Cosmos DB för MongoDB vCore. Det gör att du kan frigöra den fulla potentialen för dina data via vektorbäddningar, och det ger dig möjlighet att skapa mer exakta, effektiva och kraftfulla program.
Relaterat innehåll
- Referenslösning för .NET RAG Pattern retail
- .NET-självstudie – receptchattrobot
- C# RAG-mönster – Integrera Öppna AI-tjänster med Cosmos
- Python RAG-mönster – Azure-produktchattrobot
- Självstudie om Python Notebook – Vektordatabasintegrering via LangChain
- Självstudie om Python Notebook – LLM-cachelagringsintegrering via LangChain
- Python – LlamaIndex-integrering
- Python – Semantisk kernelminnesintegrering