Příklad: Vytvoření vlastní dovednosti pomocí Pythonu (archivováno)
Tento příklad je archivovaný a není podporován. Vysvětluje, jak vytvořit vlastní dovednost webového rozhraní API pomocí Pythonu a editoru Visual Studio Code. V příkladu se použila funkce Azure Functions , která implementuje rozhraní vlastních dovedností.
Požadavky
Zkontrolujte rozhraní vlastních dovedností a zkontrolujte vstupy a výstupy, které by měla vlastní dovednost implementovat.
Nastavte své prostředí. Postupovali jsme podle rychlého startu: Vytvoření funkce v Azure pomocí Pythonu pomocí editoru Visual Studio Code k nastavení funkce Azure Functions bez serveru pomocí editoru Visual Studio Code a rozšíření Pythonu. Rychlý start vás provede instalací následujících nástrojů a komponent:
Vytvoření funkce Azure Function
V tomto příkladu se k předvedení konceptu hostování webového rozhraní API používá funkce Azure Functions, ale jsou možné i jiné přístupy. Pokud splňujete požadavky na rozhraní pro kognitivní dovednost, je přístup, který používáte, irelevantní. Azure Functions ale snadno vytvořit vlastní dovednost.
Vytvoření projektu pro funkci
Šablona projektu Azure Functions v editoru Visual Studio Code vytvoří místní projekt, který je možné publikovat do aplikace funkcí v Azure. Aplikace funkcí umožňuje seskupit funkce jako logickou jednotku pro snadnější správu, nasazování 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 váš pracovní prostor projektu a zvolte Vybrat. Nepoužívejte složku projektu, která je již součástí jiného pracovního prostoru.
- Vyberte jazyk pro projekt aplikace funkcí. Pro účely tohoto kurzu vyberte Python.
- Vyberte verzi Pythonu (verze 3.7.5 je podporována Azure Functions).
- Vyberte šablonu pro první funkci projektu. Výběrem triggeru HTTP vytvořte funkci aktivovanou protokolem HTTP v nové aplikaci funkcí.
- Zadejte název funkce. V tomto případě použijeme zřetězení.
- Jako úroveň autorizace vyberte Funkce . Přístupový klíč funkce použijete k volání koncového bodu HTTP 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 konkrétní jazyk.
Ve složce Zřetězení projektu aplikace funkcí se také vytvoří nová funkce aktivovaná protokolem HTTP. 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 se řídil rozhraním 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 potřebné ověření vstupu a vrátit případné chyby a upozornění, pokud operaci nejde dokončit.
Místní ladění kódu
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í.
V kódu můžete nastavit zarážky stisknutím klávesy F9 na řádku zájmu.
Jakmile spustíte ladění, funkce se spustí místně. K vystavení požadavku na localhost můžete použít nástroj, jako je Postman nebo Fiddler. Poznamenejte si umístění vašeho místního koncového bodu v okně Terminálu.
Vytvoření aplikace funkcí v Azure
Pokud jste s chováním funkce spokojeni, můžete ji publikovat. Zatím jste pracoval 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 zásobník modulu runtime a zvolte jazykovou verzi, ve které jste místně spustili.
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
Stisknutím klávesy F1 v editoru Visual Studio Code otevřete paletu příkazů. Na paletě příkazů vyhledejte a vyberte Nasadit do aplikace funkcí....
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řepněte na Azure Portal a přejděte na 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.
Tip
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 Na panelu příkazů nahoře možnost 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 z Azure Portal.
Na levé straně v části Vývojář vyberte Kód + test.
Na panelu příkazů vyberte Testovat/spustit .
Pro vstup použijte výchozí klíč Post a vložte text požadavku:
{ "values": [ { "recordId": "e1", "data": { "text1": "Hello", "text2": "World" } }, { "recordId": "e2", "data": "This is an invalid input" } ] }
Vyberte Run (Spustit).
Tento příklad by měl vytvořit stejný výsledek, jaký jste viděli dříve při spuštění funkce v místním prostředí.
Přidání do sady dovedností
Teď, když máte novou vlastní dovednost, ji můžete přidat do sady dovedností. Následující příklad ukazuje, jak volat dovednost ke 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", který odešle "merged_title_author" do pole "fullname" ve vyhledávacím indexu.
"outputFieldMappings": [
{
"sourceFieldName": "/document/content/merged_title_author",
"targetFieldName": "fullname"
}
]