Megosztás a következőn keresztül:


Tudástár létrehozása a REST használatával

Az Azure AI Searchben a tudástár az AI által létrehozott tartalmak adattára, amelyet nem keresési forgatókönyvekhez használnak. A tudástárat indexelő és képességkészlet használatával hozhatja létre, és megadhatja az Azure Storage-t a kimenet tárolásához. A tudástár feltöltése után használja az olyan eszközöket, mint a Storage Explorer vagy a Power BI , hogy megismerje a tartalmat.

Ebben a cikkben a REST API-val betöltheti, gazdagíthatja és felfedezheti a szállodai tartózkodásokról szóló ügyfélértékelések egy készletét egy tudástárban. A tudástár tartalmazza a forrásból lekért eredeti szöveges tartalmat, valamint az AI által létrehozott tartalmakat, amelyek tartalmazzák a hangulatpontszámot, a kulcskifejezések kinyerását, a nyelvfelismerést és a nem angol nyelvű ügyfelek megjegyzéseinek szövegfordítását.

A kezdeti adatkészlet elérhetővé tétele érdekében a rendszer először importálja a szállodai felülvizsgálatokat az Azure Blob Storage-ba. A feldolgozás után a rendszer az eredményeket tudástárként menti az Azure Table Storage-ban.

Tipp.

Ez a cikk a REST függvényt használja az egyes lépések részletes magyarázatához. Töltse le a REST-fájlt , ha csak futtatni szeretné a parancsokat. Másik lehetőségként létrehozhat egy tudástárat is az Azure Portalon.

Előfeltételek

A példában szereplő készségkészlet az Azure AI-szolgáltatásokat használja a bővítéshez. Mivel a számítási feladat annyira kicsi, hogy az Azure AI-szolgáltatások a színfalak mögött leképezve naponta legfeljebb 20 tranzakció ingyenes feldolgozását teszik lehetővé. A kis számítási feladatok azt jelentik, hogy kihagyhatja egy többszolgáltatásos Azure AI-erőforrás létrehozását vagy csatolását.

Adatok feltöltése az Azure Storage-ba, és kapcsolati sztring

  1. Töltse le HotelReviews_Free.csv. Ez a CSV 19 darab ügyfél-visszajelzést tartalmaz egyetlen szállodáról (Kaggle.com származik).

  2. Az Azure Portalon keresse meg a tárfiókot, és a Storage Browser használatával hozzon létre egy hotel-reviews nevű blobtárolót.

  3. Válassza a Lap tetején található Feltöltés lehetőséget az előző lépésből letöltött HotelReviews-Free.csv fájl betöltéséhez.

    Képernyőkép a Storage Browserről a feltöltött fájllal és a bal oldali navigációs panellel

  4. A bal oldalon válassza a Hozzáférési kulcsok lehetőséget, válassza a Kulcsok megjelenítése lehetőséget, majd másolja a kapcsolati sztring az 1. vagy a 2. kulcshoz. A teljes hozzáférésű kapcsolati sztring formátuma a következő:

"knowledgeStore": {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<YOUR-ACCOUNT-NAME>;AccountKey=<YOUR-ACCOUNT-KEY>;EndpointSuffix=core.windows.net;"
}

Feljegyzés

Ha nem szeretne bizalmas adatokat megadni a kapcsolati sztring, olvassa el a Csatlakozás felügyelt identitással című témakört.

Kulcs és URL másolása

Ebben a példában a REST-hívásokhoz a keresési szolgáltatás végpontja szükséges, és minden kéréshez egy API-kulcsot kell használni. Ezeket az értékeket az Azure Portalon szerezheti be.

  1. Jelentkezzen be az Azure Portalra, lépjen az Áttekintés lapra, és másolja ki az URL-címet. A végpontok például a következőképpen nézhetnek ki: https://mydemo.search.windows.net.

  2. A Beállítások>kulcsok területen másolja ki a rendszergazdai kulcsot. A rendszergazdai kulcsok objektumok hozzáadására, módosítására és törlésére szolgálnak. Két felcserélhető rendszergazdai kulcs van. Másolja valamelyiket.

    Képernyőkép az Azure Portal URL-címéről és API-kulcsáról.

