Vektorindex létrehozása az Azure AI Keresésben

Az Azure AI Keresésben vektorokat tárolhat és kérdezhet le egy keresési indexben. A vektorindexeket egy olyan indexséma határozza meg, amely vektormezőket, nemvektormezőket és vektorkonfigurációs szakaszt tartalmaz.

A vektorindex implicit létrehozása implicit módon létrehoz egy beágyazási területet , amely a vektoros lekérdezések korpuszaként szolgál. A beágyazási terület az azonos beágyazási modellből származó beágyazásokkal feltöltött összes vektormezőből áll. Lekérdezéskor a rendszer összehasonlítja a vektoros lekérdezést az indexelt vektorokkal, és szemantikai hasonlóság alapján adja vissza az eredményeket.

Ez a cikk REST használatával ismerteti, hogyan hozhat létre vektorindexet, amely a következő lépéseket tartalmazza:

  • Alapszintű sémadefinícióval kezdődik
  • Vektoros algoritmusok és opcionális tömörítés hozzáadása
  • Vektormező-definíciók hozzáadása
  • Előre elkészített adatok betöltése külön lépésként , vagy integrált vektorizálás használata az adatok adattömbbe helyezéséhez és beágyazásához az indexelés során

Miután megismerte az alapszintű munkafolyamatot, próbálja ki az Azure SDK-mintákat az azure-search-vector-samples GitHub-adattárban , hogy útmutatást nyújtson a vektorok tesztelési és éles kódban való használatával kapcsolatban. Az Azure Portallal is létrehozhat vektorindexet integrált vektorizálással.

Előfeltételek

  • Azure AI Keresés szolgáltatás bármely régióban és bármilyen szinten. Ha integrált vektorizációt szeretne használni az Azure Vision-képesség és a vektorizáló használatával, az Azure AI Keresésnek ugyanabban a régióban kell lennie, mint az Azure Vision in Foundry Toolsban üzemeltetett beágyazási modelleknek.

  • Az ajánlott kulcs nélküli hitelesítéshez rendelje hozzá a keresési szolgáltatás közreműködője és a keresési index adatszolgáltatói szerepköreit a felhasználói fiókhoz, a felügyelt identitáshoz vagy a szolgáltatásnévhez. A kevésbé biztonságos kulcsalapú hitelesítéshez szerezzen be egy rendszergazdai API-kulcsot.

  • Forrásdokumentumok vektoros beágyazással az indexbe való feltöltéshez. Ehhez a feladathoz integrált vektorizálást is használhat.

  • A beágyazási modell méretkorlátja. text-embedding-ada-002 1536-os, text-embedding-3-small 1 és 1536 közötti, 1 és text-embedding-3-large 3072 közötti tartományban van rögzítve.

  • A beágyazási modell hasonlósági metrikája. Az Azure OpenAI-modelleket használja cosine.

  • Az indexek létrehozásának ismerete. A sémák mindig tartalmazzák a dokumentumkulcs mezőit, a keresési vagy szűrők mezőit, valamint az indexelés és lekérdezések során szükséges viselkedések egyéb konfigurációit.

Megjegyzés:

A 2019. január előtt létrehozott keresési szolgáltatások némelyike nem tud vektorindexet létrehozni. Ha lehetséges, hozzon létre egy új szolgáltatást vektorok használatához.

Dokumentumok előkészítése indexeléshez

Az indexelés előtt állítson össze egy hasznos dokumentumot, amely vektor- és nemvektoradatok mezőit tartalmazza. A dokumentumszerkezetnek meg kell felelnie az indexséma mezőgyűjteményének.

Győződjön meg arról, hogy a forrásdokumentumok a következő tartalmat adják meg:

