Példa: Egyéni képesség létrehozása a Python használatával (archiválva)

Ez a példa archiválva van, és nem támogatott. Elmagyarázta, hogyan hozhat létre egyéni webes API-képességet a Python és a Visual Studio Code használatával. A példa egy Azure Function szolgáltatást használt, amely implementálja a speciális készségfelületet.

Előfeltételek

Azure-függvény létrehozása

Ez a példa egy Azure-függvény használatával szemlélteti a webes API-k üzemeltetésének fogalmát, de más megközelítések is lehetségesek. Mindaddig, amíg megfelel a kognitív képességek felületi követelményeinek, az ön által használt megközelítés nem lényegtelen. Az Azure Functions azonban megkönnyíti az egyéni képességek létrehozását.

Projekt létrehozása a függvényhez

A Visual Studio Code Azure Functions-projektsablonja létrehoz egy helyi projektet, amely közzétehető egy azure-beli függvényalkalmazásban. A függvényalkalmazásokkal logikai egységként csoportosíthatja a függvényeket az erőforrások felügyeletéhez, üzembe helyezéséhez és megosztásához.

  1. A Visual Studio Code-ban nyomja le az F1 billentyűt a parancskatalógus megnyitásához. A parancskatalógusban keresse meg és válassza ki a Azure Functions: Create new project....
  2. Válasszon egy könyvtárhelyet a projekt-munkaterülethez, és válassza a . Ne használjon olyan projektmappát, amely már egy másik munkaterület része.
  3. Válasszon nyelvet a függvényalkalmazás-projekthez. Ebben az oktatóanyagban válassza a Python-t.
  4. Válassza ki a Python-verziót (a 3.7.5-ös verziót az Azure Functions támogatja).
  5. Válasszon egy sablont a projekt első függvényéhez. Válassza a(z) HTTP-trigger lehetőséget egy HTTP-vel aktivált függvény létrehozásához az új függvényalkalmazásban.
  6. Adjon meg egy függvénynevet. Ebben az esetben használjuk Concatenator
  7. Engedélyezési szintként válassza függvény. A függvény HTTP-végpontjának meghívásához függvényelérési kulcsot fog használni.
  8. Adja meg, hogyan szeretné megnyitni a projektet. Ebben a lépésben válassza a Hozzáadás munkaterülethez lehetőséget a függvényalkalmazás létrehozásához az aktuális munkaterületen.

A Visual Studio Code egy új munkaterületen hozza létre a függvényalkalmazás-projektet. Ez a projekt tartalmazza a host.json és a local.settings.jsonconfiguration fájlokat, valamint a nyelvspecifikus projektfájlokat.

Egy új HTTP-aktivált függvény is létrejön a függvényalkalmazás-projekt Concatenator mappájában. Benne lesz egy "__init__.py" nevű fájl, amely a következő tartalommal rendelkezik:

import logging

import azure.functions as func


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        return func.HttpResponse(f"Hello {name}!")
    else:
        return func.HttpResponse(
             "Please pass a name on the query string or in the request body",
             status_code=400
        )

Most módosítsuk a kódot az egyéni képességfelület követéséhez. Cserélje le az alapértelmezett kódot a következő tartalomra:

import logging
import azure.functions as func
import json

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    try:
        body = json.dumps(req.get_json())
    except ValueError:
        return func.HttpResponse(
             "Invalid body",
             status_code=400
        )
    
    if body:
        result = compose_response(body)
        return func.HttpResponse(result, mimetype="application/json")
    else:
        return func.HttpResponse(
             "Invalid body",
             status_code=400
        )


def compose_response(json_data):
    values = json.loads(json_data)['values']
    
    # Prepare the Output before the loop
    results = {}
    results["values"] = []
    
    for value in values:
        output_record = transform_value(value)
        if output_record != None:
            results["values"].append(output_record)
    return json.dumps(results, ensure_ascii=False)

## Perform an operation on a record
def transform_value(value):
    try:
        recordId = value['recordId']
    except AssertionError  as error:
        return None

    # Validate the inputs
    try:         
        assert ('data' in value), "'data' field is required."
        data = value['data']        
        assert ('text1' in data), "'text1' field is required in 'data' object."
        assert ('text2' in data), "'text2' field is required in 'data' object."
    except AssertionError  as error:
        return (
            {
            "recordId": recordId,
            "errors": [ { "message": "Error:" + error.args[0] }   ]       
            })

    try:                
        concatenated_string = value['data']['text1'] + " " + value['data']['text2']  
        # Here you could do something more interesting with the inputs

    except:
        return (
            {
            "recordId": recordId,
            "errors": [ { "message": "Could not complete operation for record." }   ]       
            })

    return ({
            "recordId": recordId,
            "data": {
                "text": concatenated_string
                    }
            })

A transform_value metódus egyetlen rekordon hajt végre műveletet. A metódust az igényeinek megfelelően módosíthatja. Ne felejtse el elvégezni a szükséges bemenet-ellenőrzést, és ha a művelet nem hajtható végre, ne felejtsen el hibákat és figyelmeztetéseket visszaadni.

A kód helyi hibakeresése

A Visual Studio Code megkönnyíti a kód hibakeresését. Nyomja le az F5 billentyűt, vagy lépjen a Hibakeresés menüre, és válassza Hibakeresés indításalehetőséget.

