Przykład: tworzenie niestandardowej umiejętności przy użyciu języka Python (zarchiwizowanego)
Ten przykład jest zarchiwizowany i niedostępny. Wyjaśniono, jak przy użyciu języka Python i programu Visual Studio Code utworzyć niestandardową umiejętność web API. W przykładzie użyto funkcji platformy Azure, która implementuje niestandardowy interfejs umiejętności.
Warunki wstępne
Zapoznaj się z niestandardowym interfejsem umiejętności, aby przeanalizować dane wejściowe i wyjściowe, które powinna implementować ta umiejętność.
Skonfiguruj środowisko. Wykonaliśmy kroki Szybki start: tworzenie funkcji na platformie Azure przy użyciu języka Python przy użyciu programu Visual Studio Code w celu skonfigurowania bezserwerowej funkcji platformy Azure przy użyciu rozszerzeń programu Visual Studio Code i języka Python. Szybki przewodnik poprowadzi Cię przez instalację następujących narzędzi i komponentów:
Tworzenie funkcji platformy Azure
W tym przykładzie użyto funkcji platformy Azure do zademonstrowania koncepcji hostowania internetowego interfejsu API, ale możliwe są inne podejścia. Tak długo, jak spełniasz wymagania interfejsu dla umiejętności poznawczej, sposób, w jaki do tego podchodzisz, nie ma znaczenia. Jednak usługa Azure Functions ułatwia tworzenie niestandardowych umiejętności.
Tworzenie projektu dla funkcji
Szablon projektu usługi Azure Functions w programie Visual Studio Code tworzy projekt lokalny, który można opublikować w aplikacji funkcji na platformie Azure. Aplikacja funkcji umożliwia grupowanie funkcji jako jednostki logicznej do zarządzania, wdrażania i udostępniania zasobów.
- W programie Visual Studio Code naciśnij F1, aby otworzyć paletę poleceń. W palecie poleceń wyszukaj i wybierz pozycję
Azure Functions: Create new project...
. - Wybierz lokalizację katalogu dla obszaru roboczego projektu i wybierz pozycję Wybierz. Nie używaj folderu projektu, który jest już częścią innego obszaru roboczego.
- Wybierz język projektu aplikacji funkcji. Na potrzeby tego samouczka wybierz pozycję Python.
- Wybierz wersję języka Python (wersja 3.7.5 jest obsługiwana przez usługę Azure Functions).
- Wybierz szablon dla pierwszej funkcji projektu. Wybierz wyzwalacz HTTP, aby utworzyć funkcję wyzwalaną przez protokół HTTP w nowej aplikacji funkcyjnej.
- Podaj nazwę funkcji. W tym przypadku użyjemy Concatenator
- Wybierz pozycję Funkcja jako poziom autoryzacji. Użyjesz klucza dostępu funkcji, aby wywołać punkt końcowy HTTP funkcji.
- Określ sposób otwierania projektu. W tym kroku wybierz pozycję Dodaj do obszaru roboczego, aby utworzyć aplikację funkcji w bieżącym obszarze roboczym.
Program Visual Studio Code tworzy projekt aplikacji funkcjonalnej w nowym obszarze roboczym. Ten projekt zawiera pliki host.json i local.settings.jsonconfiguration oraz wszystkie pliki projektu specyficzne dla języka.
Nowa funkcja wyzwalana przez HTTP jest również tworzona w folderze Concatenator w projekcie aplikacji funkcji. W nim będzie dostępny plik o nazwie "__init__.py", z tą zawartością:
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
)
Teraz zmodyfikujmy ten kod, aby był zgodny z niestandardowym interfejsem umiejętności. Zastąp domyślny kod następującą zawartością:
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
}
})
Metoda transform_value wykonuje operację na jednym rekordzie. Możesz zmodyfikować metodę w celu spełnienia określonych potrzeb. Pamiętaj, aby wykonać wszelkie niezbędne weryfikacje danych wejściowych i zwrócić wszelkie błędy i ostrzeżenia, jeśli nie można ukończyć operacji.
Lokalne debugowanie kodu
Program Visual Studio Code ułatwia debugowanie kodu. Naciśnij F5 lub przejdź do menu debugowania i wybierz pozycję Rozpocznij debugowanie.
Możesz ustawić wszystkie punkty przerwania w kodzie, naciskając "F9" w wierszu zainteresowania.
Po rozpoczęciu debugowania funkcja będzie uruchamiana lokalnie. Aby wysłać żądanie do hosta lokalnego, możesz użyć narzędzia takiego jak Postman lub Fiddler. Zanotuj lokalizację lokalnego punktu końcowego w oknie Terminal.
Tworzenie aplikacji funkcji na platformie Azure
Jeśli zachowanie funkcji jest zadowalające, możesz ją opublikować. Do tej pory pracujesz lokalnie. W tej sekcji utworzysz aplikację funkcji na platformie Azure, a następnie wdrożysz projekt lokalny w utworzonej aplikacji.
Tworzenie aplikacji z poziomu programu Visual Studio Code
W programie Visual Studio Code naciśnij F1, aby otworzyć paletę poleceń. W palecie poleceń wyszukaj i wybierz pozycję Utwórz funkcję aplikacji na platformie Azure.
Jeśli masz wiele aktywnych subskrypcji, wybierz subskrypcję dla tej aplikacji.
Wprowadź globalnie unikatową nazwę dla aplikacji funkcjonalnej. Wpisz nazwę prawidłową dla adresu URL.
Wybierz stos środowiska uruchomieniowego i wybierz wersję języka, której używasz lokalnie.
Wybierz lokalizację aplikacji. Jeśli to możliwe, wybierz ten sam region, który hostuje również usługę wyszukiwania.
Utworzenie aplikacji może potrwać kilka minut. Gdy będzie gotowa, zobaczysz nową aplikację w sekcji Resources i Funkcje aplikacji aktywnej subskrypcji.
Wdrażanie na platformie Azure
Nadal w programie Visual Studio Code naciśnij F1, aby otworzyć paletę poleceń. W palecie poleceń wyszukaj i wybierz pozycję Wdróż do aplikacji funkcji....
Wybierz utworzoną aplikację funkcjonalną.
Upewnij się, że chcesz kontynuować, a następnie wybierz opcję Deplojuj. Stan wdrożenia można monitorować w oknie danych wyjściowych.
Przejdź do portalu Azure, a następnie przejdź do Wszystkie zasoby. Wyszukaj tę wdrożoną aplikację funkcji przy użyciu globalnie unikalnej nazwy podanej w poprzednim kroku.
Napiwek
Możesz również kliknąć prawym przyciskiem myszy aplikację funkcjonalną w programie Visual Studio Code i wybrać pozycję Otwórz w portalu.
W portalu po lewej stronie wybierz pozycję Functions, a następnie wybierz utworzoną funkcję.
Na stronie przeglądu funkcji wybierz na pasku poleceń u góry pozycję Pobierz adres URL funkcji. Umożliwi to skopiowanie adresu URL w celu wywołania funkcji.
Testowanie funkcji na platformie Azure
Używając domyślnego klucza hosta i skopiowanego adresu URL, przetestuj funkcję z poziomu witryny Azure Portal.
Po lewej stronie, w obszarze Deweloper, wybierz pozycję Kod + Test.
Na pasku poleceń wybierz pozycję Test/Uruchom.
W przypadku danych wejściowych użyj Post, klucza domyślnego, a następnie wklej w treści żądania:
{ "values": [ { "recordId": "e1", "data": { "text1": "Hello", "text2": "World" } }, { "recordId": "e2", "data": "This is an invalid input" } ] }
Wybierz pozycję Uruchom.
specyfikacji wejściowej
W tym przykładzie powinien zostać wygenerowany ten sam wynik, który był wcześniej wyświetlany podczas uruchamiania funkcji w środowisku lokalnym.
Dodawanie do zestawu umiejętności
Teraz, gdy masz nową niestandardową umiejętność, możesz dodać ją do zestawu umiejętności. W poniższym przykładzie pokazano, jak wywołać umiejętność, aby połączyć tytuł i autora dokumentu w jedno pole, które nazywamy „merged_title_author”.
Zastąp [your-function-url-here]
adresem URL nowej funkcji platformy Azure.
{
"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"
}
]
}
]
}
Pamiętaj, aby dodać element "outputFieldMapping" w definicji indeksatora, aby wysłać ciąg "merged_title_author" do pola "fullname" w indeksie wyszukiwania.
"outputFieldMappings": [
{
"sourceFieldName": "/document/content/merged_title_author",
"targetFieldName": "fullname"
}
]