Az érvényes API-kulcs kérésenként megbízhatóságot hoz létre a kérelmet küldő alkalmazás és az azt kezelő keresési szolgáltatás között.

Index létrehozása

Az Index létrehozása (REST) létrehoz egy keresési indexet a keresési szolgáltatásban. A keresési index nem kapcsolódik a tudástárhoz, de az indexelőnek szüksége van rá. A keresési index ugyanazokat a tartalmakat tartalmazza, mint a tudástár, amelyet lekérdezési kérések küldésével vizsgálhat meg.

  1. Nyisson meg egy új szövegfájlt a Visual Studio Code-ban.

  2. Állítsa be a változókat a keresési végpontra és a korábban gyűjtött API-kulcsra.

    @baseUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE
    @apiKey = PUT-YOUR-ADMIN-API-KEY-HERE
    @storageConnection = PUT-YOUR-STORAGE-CONNECTION-STRING-HERE
    @blobContainer = PUT-YOUR-CONTAINER-NAME-HERE (hotel-reviews)
    
  3. Mentse a fájlt fájlkiterjesztéssel .rest .

  4. Illessze be az alábbi példába az indexkérelmet.

    ### Create a new index
    POST {{baseUrl}}/indexes?api-version=2024-07-01  HTTP/1.1
        Content-Type: application/json
        api-key: {{apiKey}}
    
        {
            "name": "hotel-reviews-kstore-idx",  
            "fields": [
                { "name": "name", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false },
                { "name": "reviews_date", "type": "Edm.DateTimeOffset", "searchable": false, "filterable": false, "sortable": false, "facetable": false },
                { "name": "reviews_rating", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false, "facetable": false },
                { "name": "reviews_text", "type": "Edm.String", "filterable": false,  "sortable": false, "facetable": false },
                { "name": "reviews_title", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false, "facetable": false },
                { "name": "reviews_username", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false, "facetable": false },
                { "name": "AzureSearch_DocumentKey", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false, "facetable": false, "key": true },
                { "name": "language", "type": "Edm.String", "filterable": true, "sortable": false, "facetable": true },
                { "name": "translated_text", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false },
                { "name": "sentiment", "type": "Collection(Edm.String)", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
                { "name": "keyphrases", "type": "Collection(Edm.String)", "filterable": true, "sortable": false, "facetable": true }
            ]
        }
    
  5. Válassza a Kérés elküldése elemet. Válasznak kell lennie HTTP/1.1 201 Created , és a válasz törzsének tartalmaznia kell az indexséma JSON-ábrázolását.

Adatforrás létrehozása

Adatforrás létrehozása adatforrás-kapcsolatot hoz létre az Azure AI Search szolgáltatásban.

  1. Illessze be az alábbi példába az adatforrás létrehozásához.

    ### Create a data source
    POST {{baseUrl}}/datasources?api-version=2024-07-01  HTTP/1.1
      Content-Type: application/json
      api-key: {{apiKey}}
    
        {
            "name": "hotel-reviews-kstore-ds",
            "description": null,
            "type": "azureblob",
            "subtype": null,
            "credentials": {
                "connectionString": "{{storageConnectionString}}"
            },
            "container": {
                "name": "{{blobContainer}}",
                "query": null
            },
            "dataChangeDetectionPolicy": null,
            "dataDeletionDetectionPolicy": null
        }
    
  2. Válassza a Kérés elküldése elemet.

Képességcsoport létrehozása

A képességkészletek a bővítéseket (készségeket) és a tudástárat határozzák meg. A Skillset létrehozása létrehozza az objektumot a keresési szolgáltatásban.

  1. Illessze be a következő példába a készségkészlet létrehozásához.

    ### Create a skillset
    POST {{baseUrl}}/skillsets?api-version=2024-07-01  HTTP/1.1
        Content-Type: application/json
        api-key: {{apiKey}}
    
        {
            "name": "hotel-reviews-kstore-ss",
            "description": "Skillset to detect language, translate text, extract key phrases, and score sentiment",
            "skills": [ 
                {
                    "@odata.type": "#Microsoft.Skills.Text.SplitSkill", 
                    "context": "/document/reviews_text", "textSplitMode": "pages", "maximumPageLength": 5000,
                    "inputs": [ 
                        { "name": "text", "source": "/document/reviews_text" }
                    ],
                    "outputs": [
                        { "name": "textItems", "targetName": "pages" }
                    ]
                },
                {
                    "@odata.type": "#Microsoft.Skills.Text.V3.SentimentSkill",
                    "context": "/document/reviews_text/pages/*",
                    "inputs": [
                        { "name": "text", "source": "/document/reviews_text/pages/*" },
                        { "name": "languageCode", "source": "/document/language" }
                    ],
                    "outputs": [
                        { "name": "sentiment", "targetName": "sentiment" }
                    ]
                },
                {
                    "@odata.type": "#Microsoft.Skills.Text.LanguageDetectionSkill",
                    "context": "/document",
                    "inputs": [
                        { "name": "text", "source": "/document/reviews_text" }
                    ],
                    "outputs": [
                        { "name": "languageCode", "targetName": "language" }
                    ]
                },
                {
                    "@odata.type": "#Microsoft.Skills.Text.TranslationSkill",
                    "context": "/document/reviews_text/pages/*",
                    "defaultFromLanguageCode": null,
                    "defaultToLanguageCode": "en",
                    "inputs": [
                        { "name": "text", "source": "/document/reviews_text/pages/*" }
                    ],
                    "outputs": [
                        { "name": "translatedText", "targetName": "translated_text" }
                    ]
                },
                {
                    "@odata.type": "#Microsoft.Skills.Text.KeyPhraseExtractionSkill",
                    "context": "/document/reviews_text/pages/*",
                    "inputs": [
                        { "name": "text",  "source": "/document/reviews_text/pages/*" },
                        { "name": "languageCode",  "source": "/document/language" }
                    ],
                    "outputs": [
                        { "name": "keyPhrases" , "targetName": "keyphrases" }
                    ]
                },
                {
                    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
                    "context": "/document",
                    "inputs": [
                        { "name": "name",  "source": "/document/name" },
                        { "name": "reviews_date",  "source": "/document/reviews_date" },
                        { "name": "reviews_rating",  "source": "/document/reviews_rating" },
                        { "name": "reviews_text",  "source": "/document/reviews_text" },
                        { "name": "reviews_title",  "source": "/document/reviews_title" },
                        { "name": "reviews_username",  "source": "/document/reviews_username" },
                        { "name": "AzureSearch_DocumentKey",  "source": "/document/AzureSearch_DocumentKey" },
                        {
                        "name": "pages",
                        "sourceContext": "/document/reviews_text/pages/*",
                        "inputs": [
                            {
                            "name": "languageCode",
                            "source": "/document/language"
                            },
                            {
                            "name": "translatedText",
                            "source": "/document/reviews_text/pages/*/translated_text"
                            },
                            { 
                            "name": "sentiment",
                            "source": "/document/reviews_text/pages/*/sentiment"
                            },
                            {
                            "name": "keyPhrases",
                            "source": "/document/reviews_text/pages/*/keyphrases/*"
                            },
                            {
                            "name": "Page",
                            "source": "/document/reviews_text/pages/*"
                            }
                        ]
                        }
                    ],
                    "outputs": [
                        { "name": "output" , "targetName": "tableprojection" }
                    ]
                }
            ],
            "knowledgeStore": {
                "storageConnectionString": "{{storageConnectionString}}",
                "projections": [
                    {
                        "tables": [
                            { "tableName": "hotelReviews1Document", "generatedKeyName": "Documentid", "source": "/document/tableprojection" },
                            { "tableName": "hotelReviews2Pages", "generatedKeyName": "Pagesid", "source": "/document/tableprojection/pages/*" },
                            { "tableName": "hotelReviews3KeyPhrases", "generatedKeyName": "KeyPhrasesid", "source": "/document/tableprojection/pages/*/keyPhrases/*" }
                        ],
                        "objects": []
                    },
                    {
                        "tables": [
                            { 
                                "tableName": "hotelReviews4InlineProjectionDocument", "generatedKeyName": "Documentid", "sourceContext": "/document",
                                "inputs": [
                                    { "name": "name", "source": "/document/name"},
                                    { "name": "reviews_date", "source": "/document/reviews_date"},
                                    { "name": "reviews_rating", "source": "/document/reviews_rating"},
                                    { "name": "reviews_username", "source": "/document/reviews_username"},
                                    { "name": "reviews_title", "source": "/document/reviews_title"},
                                    { "name": "reviews_text", "source": "/document/reviews_text"},
                                    { "name": "AzureSearch_DocumentKey", "source": "/document/AzureSearch_DocumentKey" }
                                ]
                            },
                            { 
                                "tableName": "hotelReviews5InlineProjectionPages", "generatedKeyName": "Pagesid", "sourceContext": "/document/reviews_text/pages/*",
                                "inputs": [
                                    { "name": "Sentiment", "source": "/document/reviews_text/pages/*/sentiment"},
                                    { "name": "LanguageCode", "source": "/document/language"},
                                    { "name": "Keyphrases", "source": "/document/reviews_text/pages/*/keyphrases"},
                                    { "name": "TranslatedText", "source": "/document/reviews_text/pages/*/translated_text"},
                                    { "name": "Page", "source": "/document/reviews_text/pages/*" }
                                ]
                            },
                            { 
                                "tableName": "hotelReviews6InlineProjectionKeyPhrases", "generatedKeyName": "kpidv2", "sourceContext": "/document/reviews_text/pages/*/keyphrases/*",
                                "inputs": [
                                    { "name": "Keyphrases", "source": "/document/reviews_text/pages/*/keyphrases/*" }
                                ]
                            }
                        ],
                        "objects": []
                    }
                ]
            }
        }
    

Főbb pontok:

  • A Shaper-képesség fontos a tudástár definíciójában. Meghatározza, hogy az adatok hogyan áramoljanak a tudástár tábláiba. A bemenetek a bővített dokumentum tárolni kívánt részei. A kimenet a csomópontok egyetlen struktúrába való összesítése.

  • A leképezések a tudástár tábláit, objektumait és blobjait határozzák meg. Minden vetítési elem megadja az "name" Azure Storage-ban létrehozandó oszlopot vagy mezőt. Ez "source" adja meg, hogy az alakzat kimenetének mely része legyen hozzárendelve ehhez a mezőhöz vagy oszlophoz.

Indexelő létrehozása

Az Indexelő létrehozása létrehozza és futtatja az indexelőt. Az indexelő végrehajtása a dokumentumok feltörésével, a szöveg és képek kinyerésével, valamint a képességkészlet inicializálásával kezdődik. Az indexelő ellenőrzi a többi létrehozott objektumot: az adatforrást, az indexet és a képességkészletet.

  1. Illessze be az alábbi példába az indexelő létrehozásához.

    ### Create indexer
    POST {{baseUrl}}/indexers?api-version=2024-07-01  HTTP/1.1
        Content-Type: application/json
        api-key: {{apiKey}}
    
        {
            "name": "hotel-reviews-kstore-idxr",
            "dataSourceName": "hotel-reviews-kstore-ds",
            "skillsetName": "hotel-reviews-kstore-ss",
            "targetIndexName": "hotel-reviews-kstore-idx",
            "parameters": {
                "configuration": {
                    "dataToExtract": "contentAndMetadata",
                    "parsingMode": "delimitedText",
                    "firstLineContainsHeaders": true,
                    "delimitedTextDelimiter": ","
        }
    },
    "fieldMappings": [
        {
            "sourceFieldName": "AzureSearch_DocumentKey",
            "targetFieldName": "AzureSearch_DocumentKey",
            "mappingFunction": { "name": "base64Encode" }
        }
    ],
    "outputFieldMappings": [
        { "sourceFieldName": "/document/reviews_text/pages/*/Keyphrases/*", "targetFieldName": "Keyphrases" },
        { "sourceFieldName": "/document/Language", "targetFieldName": "Language" },
        { "sourceFieldName": "/document/reviews_text/pages/*/Sentiment", "targetFieldName": "Sentiment" }
        ]
    }
    
  2. Válassza a Kérés küldése lehetőséget az indexelő létrehozásához és futtatásához. Ez a lépés több percet vesz igénybe.

Főbb pontok:

  • Az parameters/configuration objektum szabályozza, hogy az indexelő hogyan betölti az adatokat. Ebben az esetben a bemeneti adatok egyetlen CSV-fájlban vannak, amely fejlécsort és vesszővel elválasztott értékeket tartalmaz.

  • A mezőleképezések létrehoznak egy "AzureSearch_DocumentKey" egy egyedi azonosítót minden olyan dokumentumhoz, amelyet a blobindexelő hoz létre (a metaadattár elérési útja alapján).

  • A kimeneti mezőleképezések megadják, hogy a bővített mezők hogyan vannak leképezve a keresési index mezőire. A kimeneti mezőleképezések nem használhatók a tudástárakban (a tudástárak alakzatokkal és kivetítésekkel fejezik ki a fizikai adatstruktúrákat).

Állapot ellenőrzése

Az egyes kérések elküldése után a keresési szolgáltatásnak egy 201-ben sikeres üzenettel kell válaszolnia.

### Get Indexer Status (wait several minutes for the indexer to complete)
GET {{baseUrl}}/indexers/hotel-reviews-kstore-idxr/status?api-version=2024-07-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}

