Aracılığıyla paylaş


Örnek: Python kullanarak özel beceri oluşturma (Arşivlenmiş)

Bu örnek arşivlenmiş ve destek dışıdır. Python ve Visual Studio Code kullanarak bir web API'sine özel becerinin nasıl oluşturulacağı açıklanmıştır. Örnekte özel beceri arabirimini uygulayan bir Azure İşlevi kullanılmıştır.

Önkoşullar

Azure İşlevi oluşturma

Bu örnekte web API'sini barındırma kavramını göstermek için Bir Azure İşlevi kullanılır, ancak diğer yaklaşımlar da mümkündür. Bilişsel beceri için arabirim gereksinimlerini karşıladığınız sürece, yaklaşımınız önemsizdir. Ancak Azure İşlevleri, özel beceri oluşturmayı kolaylaştırır.

İşlev için proje oluşturma

Visual Studio Code'daki Azure İşlevleri proje şablonu, Azure'daki bir işlev uygulamasında yayımlanabilir yerel bir proje oluşturur. İşlev uygulaması, kaynakların yönetilmesi, dağıtılması ve paylaşılması için işlevleri bir mantıksal birim olarak gruplandırmanıza olanak tanır.

  1. Visual Studio Code komut paletini açmak için F1 tuşuna basın. Komut paletinde araması yapın ve öğesini seçin Azure Functions: Create new project....
  2. Projenizin çalışma alanı için bir dizin konumu seçtikten sonra Seç'i belirleyin. Zaten başka bir çalışma alanının parçası olan bir proje klasörünü kullanmayın.
  3. İşlev uygulaması projeniz için bir dil seçin. Bu öğretici için Python'ı seçin.
  4. Python sürümünü seçin (sürüm 3.7.5 Azure İşlevleri tarafından desteklenir).
  5. Projenizin ilk işlevi için bir şablon seçin. Yeni işlev uygulamasında HTTP ile tetiklenen bir işlev oluşturmak için HTTP tetikleyicisi'ni seçin.
  6. bir işlev adı girin. Bu durumda Concatenator'ı kullanalım
  7. Yetkilendirme düzeyi olarak İşlev'i seçin. İşlevin HTTP uç noktasını çağırmak için bir işlev erişim anahtarı kullanacaksınız.
  8. Projenizi nasıl açmak istediğinizi belirtin. Bu adım için Çalışma alanına ekle'yi seçerek işlev uygulamasını geçerli çalışma alanında oluşturun.

Visual Studio Code işlev uygulaması projesini yeni bir çalışma alanında oluşturur. Bu proje host.json ve local.settings.jsonconfiguration dosyalarının yanı sıra dile özgü proje dosyalarını içerir.

İşlev uygulaması projesinin Birleştirici klasöründe yeni bir HTTP ile tetiklenen işlev de oluşturulur. İçinde şu içeriğe sahip "__init__.py" adlı bir dosya bulunur:

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
        )

Şimdi bu kodu özel beceri arabirimini izleyecek şekilde değiştirelim. Varsayılan kodu aşağıdaki içerikle değiştirin:

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
                    }
            })

transform_value yöntemi tek bir kayıt üzerinde bir işlem gerçekleştirir. Yöntemi, özel gereksinimlerinizi karşılayacak şekilde değiştirebilirsiniz. Gerekli giriş doğrulamasını yapmayı ve işlem tamamlanamazsa hata ve uyarı döndürmeyi unutmayın.

Kodunuzda yerel olarak hata ayıklama

Visual Studio Code kodun hatalarını ayıklamayı kolaylaştırır. 'F5' tuşuna basın veya Hata Ayıklama menüsüne gidin ve Hata Ayıklamayı Başlat'ı seçin.

İlgilendiğiniz satırdaki 'F9' tuşuna basarak kodda herhangi bir kesme noktası ayarlayabilirsiniz.

Hata ayıklamaya başladıktan sonra işleviniz yerel olarak çalışır. İsteği localhost'a göndermek için Postman veya Fiddler gibi bir araç kullanabilirsiniz. Terminal penceresinde yerel uç noktanızın konumunu not edin.