Tartalom Leírás
Egyedi azonosító Olyan mező vagy metaadat-tulajdonság, amely egyedileg azonosítja az egyes dokumentumokat. Minden keresési indexhez dokumentumkulcs szükséges. A dokumentumkulcs követelményeinek teljesítéséhez a forrásdokumentumnak egy olyan mezővel vagy tulajdonságsal kell rendelkeznie, amely egyedileg azonosítja azt az indexben. Ha blobokat indexel, a metadata_storage_path egyedileg azonosíthatja az egyes blobokat. Ha adatbázisból indexel, az elsődleges kulcs lehet. Az adatmezőt a keresőindexben egy Edm.String típusú és egy key=true típusú mezőhöz kell rendelni.
Nem vektoros tartalom Adjon meg más mezőket emberi olvasásra alkalmas tartalommal. Az ember által olvasható tartalom hasznos a lekérdezési válaszhoz és az olyan hibrid lekérdezésekhez , amelyek teljes szöveges keresést vagy szemantikai rangsorolást tartalmaznak ugyanabban a kérésben. Ha csevegés-befejezési modellt használ, a ChatGPT-hez hasonló modellek többsége ember által olvasható szöveget vár, és nem fogad el nyers vektorokat bemenetként.
Vektortartalom A nem vektoros tartalom vektoros reprezentációja lekérdezési időpontban való használatra. A vektor egy beágyazási modell által létrehozott egypontos lebegőpontos számok tömbje. Minden vektormező egy modell által létrehozott tömböt tartalmaz. Mezőnként egy beágyazás van, ahol a mező legfelső szintű mező (nem beágyazott vagy összetett típus része). Az egyszerű integráció érdekében javasoljuk, hogy beágyazza a modelleket az Azure OpenAI-ba, például szövegbeágyazást-3 szöveges dokumentumokhoz, vagy a képekhez és a multimodális beágyazásokhoz készült Image Retrieveal REST API-t .

Ha használhat indexelőket és képességkészleteket, fontolja meg az integrált vektorizációt, amely képeket és szöveget kódol az indexelés során. A meződefiníciók vektormezőkhöz tartoznak, de a bejövő forrásadatok lehetnek szövegek vagy képek, amelyeket az indexelés során vektortömbökké konvertálnak.

A keresési indexnek tartalmaznia kell a támogatni kívánt lekérdezési forgatókönyvek mezőit és tartalmát. Tegyük fel, hogy termékneveket, verziókat, metaadatokat vagy címeket szeretne keresni vagy szűrni. Ebben az esetben a vektoros hasonlóság keresése nem különösen hasznos. Jobb választás lehet a kulcsszókeresés, a geokeresés vagy a szó szerinti tartalomon iteráló szűrők. A vektor- és nemvektormezőket is magában foglaló keresési index maximális rugalmasságot biztosít a lekérdezések felépítéséhez és a válaszösszetételhez.

Dokumentumterhelési példákért tekintse meg a Vektoradatok betöltése indexeléshez című részt.

Kezdjen egy alapszintű indexszel.

Kezdje egy minimális sémával, hogy a vektorkonfiguráció és a vektormezők hozzáadása előtt rendelkezzen definícióval. Az alábbi példában egy egyszerű indexet láthat. Az indexsémáról további információt a Keresési index létrehozása című témakörben talál.

Figyelje meg, hogy az indexnek van egy kötelező neve, egy szükséges dokumentumkulcsa ("key": true), valamint az emberi olvasásra alkalmas tartalom mezői egyszerű szövegben. Gyakran előfordul, hogy a vektorizálni kívánt tartalomnak emberi olvasásra alkalmas verziója van. Ha például egy PDF-fájlból származó szövegrészletet használ, az indexsémának rendelkeznie kell egy mezővel az egyszerű szöveges adattömbökhöz, és egy második mezővel a vektorizált adattömbökhöz.

Íme egy alapszintű index egy "name" elemmel, egy "fields" gyűjteménnyel, és néhány további konfigurációs konstrukcióval a kiegészítő beállításokhoz:

POST https://[servicename].search.windows.net/indexes?api-version=[api-version] 
{
  "name": "example-index",
  "description": "This is an example index."
  "fields": [
    { "name": "documentId", "type": "Edm.String", "key": true, "retrievable": true, "searchable": true, "filterable": true },
    { "name": "myHumanReadableNameField", "type": "Edm.String", "retrievable": true, "searchable": true, "filterable": false, "sortable": true, "facetable": false },
    { "name": "myHumanReadableContentField", "type": "Edm.String", "retrievable": true, "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.microsoft" },
  ],
  "analyzers": [ ],
  "scoringProfiles": [ ],
  "suggesters": [ ],
  "vectorSearch": [ ]
}

Vektorkeresési konfiguráció hozzáadása