Néhány perc elteltével lekérdezheti az indexet a tartalom vizsgálatához. Még akkor is, ha nem használja az indexet, ez a lépés kényelmes módszer annak ellenőrzésére, hogy a képességkészlet a várt kimenetet hozta-e létre.

### Query the index (indexer status must be "success" before querying the index)
POST {{baseUrl}}/indexes/hotel-reviews-kstore-idxr/docs/search?api-version=2024-07-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}
  
  {
    "search": "*",
    "select": "reviews_title, reviews_username, language, translated_text, sentiment",
    "count": true
  }

Táblák ellenőrzése az Azure Portalon

Az Azure Portalon váltson az Azure Storage-fiókra, és a Storage Browser használatával tekintse meg az új táblákat. Hat táblát kell látnia, egyet a készségkészletben definiált minden egyes vetítéshez.

Minden tábla a lekérdezésekben lévő táblák keresztkapcsolásához szükséges azonosítókkal jön létre. Amikor megnyit egy táblát, görgessen ezeken a mezőkön a folyamat által hozzáadott tartalommezők megtekintéséhez.

Képernyőkép a Tudástár tábláiról a Storage Browserben

Ebben az útmutatóban a tudástár különböző táblákból áll, amelyek a táblák formázásának és strukturálásának különböző módjait mutatják be. Az 1–3. táblázat egy Shaper-képesség kimenetét használja az oszlopok és sorok meghatározásához. A négytől a hatig tartó táblázat beágyazott formázási utasításokból jön létre, és magában a vetítésben van beágyazva. Ugyanazt az eredményt bármelyik megközelítéssel érheti el.