Azure’da bir işlev uygulaması oluşturma

İşlev davranışından memnun olduğunuzda yayımlayabilirsiniz. Şu ana kadar yerel olarak çalışıyordun. Bu bölümde, Azure'da bir işlev uygulaması oluşturacak ve ardından yerel projeyi oluşturduğunuz uygulamaya dağıtacaksınız.

uygulamayı Visual Studio Code'dan oluşturma

  1. Visual Studio Code komut paletini açmak için F1 tuşuna basın. Komut paletinde Azure'da İşlev Uygulaması Oluştur'u arayın ve seçin.

  2. Birden çok etkin aboneliğiniz varsa bu uygulamanın aboneliğini seçin.

  3. İşlev uygulaması için genel olarak benzersiz bir ad girin. URL için geçerli bir ad yazın.

  4. Bir çalışma zamanı yığını seçin ve yerel olarak çalıştırdığınız dil sürümünü seçin.

  5. Uygulamanız için bir konum seçin. Mümkünse, arama hizmetinizi de barındıran bölgeyi seçin.

Uygulamanın oluşturulması birkaç dakika sürer. Hazır olduğunda, etkin aboneliğin Kaynaklar ve İşlev Uygulaması altında yeni uygulamayı görürsünüz.

Azure’a dağıtın

  1. Hala Visual Studio Code'de, komut paletini açmak için F1 tuşuna basın. Komut paletinde İşlev Uygulamasına Dağıt... öğesini arayın ve seçin.

  2. Oluşturduğunuz işlev uygulamasını seçin.

  3. Devam etmek istediğinizi onaylayın ve ardından Dağıt'ı seçin. Dağıtım durumunu çıkış penceresinde izleyebilirsiniz.

  4. Azure portal geçin, Tüm Kaynaklar'a gidin. Önceki adımda sağladığınız genel benzersiz adı kullanarak dağıtılan işlev uygulamasını arayın.

    İpucu

    ayrıca Visual Studio Code'da işlev uygulamasına sağ tıklayıp Portalda Aç'ı seçebilirsiniz.

  5. Portalda, sol tarafta İşlevler'i ve ardından oluşturduğunuz işlevi seçin.

  6. İşlevin genel bakış sayfasında, üstteki komut çubuğunda İşlev URL'sini Al'ı seçin. Bu, işlevi çağırmak için URL'yi kopyalamanıza olanak tanır.

    Azure portal'da İşlev URL'sini Al komutunun ekran görüntüsü.

Azure'da işlevi test edin

Kopyaladığınız varsayılan konak anahtarını ve URL'yi kullanarak işlevinizi Azure portal içinden test edin.

  1. Sol taraftaki Geliştirici'nin altında Kod + Test'i seçin.

  2. Komut çubuğunda Test/Çalıştır'ı seçin.

  3. Giriş için, varsayılan anahtar olan Post'u kullanın ve ardından istek gövdesine yapıştırın:

    {
        "values": [
            {
                "recordId": "e1",
                "data":
                {
                    "text1":  "Hello",
                    "text2":  "World"
                }
            },
            {
                "recordId": "e2",
                "data": "This is an invalid input"
            }
        ]
    }
    
  4. Çalıştır'ı seçin.

    Giriş belirtiminin ekran görüntüsü.

Bu örnek, işlevi yerel ortamda çalıştırırken daha önce gördüğünüz sonucun aynısını üretmelidir.

Beceri kümesine ekleme

Artık yeni bir özel beceriniz olduğuna göre, beceri kümesine ekleyebilirsiniz. Aşağıdaki örnekte, Belgenin Başlığı ve Yazarı'nı tek bir alanda birleştirme becerisini nasıl çağırabileceğiniz gösterilmektedir ve bu da merged_title_author olarak adlandırdığımız bir alandır.

değerini yeni Azure İşlevinizin URL'si ile değiştirin [your-function-url-here] .

{
    "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"
            }
          ]
      }
  ]
}

Arama dizinindeki bir "tam ad" alanına "merged_title_author" göndermek için dizin oluşturucu tanımına "outputFieldMapping" eklemeyi unutmayın.

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