A kódban bármelyik töréspontot beállíthatja úgy, hogy lenyomja az "F9"-et a kívánt soron.

A hibakeresés megkezdése után a függvény helyileg fog futni. Egy olyan eszközzel, mint a Postman vagy a Fiddler, kiadhatja a kérelmet a localhostnak. Jegyezze fel a helyi végpont helyét a terminálablakban.

Függvényalkalmazás létrehozása az Azure-ban

Ha elégedett a függvény viselkedésével, közzéteheti. Eddig lokálisan dolgozott. Ebben a szakaszban egy függvényalkalmazást fog létrehozni az Azure-ban, majd üzembe helyezi a helyi projektet a létrehozott alkalmazásban.

Az alkalmazás létrehozása a Visual Studio Code-ból

  1. A Visual Studio Code-ban nyomja le az F1 billentyűt a parancskatalógus megnyitásához. A parancskatalógusban keresse meg és válassza a Függvényalkalmazás létrehozása az Azure-ban.

  2. Ha több aktív előfizetéssel rendelkezik, válassza ki az alkalmazás előfizetését.

  3. Adjon meg egy globálisan egyedi nevet a függvényalkalmazásnak. Írjon be egy URL-címre érvényes nevet.

  4. Válassza ki a futtatási környezetet, és válassza ki a helyileg futtatott nyelvi verziót.

  5. Válasszon egy helyet az alkalmazásnak. Ha lehetséges, válassza ki ugyanazt a régiót, amely a keresési szolgáltatást is üzemelteti.

Az alkalmazás létrehozása néhány percet vesz igénybe. Ha elkészült, az új alkalmazást az aktív előfizetés Erőforrások és Függvényalkalmazás alatt láthatja.

Üzembe helyezés az Azure-ban

  1. A Visual Studio Code-ban továbbra is nyomja le az F1 billentyűt a parancskatalógus megnyitásához. A parancspalettában keressen rá, majd válassza a(z) Üzembe helyezés a függvényalkalmazásba...lehetőséget.

  2. Válassza ki a létrehozott függvényalkalmazást.

  3. Ellenőrizze, hogy folytatni szeretné-e a műveletet, majd válassza a Üzembe helyezéslehetőséget. Az üzembe helyezés állapotát a kimeneti ablakban figyelheti.

  4. Váltson a Azure portál, majd lépjen a Minden erőforrásszakaszba. Keresse meg az előző lépésben megadott globálisan egyedi névvel üzembe helyezett függvényalkalmazást.

    Borravaló

    A Visual Studio Code-ban kattintson a jobb gombbal a függvényalkalmazásra, és válassza a Megnyitás a Portálonlehetőséget.

  5. A portál bal oldalán válassza a Függvényeklehetőséget, majd válassza ki a létrehozott függvényt.

  6. A függvény áttekintő lapján válassza a Függvény URL-címének lekérése lehetőséget a felső parancssávon. Ez lehetővé teszi, hogy másolja az URL-címet a függvény meghívásához.

    Képernyőkép a Függvény URL-címének lekérése parancsról az Azure Portalon.

A függvény tesztelése az Azure-ban

A másolt alapértelmezett gazdagépkulcs és URL-cím használatával tesztelje a függvényt az Azure Portalon.

  1. A bal oldalon, a Fejlesztőeszközök csoportban válassza a Code + Testlehetőséget.

  2. Válassza a Teszt/Futtatás lehetőséget a parancssávban.

  3. Bemenetként használja az alapértelmezett Postbillentyűt, majd illessze be a kérelem törzsébe:

    {
        "values": [
            {
                "recordId": "e1",
                "data":
                {
                    "text1":  "Hello",
                    "text2":  "World"
                }
            },
            {
                "recordId": "e2",
                "data": "This is an invalid input"
            }
        ]
    }
    
  4. Válassza a Futtatás lehetőséget.

    A bemeneti specifikáció képernyőképe

Ennek a példának ugyanazt az eredményt kell eredményeznie, amit korábban a függvény helyi környezetben való futtatásakor látott.

Hozzáadás egy készségkészlethez

Most, hogy új egyéni képességekkel rendelkezik, hozzáadhatja azt a készségkészlethez. Az alábbi példa bemutatja, hogyan hívhatja meg azt a képességet, amely összefűzi a dokumentum címét és szerzőét egyetlen mezőbe, amelyet merged_title_author hívunk.

Cserélje az [your-function-url-here]-t az új Azure-függvény URL-címével.

{
    "skills": [
      "[... other existing skills in the skillset are here]",  
      {
        "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
        "description": "Our new search custom skill",
        "uri": "https://[your-function-url-here]",        
          "context": "/document/merged_content/organizations/*",
          "inputs": [
            {
              "name": "text1",
              "source": "/document/metadata_title"
            },
            {
              "name": "text2",
              "source": "/document/metadata_author"
            },
          ],
          "outputs": [
            {
              "name": "text",
              "targetName": "merged_title_author"
            }
          ]
      }
  ]
}

Ne felejtsen el hozzáadni egy "outputFieldMapping"-et az indexelő definíciójához, hogy a "merged_title_author"-t átvigye a keresési index "fullname" mezőjéhez.

"outputFieldMappings": [
    {
        "sourceFieldName": "/document/content/merged_title_author",
        "targetFieldName": "fullname"
    }
]