Ezután adjon hozzá egy konfigurációt "vectorSearch" a sémához. Érdemes a meződefiníciók előtt konfigurálást megadni, mert az itt definiált profilok a vektormező definíciójának részévé válnak. A sémában a vektorkonfiguráció általában a mezőgyűjtemény után lesz beszúrva, esetleg utána "analyzers", "scoringProfiles"és "suggesters". A sorrend azonban nem számít.

A vektorkonfiguráció a következőket tartalmazza:

  • vectorSearch.algorithms az indexelés során a vektorcsomópontok között a "legközelebbi szomszéd" információ létrehozásához használható.
  • vectorSearch.compressions skaláris vagy bináris kvantáláshoz, túlméretezéshez és eredeti vektorokkal való újraszámításhoz.
  • vectorSearch.profiles algoritmusok és tömörítési konfigurációk több kombinációjának megadásához.

A lépések a következők:

  1. Az index létrehozásához használja az Index létrehozása vagy frissítése REST API-t.

  2. Adjon hozzá egy szakaszt vectorSearch az indexben, amely meghatározza a beágyazási terület létrehozásához használt keresési algoritmusokat.

     "vectorSearch": {
         "compressions": [
             {
                 "name": "scalar-quantization",
                 "kind": "scalarQuantization",
                 "scalarQuantizationParameters": {
                     "quantizedDataType": "int8"
                     },
                 "rescoringOptions": {
                     "enableRescoring": true,
                     "defaultOversampling": 10,
                     "rescoreStorageMethod": "preserveOriginals"
                 }
             },
             {
                 "name": "binary-quantization",
                 "kind": "binaryQuantization",
                 "rescoringOptions": {
                     "enableRescoring": true,
                     "defaultOversampling": 10,
                     "rescoreStorageMethod": "discardOriginals"
             }
             }
         ],
         "algorithms": [
             {
                 "name": "hnsw-1",
                 "kind": "hnsw",
                 "hnswParameters": {
                     "m": 4,
                     "efConstruction": 400,
                     "efSearch": 500,
                     "metric": "cosine"
                 }
             },
             {
                 "name": "hnsw-2",
                 "kind": "hnsw",
                 "hnswParameters": {
                     "m": 8,
                     "efConstruction": 800,
                     "efSearch": 800,
                     "metric": "hamming"
                 }
             },
             {
                 "name": "eknn",
                 "kind": "exhaustiveKnn",
                 "exhaustiveKnnParameters": {
                     "metric": "euclidean"
                 }
             }
    
         ],
         "profiles": [
           {
             "name": "vector-profile-hnsw-scalar",
             "compression": "scalar-quantization",
             "algorithm": "hnsw-1"
           }
         ]
     }
    

    Főbb pontok:

    • A tömörítés, az algoritmus és a profil egyes konfigurációinak neveinek egyedinek kell lenniük az indexen belüli típusukhoz.

    • vectorSearch.compressions lehet vagy scalarQuantizationbinaryQuantization. A skaláris kvantálás szűkebb adattípusokba tömöríti az lebegőpontos értékeket. A bináris kvantálás lebegőpontos számokat alakít bináris 1 bites értékekké.

    • vectorSearch.compressions.rescoringOptions Az eredeti, tömörítetlen vektorokkal újraszámítja a hasonlóságot, és újraszámítja a kezdeti keresési lekérdezés által visszaadott felső eredményeket. A tömörítetlen vektorok akkor is léteznek a keresési indexben, ha stored hamisak. Ez a tulajdonság opcionális. Alapértelmezett érték: true (igaz).

    • vectorSearch.compressions.rescoringOptions.defaultOversampling a lehetséges eredmények szélesebb halmazát veszi figyelembe, hogy ellensúlyozza a kvantálásból származó információk csökkenését. A lehetséges eredmények képlete a lekérdezésben található k, egy túlmintavételezési szorzóval. Ha például a lekérdezés 5-öt ad meg k, és a túlmintavételezés 20, a lekérdezés hatásosan 100 dokumentumot kér le az újrasorrendbe állításhoz, az eredeti tömörítetlen vektort használva erre a célra. Csak a k sorrendbe állított legjobb eredmények kerülnek visszaadásra. Ez a tulajdonság opcionális. Az alapértelmezett érték 4.

    • vectorSearch.compressions.scalarQuantizationParameters.quantizedDataType értéke int8 legyen beállítva. Jelenleg ez az egyetlen primitív adattípus, amely támogatott. Ez a tulajdonság opcionális. Az alapértelmezett szint a int8.

    • vectorSearch.algorithms vagy hnsw vagy exhaustiveKnn. Ezek a közelítő legközelebbi szomszédok (ANN) algoritmusok, amelyek a vektortartalmak indexelés közbeni rendszerezésére szolgálnak.

    • vectorSearch.algorithms.m a kétirányú hivatkozások számlálója. Az alapértelmezett érték 4. A tartomány 4 és 10 között van. Az alacsonyabb értékek kevesebb zajt adnak vissza az eredményekben.

    • vectorSearch.algorithms.efConstruction az indexelés során használt legközelebbi szomszédok száma. Az alapértelmezett érték 400. A tartomány 100 és 1000 között van.

    • "vectorSearch.algorithms.efSearch a keresés során használt legközelebbi szomszédok száma. Az alapértelmezett érték 500. A tartomány 100 és 1000 között van.

    • vectorSearch.algorithms.metric Akkor kell lennie cosine , ha Az Azure OpenAI-t használja, ellenkező esetben használja a használt beágyazási modellhez társított hasonlósági metrikát. A támogatott értékek a következők: cosine, dotProduct, euclidean, és hamming (a bináris adatok indexelésére használatosak).

    • vectorSearch.profiles absztrakciós réteg hozzáadása a gazdagabb definíciókhoz. Egy profil van definiálva vectorSearch-ban, és név alapján hivatkozik rá minden vektormezőben. Ez a tömörítési és algoritmuskonfigurációk kombinációja. Ezt a tulajdonságot egy vektormezőhöz rendeli, és meghatározza a mezők algoritmusát és tömörítését.

