Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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. Örnek, özel beceri arabirimini uygulayan bir Azure İşlevi kullandı.
Önkoşullar
Özel becerinin uygulaması gereken girişleri ve çıkışları gözden geçirmek için özel beceri arabirimini gözden geçirin.
Ortamınızı ayarlayın. Visual Studio Code ve Python uzantılarını kullanarak Azure'da bir işlev oluşturmak için Hızlı Başlangıç: Visual Studio Code kullanarak sunucusuz Azure İşlevi ayarlama talimatlarını takip ettik. Hızlı başlangıç, aşağıdaki araçların ve bileşenlerin yüklenmesinde size yol gösterir:
- Python 3.75 veya sonraki bir sürümü
- Visual Studio Code
- Visual Studio Code için Python uzantısı
- Azure İşlevleri Temel Araçları
- Visual Studio Code için Azure Functions Uzantısı
Azure İşlevi oluşturma
Bu örnekte web API'sini barındırma kavramını göstermek için Azure İşlevi kullanılır, ancak diğer yaklaşımlar mümkündür. Bilişsel beceri için arabirim gereksinimlerini karşıladığınız sürece, benimsediğiniz yaklaşım ö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ı, işlevleri yönetim, dağıtım ve kaynakların paylaşımı için mantıksal birim olarak gruplandırmanıza olanak tanır.
- Visual Studio Code'da F1 tuşuna basarak komut paletini açın. Komut paletinde
Azure Functions: Create new project...araması yapın ve öğesini seçin. - Proje çalışma alanınız için bir dizin konumu seçin ve seçinseçin. Zaten başka bir çalışma alanının parçası olan bir proje klasörünü kullanmayın.
- İşlev uygulaması projeniz için bir dil seçin. Bu öğretici için Pythonöğesini seçin.
- Python sürümünü seçin (sürüm 3.7.5, Azure İşlevleri tarafından desteklenir).
- 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 seçin.
- bir işlev adı belirtin. Bu durumda, Concatenator kullanalım
- Yetkilendirme düzeyi olarak İşlev seçin. İşlevin HTTP uç noktasını çağırmak için bir işlev erişim anahtarı kullanacaksınız.
- Projenizi nasıl açmak istediğinizi belirtin. Bu adım için Çalışma alanına ekle'i 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 Concatenator klasöründe de yeni bir HTTP ile tetiklenen işlev 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öntemini kendi 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.
Kodunuzun hatalarını yerel olarak 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.
İlgi alanı satırındaki '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 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.
Visual Studio Code'dan uygulama oluşturma
Visual Studio Code'da F1 tuşuna basarak komut paletini açın. Komut paletinde, Azure'da İşlev Uygulaması Oluştur arayın ve seçin.
Birden çok etkin aboneliğiniz varsa bu uygulamanın aboneliğini seçin.
İşlev uygulaması için genel olarak benzersiz bir ad girin. URL için geçerli bir ad yazın.
Bir çalışma zamanı yığını seçin ve yerel olarak çalıştırdığınız dil sürümünü seçin.
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ğıtma
Hala Visual Studio Code'da, komut paletini açmak için F1 tuşuna basın. Komut paletinde İşlev Uygulamasına Dağıt... öğesini arayın ve seçin..
Oluşturduğunuz işlev uygulamasını seçin.
Devam etmek istediğinizi onaylayın ve Dağıt'ı seçin. Dağıtım durumunu çıkış penceresinde izleyebilirsiniz.
Azure portalına geçin, Tüm Kaynaklaradresine gidin. Önceki adımda sağladığınız genel benzersiz adı kullanarak dağıttığınız işlev uygulamasını arayın.
Bahşiş
Ayrıca Visual Studio Code'da işlev uygulamasına sağ tıklayıp Portalda Açseçeneğini belirleyebilirsiniz.
Portalda, sol tarafta İşlevler seçin ve ardından oluşturduğunuz işlevi seçin.
İşlevin genel bakış sayfasında, en üstteki komut çubuğunda İşlev URL'sini al seçin. Bu, işlevi çağırmak için URL'yi kopyalamanıza olanak tanır.
İşlevi Azure'da test edin
Kopyaladığınız varsayılan konak anahtarını ve URL'yi kullanarak işlevinizi Azure portalından test edin.
Geliştirici altında, sol tarafta, Code + Testöğesini seçin.
Komut çubuğunda Test/Çalıştır'i seçin.
Giriş için, Postkullanın, varsayılan anahtarı 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" } ] }'i seçin.
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 alanda merged_title_author diyoruz.
[your-function-url-here] değerini yeni Azure İşlevinizin URL'si ile değiştirin.
{
"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"
}
]
}
]
}
"Dizinleyici tanımına 'merged_title_author' öğesini arama dizininde bir 'tam ad' alanına göndermek için 'outputFieldMapping' eklemeyi unutmayın."
"outputFieldMappings": [
{
"sourceFieldName": "/document/content/merged_title_author",
"targetFieldName": "fullname"
}
]