Tábla Leírás
hotelReviews1Document A CSV-ből továbbított mezőket tartalmazza, például reviews_date és reviews_text.
hotelReviews2Pages A képességkészlet által létrehozott bővített mezőket tartalmaz, például a hangulatpontszámot és a lefordított szöveget.
hotelReviews3KeyPhrases Csak a kulcskifejezések hosszú listáját tartalmazza.
hotelReviews4InlineProjectionDocument Az első táblázat alternatívája, ha a Shaper-képesség helyett beágyazott formázást használ a vetítés adatainak alakításához.
hotelReviews5InlineProjectionPages A második táblázat alternatívája, beágyazott formázással.
hotelreviews6InlineProjectionKeyPhrases A harmadik táblázat alternatívája beágyazott formázással.

A fölöslegessé vált elemek eltávolítása

Ha a saját előfizetésében dolgozik, érdemes az egyes projektek végén eldöntenie, hogy szüksége lesz-e még a létrehozott erőforrásokra. A továbbra is futó erőforrások költségekkel járhatnak. Az erőforrásokat törölheti egyesével, vagy az erőforráscsoport törlésével eltávolíthatja a benne lévő összes erőforrást is.

Az erőforrásokat az Azure Portalon, a bal oldali navigációs panel Minden erőforrás vagy erőforráscsoport hivatkozásával keresheti meg és kezelheti.

Következő lépések

Most, hogy az Azure AI-szolgáltatások használatával bővítette az adatokat, és az eredményeket egy tudástárba kivetítette, a Storage Explorer vagy más alkalmazások segítségével felfedezheti a bővített adatkészletet.