Vektormező hozzáadása a mezők gyűjteményéhez

Ha már rendelkezik vektorkonfigurációval, hozzáadhat egy vektormezőt a mezők gyűjteményéhez. Ne feledje, hogy a mezők gyűjteményének tartalmaznia kell egy mezőt a dokumentumkulcshoz, a vektormezőkhöz és a hibrid keresési forgatókönyvekhez vagy a csevegőmodellek RAG-számítási feladatokban való befejezéséhez szükséges egyéb nem meg nem vett mezőkhöz.

A vektormezőket az adattípusuk, a dimensions vektorok kimenetéhez használt beágyazási modellen alapuló tulajdonság és az előző lépésben létrehozott vektorprofil jellemzi.

  1. Az Index létrehozása vagy frissítése REST API használatával hozza létre az indexet, és adjon hozzá egy vektormezőt a mezők gyűjteményéhez.

    {
      "name": "example-index",
      "fields": [
        {
            "name": "contentVector",
            "type": "Collection(Edm.Single)",
            "searchable": true,
            "retrievable": false,
            "stored": false,
            "dimensions": 1536,
            "vectorSearchProfile": "vector-profile-1"
        }
      ]
    }
    
  2. Adjon meg egy vektormezőt az alábbi attribútumokkal. Mezőnként egy generált beágyazást tárolhat. Minden vektormezőhöz:

    • type vektor adattípusnak kell lennie. Collection(Edm.Single) A modellek beágyazásához leggyakrabban használt.
    • dimensions a beágyazási modell által létrehozott dimenziók száma. A text-embedding-ada-002 esetében az 1536-os helyre van javítva. A text-embedding-3 modellsorozathoz több értéktartomány is rendelkezésre áll. Ha integrált vektorizálást és beágyazási képességet használ vektorok létrehozásához, győződjön meg arról, hogy ez a tulajdonság a beágyazási képesség által használt dimenzióértékre van állítva.
    • vectorSearchProfile az index más részén definiált profil neve.
    • searchable igaznak kell lennie.
    • retrievable lehet igaz vagy hamis. A True a nyers vektorokat (1536-ot) egyszerű szövegként adja vissza, és tárhelyet használ fel. Állítsa igaz értékre, ha vektoreredményt ad át egy alsóbb rétegbeli alkalmazásnak.
    • stored lehet igaz vagy hamis. Meghatározza, hogy a vektorok egy további másolatát tárolja-e a rendszer a lekéréshez. További információ: Vektorméret csökkentése.
    • filterable, facetableés sortable hamisnak kell lennie.
  3. Ha a title esetén előszűrést, utószűrést vagy szigorú utószűrést (előzetes verzió) szeretne használni, adjon a gyűjteményhez szűrhető, nem vektoros mezőket, például állítsa a filterable mezőt igazra a beállítva.

  4. Adjon hozzá más mezőket, amelyek meghatározzák az indexelt szöveges tartalom tartalmát és szerkezetét. Legalább egy dokumentumkulcsra van szüksége.

    Olyan mezőket is hozzá kell adnia, amelyek hasznosak a lekérdezésben vagy a válaszában. Az alábbi példa a vektorokkal egyenértékű cím és tartalom (titleVector és contentVector) vektormezőit mutatja be. A keresési eredmények rendezéséhez, szűréséhez és olvasásához hasznos, egyenértékű szöveges tartalmat tartalmazó mezőket (title és content) is biztosít.

    Az alábbi példa a mezők gyűjteményét mutatja be:

    PUT https://my-search-service.search.windows.net/indexes/my-index?api-version=2025-09-01&allowIndexDowntime=true
    Content-Type: application/json
    api-key: {{admin-api-key}}
    {
        "name": "{{index-name}}",
        "fields": [
            {
                "name": "id",
                "type": "Edm.String",
                "key": true,
                "filterable": true
            },
            {
                "name": "title",
                "type": "Edm.String",
                "searchable": true,
                "filterable": true,
                "sortable": true,
                "retrievable": true
            },
            {
                "name": "titleVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": true,
                "stored": true,
                "dimensions": 1536,
                "vectorSearchProfile": "vector-profile-1"
            },
            {
                "name": "content",
                "type": "Edm.String",
                "searchable": true,
                "retrievable": true
            },
            {
                "name": "contentVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": false,
                "stored": false,
                "dimensions": 1536,
                "vectorSearchProfile": "vector-profile-1"
            }
        ],
        "vectorSearch": {
            "algorithms": [
                {
                    "name": "hnsw-1",
                    "kind": "hnsw",
                    "hnswParameters": {
                        "m": 4,
                        "efConstruction": 400,
                        "efSearch": 500,
                        "metric": "cosine"
                    }
                }
            ],
            "profiles": [
                {
                    "name": "vector-profile-1",
                    "algorithm": "hnsw-1"
                }
            ]
        }
    }
    

