Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento příklad je archivován a není podporován. Vysvětluje, jak vytvořit vlastní dovednosti webového rozhraní API pomocí Pythonu a editoru Visual Studio Code. Příklad použil funkci Azure Functions , která implementuje vlastní rozhraní dovedností.
Požadavky
Zkontrolujte rozhraní vlastních dovedností a zkontrolujte vstupy a výstupy, které by vlastní dovednost měla implementovat.
Nastavte prostředí. Řídili jsme se rychlým startem: Vytvoření funkce v Azure pomocí Pythonu ve Visual Studio Code pro nastavení serverless funkce Azure Functions s rozšířeními pro Python. Rychlý start vás provede instalací následujících nástrojů a komponent:
Vytvoření funkce Azure Functions
Tento příklad používá funkci Azure Functions k předvedení konceptu hostování webového rozhraní API, ale další přístupy jsou možné. Pokud splňujete požadavky rozhraní pro kognitivní dovednost, je přístup, který berete, neměnný. Azure Functions ale usnadňuje vytvoření vlastní dovednosti.
Vytvoření projektu pro funkci
Šablona projektu Azure Functions v editoru Visual Studio Code vytvoří místní projekt, který lze publikovat do aplikace funkcí v Azure. Aplikace funkcí umožňuje seskupit funkce jako logickou jednotku pro správu, nasazení a sdílení prostředků.
- V editoru Visual Studio Code stisknutím klávesy F1 otevřete paletu příkazů. Na paletě příkazů vyhledejte a vyberte
Azure Functions: Create new project.... - Zvolte umístění adresáře pro pracovní prostor projektu a zvolte Vybrat. Nepoužívejte složku projektu, která už je součástí jiného pracovního prostoru.
- Vyberte jazyk projektu aplikace funkcí. Pro účely tohoto kurzu vyberte Python.
- Vyberte verzi Pythonu (služba Azure Functions podporuje verzi 3.7.5).
- Vyberte šablonu pro první funkci projektu. Výběrem triggeru HTTP vytvořte v nové aplikaci funkcí funkci aktivovanou protokolem HTTP.
- Zadejte název funkce. V tomto případě použijeme Concatenator.
- Jako úroveň autorizace vyberte funkci . K volání koncového bodu HTTP funkce použijete přístupový klíč funkce.
- Určete, jak chcete projekt otevřít. V tomto kroku vyberte Přidat do pracovního prostoru a vytvořte aplikaci funkcí v aktuálním pracovním prostoru.
Visual Studio Code vytvoří projekt aplikace funkcí v novém pracovním prostoru. Tento projekt obsahuje soubory host.json a local.settings.jsonconfiguration a všechny soubory projektu specifické pro jazyk.
Nová funkce aktivovaná protokolem HTTP se také vytvoří ve složce Concatenator projektu aplikace funkcí. Uvnitř bude soubor s názvem "__init__.py", s tímto obsahem:
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
)
Teď tento kód upravíme tak, aby sledoval rozhraní vlastních dovedností. Nahraďte výchozí kód následujícím obsahem:
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 provádí operaci s jedním záznamem. Metodu můžete upravit tak, aby vyhovovala vašim konkrétním potřebám. Nezapomeňte provést jakékoli nezbytné ověření vstupu a vrátit případné chyby a upozornění, pokud operaci nelze dokončit.
Lokálně ladit svůj kód
Visual Studio Code usnadňuje ladění kódu. Stiskněte klávesu F5 nebo přejděte do nabídky Ladění a vyberte Spustit ladění.
Jakékoli zarážky v kódu můžete nastavit stisknutím klávesy F9 na požadovaném řádku.
Jakmile začnete s laděním, vaše funkce bude spuštěna místně. K vydání požadavku na localhost můžete použít nástroj, jako je Postman nebo Fiddler. Poznamenejte si umístění místního koncového bodu v okně terminálu.
Vytvoření aplikace funkcí v Azure
Až budete s chováním funkce spokojeni, můžete ho publikovat. Zatím jste pracovali místně. V této části vytvoříte aplikaci funkcí v Azure a pak nasadíte místní projekt do aplikace, kterou jste vytvořili.
Vytvoření aplikace z editoru Visual Studio Code
V editoru Visual Studio Code stisknutím klávesy F1 otevřete paletu příkazů. Na paletě příkazů vyhledejte a vyberte Vytvořit aplikaci funkcí v Azure.
Pokud máte více aktivních předplatných, vyberte předplatné pro tuto aplikaci.
Zadejte globálně jedinečný název aplikace funkcí. Zadejte název, který je platný pro adresu URL.
Vyberte runtime a zvolte jazykovou verzi, kterou jste používali lokálně.
Vyberte umístění aplikace. Pokud je to možné, zvolte stejnou oblast, která je také hostitelem vyhledávací služby.
Vytvoření aplikace trvá několik minut. Až bude připravená, uvidíte novou aplikaci v části Prostředky a aplikace funkcí aktivního předplatného.
Nasazení do Azure
V editoru Visual Studio Code stisknutím klávesy F1 otevřete paletu příkazů. Na paletě příkazů vyhledejte a vyberte Nasadit do Function App....
Vyberte aplikaci funkcí, kterou jste vytvořili.
Potvrďte, že chcete pokračovat, a pak vyberte Nasadit. Stav nasazení můžete monitorovat v okně výstupu.
Přejděte na Azure portal a přejděte do Všechny prostředky. Vyhledejte aplikaci funkcí, kterou jste nasadili, pomocí globálně jedinečného názvu, který jste zadali v předchozím kroku.
Návod
Můžete také kliknout pravým tlačítkem na aplikaci funkcí v editoru Visual Studio Code a vybrat Otevřít na portálu.
Na portálu vlevo vyberte Funkce a pak vyberte funkci, kterou jste vytvořili.
Na stránce přehledu funkce vyberte v horní části panelu příkazů získat adresu URL funkce . To vám umožní zkopírovat adresu URL pro volání funkce.
Testování funkce v Azure
Pomocí výchozího klíče hostitele a adresy URL, kterou jste zkopírovali, otestujte funkci na webu Azure Portal.
Na levé straně v části Vývojář vyberte Kód + Test.
Na panelu příkazů vyberte Test/Spustit .
Pro vstup použijte Post, výchozí klíč a vložte text požadavku:
{ "values": [ { "recordId": "e1", "data": { "text1": "Hello", "text2": "World" } }, { "recordId": "e2", "data": "This is an invalid input" } ] }Vyberte Spustit.
Tento příklad by měl vytvořit stejný výsledek, který jste viděli dříve při spuštění funkce v místním prostředí.
Přidat do portfolia dovedností
Teď, když máte novou vlastní dovednost, můžete ji přidat do sady dovedností. Následující příklad ukazuje, jak využít funkci pro zřetězení názvu a autora dokumentu do jednoho pole, které nazýváme merged_title_author.
Nahraďte [your-function-url-here] adresou URL nové funkce Azure Functions.
{
"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"
}
]
}
]
}
Nezapomeňte do definice indexeru přidat "outputFieldMapping" a odeslat "merged_title_author" do pole "fullname" v indexu vyhledávání.
"outputFieldMappings": [
{
"sourceFieldName": "/document/content/merged_title_author",
"targetFieldName": "fullname"
}
]