Vektoradatok betöltése indexeléshez

Az indexeléshez megadott tartalomnak meg kell felelnie az indexsémának, és tartalmaznia kell egy egyedi sztringértéket a dokumentumkulcshoz. Az előre elkészített adatok egy vagy több vektormezőbe vannak betöltve, amelyek együtt létezhetnek más, nem adatmegjelenítő tartalmakat tartalmazó mezőkkel.

Az adatbetöltéshez leküldéses vagy lekéréses módszereket használhat.

Dokumentumok - Index használata vektor és nem vektoros adatok indexbe való betöltéséhez. Az indexelés leküldéses API-i minden stabil és előzetes verzióban azonosak. A dokumentumok betöltéséhez használja az alábbi API-k bármelyikét:

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/index?api-version=2025-09-01

{
    "value": [
        {
            "id": "1",
            "title": "Azure App Service",
            "content": "Azure App Service is a fully managed platform for building, deploying, and scaling web apps. You can host web apps, mobile app backends, and RESTful APIs. It supports a variety of programming languages and frameworks, such as .NET, Java, Node.js, Python, and PHP. The service offers built-in auto-scaling and load balancing capabilities. It also provides integration with other Azure services, such as Azure DevOps, GitHub, and Bitbucket.",
            "category": "Web",
            "titleVector": [
                -0.02250031754374504,
                 . . . 
                        ],
            "contentVector": [
                -0.024740582332015038,
                 . . .
            ],
            "@search.action": "upload"
        },
        {
            "id": "2",
            "title": "Azure Functions",
            "content": "Azure Functions is a serverless compute service that enables you to run code on-demand without having to manage infrastructure. It allows you to build and deploy event-driven applications that automatically scale with your workload. Functions support various languages, including C#, F#, Node.js, Python, and Java. It offers a variety of triggers and bindings to integrate with other Azure services and external services. You only pay for the compute time you consume.",
            "category": "Compute",
            "titleVector": [
                -0.020159931853413582,
                . . .
            ],
            "contentVector": [
                -0.02780858241021633,
                 . . .
            ],
            "@search.action": "upload"
        }
        . . .
    ]
}

Index lekérdezése vektortartalomhoz

Érvényesítési célból lekérdezheti az indexet a Search Explorerrel az Azure Portalon vagy egy REST API-hívással. Mivel az Azure AI Keresés nem tud vektorokat emberi olvasásra alkalmas szöveggé alakítani, próbáljon meg ugyanabból a dokumentumból olyan mezőket visszaadni, amelyek bizonyítják az egyezést. Ha például a vektoros lekérdezés a titleVector mezőre irányul, kiválaszthatja title a keresési eredményeket.

Ahhoz, hogy a mezők bekerüljenek az eredmények közé, a következőnek kell lenniük: retrievable.

  • Tekintse át a Keresés felügyelet menüpont > részét az indexek összesített méretének és a vektorindex méretének megtekintéséhez. A pozitív vektorindex-méret azt jelzi, hogy a vektorok jelen vannak.

  • Használja a Search Explorert egy index lekérdezésére. A Search Explorernek két nézete van: Lekérdezés nézet (alapértelmezett) és JSON nézet.

    • Lekérdezési beállítások megadása >Vektorértékek elrejtése a keresési eredményekben olvashatóbb eredmények érdekében.

    • Használja a JSON nézetet vektoros lekérdezésekhez. Beillesztheti a végrehajtani kívánt vektoros lekérdezés JSON-definícióját. Ha az index vektoros hozzárendeléssel rendelkezik, használhatja a beépített szöveg-vektor vagy kép-vektor konverziót is. A képkereséssel kapcsolatos további információkért tekintse meg a Gyorsútmutatót: Képek keresése a Kereséskezelőben.

    • Használja az alapértelmezett Lekérdezés nézetet annak gyors megerősítéséhez, hogy az index vektorokat tartalmaz. A lekérdezési nézet teljes szöveges keresésre használható. Bár nem használhatja vektoros lekérdezésekhez, üres keresést (search=*) küldhet a tartalom kereséséhez. A program az összes mező tartalmát, beleértve a vektormezőket is, egyszerű szövegként adja vissza.

További információ: Vektoros lekérdezés létrehozása.

Vektorindex frissítése

Vektorindex frissítéséhez módosítsa a sémát, és töltse be újra a dokumentumokat új mezők kitöltéséhez. A sémafrissítésekhez használható API-k közé tartozik a Create or Update Index (REST), a CreateOrUpdateIndex az Azure SDK for .NET-ben, create_or_update_index az Azure SDK for Pythonban, és hasonló módszerek más Azure SDK-kban.

Az index frissítésével kapcsolatos általános útmutatásért tekintse meg az indexek frissítését vagy újraépítését ismertető témakört.

A legfontosabb pontok a következők:

  • A meglévő mezők frissítéséhez és törléséhez gyakran szükség van az indexek elvetésére és teljes újraépítésére.

  • Az alábbi módosításokat újraépítési követelmény nélkül hajthatja végre:

    • Új mezők hozzáadása egy mezőcsoporthoz.
    • Adjon hozzá új vektorkonfigurációkat, amelyek új mezőkhöz vannak rendelve, de a már vektorizált mezőket nem.
    • Változás retrievable (az értékek igaz vagy hamisak) egy meglévő mezőben. A vektormezőknek kereshetőnek és lekérdezhetőnek kell lenniük, de ha olyan helyzetekben szeretné letiltani a vektormezőkhöz való hozzáférést, ahol az elvetés és az újraépítés nem lehetséges, akkor a beolvasható értéket hamis értékre állíthatja.

Következő lépések

Következő lépésként javasoljuk, hogy hozzon létre egy vektoros lekérdezést.

Az azure-search-vector-samples adattárban található kódminták a sémadefiníciót, vektorizálást, indexelést és lekérdezéseket tartalmazó, végpontok közötti munkafolyamatokat szemléltetik.

A Python, a C# és a JavaScript demókódja is létezik.