Sdílet prostřednictvím


Kurz: Přidání tipů pro dokončování textu v Azure OpenAI do funkcí v editoru Visual Studio Code

V tomto článku se dozvíte, jak pomocí editoru Visual Studio Code přidat koncový bod HTTP do aplikace funkcí, kterou jste vytvořili v předchozím článku rychlého startu. Při aktivaci tento nový koncový bod HTTP používá vstupní vazbu pro dokončování textu Azure OpenAI k získání tipů pro dokončování textu z datového modelu.

Během tohoto kurzu se naučíte, jak provádět tyto úlohy:

  • Vytváření prostředků v Azure OpenAI
  • Nasaďte model v OpenAI prostředku.
  • Nastavte přístupová oprávnění k prostředku modelu.
  • Povolte aplikaci funkcí pro připojení k OpenAI.
  • Přidejte vazby OpenAI do funkce aktivované protokolem HTTP.

1. Kontrola požadavků

  • Získejte přístup k Azure OpenAI ve vašem předplatném Azure. Pokud jste přístup ještě nedostali, vyplňte tento formulář a požádejte o přístup.
  • Nainstalujte nástroje rozhraní příkazového řádku .NET Core.
  • Emulátor úložiště Azurite. I když můžete použít skutečný účet služby Azure Storage, článek předpokládá, že používáte tento emulátor.

2. Vytvoření prostředků Azure OpenAI

Následující kroky ukazují, jak vytvořit datový model Azure OpenAI na webu Azure Portal.

  1. Přihlaste se pomocí svého předplatného Azure na webu Azure Portal.

  2. Vyberte Vytvořit prostředek a vyhledejte Azure OpenAI. Když službu vyhledáte, vyberte Vytvořit.

  3. Na stránce Vytvořit Azure OpenAI zadejte následující informace pro pole na kartě Základy:

    Pole Popis
    Předplatné Vaše předplatné, které bylo nasazené pro použití Azure OpenAI
    Skupina prostředků Skupina prostředků, kterou jste vytvořili pro aplikaci funkcí v předchozím článku. Název této skupiny prostředků najdete tak, že kliknete pravým tlačítkem na aplikaci funkcí v prohlížeči prostředků Azure, vyberete vlastnosti a pak vyhledáte resourceGroup nastavení ve vrácených souborech prostředků JSON.
    Oblast V ideálním případě je stejné umístění jako aplikace funkcí.
    Název Popisný název prostředku služby Azure OpenAI, například mySampleOpenAI.
    Cenová úroveň Cenová úroveň prostředku. V současné době je pro službu Azure OpenAI dostupná jenom úroveň Standard. Další informace o cenách najdete na stránce s cenami Azure OpenAI.

    Snímek obrazovky znázorňující konfiguraci prostředku Azure OpenAI na webu Azure Portal

  4. Výběrem možnosti Další dvakrát přijměte výchozí hodnoty na kartách Síť i Značky . Služba, kterou vytvoříte, nemá žádná omezení sítě, včetně z internetu.

  5. Vyberte Další poslední čas, abyste přešli do konečné fáze procesu: Zkontrolovat a odeslat.

  6. Potvrďte nastavení konfigurace a vyberte Vytvořit.

    Na webu Azure Portal se zobrazí oznámení o dostupnosti nového prostředku. V oznámení vyberte Přejít k prostředku nebo vyhledejte nový prostředek Azure OpenAI podle názvu.

  7. Na stránce prostředku Azure OpenAI pro nový prostředek vyberte Kliknutím sem zobrazíte koncové body v části Essentials Endpoints>. Zkopírujte adresu URL koncového bodu a klíče. Tyto hodnoty uložte, budete je potřebovat později.

Teď, když máte přihlašovací údaje pro připojení k modelu v Azure OpenAI, musíte tyto přihlašovací údaje pro přístup nastavit v nastavení aplikace.

3. Nasazení modelu

Teď můžete nasadit model. V nástroji Azure OpenAI Studio si můžete vybrat jeden z několika dostupných modelů.

Pokud chcete nasadit model, postupujte takto:

  1. Přihlaste se k Azure OpenAI Studiu.

  2. Zvolte předplatné a prostředek Azure OpenAI, který jste vytvořili, a vyberte Použít prostředek.

  3. V části Správa vyberte Nasazení.

  4. Vyberte Vytvořit nové nasazení a nakonfigurujte následující pole:

    Pole Popis
    Název nasazení Pečlivě zvolte jméno. Název nasazení se ve vašem kódu používá k volání modelu pomocí klientských knihoven a rozhraní REST API, takže je nutné ho uložit pro pozdější použití.
    Výběr modelu Dostupnost modelů se liší podle oblasti. Seznam dostupných modelů pro každou oblast najdete v tabulce souhrnu modelů a dostupnosti oblastí.

    Důležité

    Když k modelu přistupujete přes rozhraní API, musíte místo názvu základního modelu ve voláních rozhraní API odkazovat na název nasazení, což je jeden z klíčových rozdílů mezi OpenAI a Azure OpenAI. OpenAI vyžaduje pouze název modelu. Azure OpenAI vždy vyžaduje název nasazení, i když používáte parametr modelu. V naší dokumentaci často máme příklady, kdy jsou názvy nasazení reprezentovány jako identické s názvy modelů, což pomáhá určit, který model funguje s konkrétním koncovým bodem rozhraní API. V konečném důsledku můžou názvy nasazení dodržovat jakoukoli konvenci pojmenování, která je pro váš případ použití nejvhodnější.

  5. Přijměte výchozí hodnoty pro zbytek nastavení a vyberte Vytvořit.

    Tabulka nasazení zobrazuje novou položku, která odpovídá nově vytvořenému modelu.

Teď máte všechno, co potřebujete k přidání dokončování textu založeného na Azure OpenAI do aplikace funkcí.

4. Aktualizace nastavení aplikace

  1. V editoru Visual Studio Code otevřete místní projekt kódu, který jste vytvořili po dokončení předchozího článku.

  2. V souboru local.settings.json v kořenové složce projektu aktualizujte AzureWebJobsStorage nastavení na UseDevelopmentStorage=true. Tento krok můžete přeskočit, pokud AzureWebJobsStorage je nastavení v local.settings.json nastavené na připojovací řetězec pro existující účet azure Storage místo UseDevelopmentStorage=true.

  3. Do souboru local.settings.json přidejte tyto hodnoty nastavení:

    • AZURE_OPENAI_ENDPOINT: vyžaduje rozšíření vazby. Tuto hodnotu nastavte na koncový bod prostředku Azure OpenAI, který jste vytvořili dříve.
    • AZURE_OPENAI_KEY: vyžaduje rozšíření vazby. Nastavte tuto hodnotu na klíč prostředku Azure OpenAI.
    • CHAT_MODEL_DEPLOYMENT_NAME: slouží k definování vstupní vazby. Nastavte tuto hodnotu na název, který jste zvolili pro nasazení modelu.
  4. Uložte soubor. Když nasadíte do Azure, musíte tato nastavení také přidat do aplikace funkcí.

5. Registrace rozšíření vazeb

Vzhledem k tomu, že používáte výstupní vazbu Azure OpenAI, musíte mít před spuštěním projektu nainstalované odpovídající rozšíření vazeb.

Kromě triggerů HTTP a časovače se vazby implementují jako balíčky rozšíření. Pokud chcete do projektu přidat balíček rozšíření Azure OpenAI, spusťte tento příkaz dotnet add package v okně terminálu :

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.OpenAI --prerelease

5. Aktualizace sady rozšíření

Pokud chcete získat přístup k vazbám Azure OpenAI ve verzi Preview, musíte použít verzi Preview sady rozšíření, která obsahuje toto rozšíření.

extensionBundle Nahraďte nastavení v aktuálním host.json souboru tímto kódem JSON:

 "extensionBundle": {
   "id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
   "version": "[4.*, 5.0.0)"
 }

Teď můžete ve svém projektu použít výstupní vazbu Azure OpenAI.

6. Vrácení dokončování textu z modelu

Kód, který přidáte, whois vytvoří koncový bod funkce HTTP ve stávajícím projektu. V této funkci se data předaná v parametru ADRESY URL name požadavku GET používají k dynamickému vytvoření výzvy k dokončení. Tato dynamická výzva je vázána na vstupní vazbu pro dokončení textu, která vrátí odpověď z modelu na základě výzvy. Dokončení z modelu se vrátí v odpovědi HTTP.

  1. Do existujícího HttpExample souboru třídy přidejte tento using příkaz:

    using Microsoft.Azure.Functions.Worker.Extensions.OpenAI.TextCompletion;
    
  2. Do stejného souboru přidejte tento kód, který definuje nový koncový bod triggeru HTTP s názvem whois:

    [Function(nameof(WhoIs))]
    public IActionResult WhoIs([HttpTrigger(AuthorizationLevel.Function, Route = "whois/{name}")] HttpRequest req,
    [TextCompletionInput("Who is {name}?", Model = "%CHAT_MODEL_DEPLOYMENT_NAME%")] TextCompletionResponse response)
    {
        if(!String.IsNullOrEmpty(response.Content))
        {
            return new OkObjectResult(response.Content);
        }
        else
        {
            return new NotFoundObjectResult("Something went wrong.");
        }
    }
    
  1. pom.xml Aktualizujte soubor projektu, aby se tento odkaz přidal do properties kolekce:

    <azure-functions-java-library-openai>0.2.0-preview</azure-functions-java-library-openai>
    
  2. Do stejného souboru přidejte tuto závislost do dependencies kolekce:

    <dependency>
        <groupId>com.microsoft.azure.functions</groupId>
        <artifactId>azure-functions-java-library-openai</artifactId>
        <version>${azure-functions-java-library-openai}</version>
    </dependency>
    
  3. Do existujícího Function.java souboru projektu přidejte tyto import příkazy:

    import com.microsoft.azure.functions.openai.annotation.textcompletion.TextCompletion;
    import com.microsoft.azure.functions.openai.annotation.textcompletion.TextCompletionResponse;
    
  4. Do stejného souboru přidejte tento kód, který definuje nový koncový bod triggeru HTTP s názvem whois:

    @FunctionName("WhoIs")
    public HttpResponseMessage whoIs(
        @HttpTrigger(
            name = "req", 
            methods = {HttpMethod.GET},
            authLevel = AuthorizationLevel.ANONYMOUS, 
            route = "whois/{name}") 
            HttpRequestMessage<Optional<String>> request,
        @BindingName("name") String name,
        @TextCompletion(prompt = "Who is {name}?", model = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response") TextCompletionResponse response,
        final ExecutionContext context) {
        return request.createResponseBuilder(HttpStatus.OK)
            .header("Content-Type", "application/json")
            .body(response.getContent())
            .build();
    }
    
  1. V editoru Visual Studio Code stiskněte klávesu F1 a v typ Azure Functions: Create Function...palety příkazů vyberte trigger HTTP, zadejte název whoisfunkce a stiskněte Enter.

  2. V novém whois.js souboru kódu nahraďte obsah souboru tímto kódem:

    const { app, input } = require("@azure/functions");
    
    // This OpenAI completion input requires a {name} binding value.
    const openAICompletionInput = input.generic({
        prompt: 'Who is {name}?',
        maxTokens: '100',
        type: 'textCompletion',
        model: '%CHAT_MODEL_DEPLOYMENT_NAME%'
    })
    
    app.http('whois', {
        methods: ['GET'],
        route: 'whois/{name}',
        authLevel: 'function',
        extraInputs: [openAICompletionInput],
        handler: async (_request, context) => {
            var response = context.extraInputs.get(openAICompletionInput)
            return { body: response.content.trim() }
        }
    });
    
  1. V editoru Visual Studio Code stiskněte klávesu F1 a v typ Azure Functions: Create Function...palety příkazů vyberte trigger HTTP, zadejte název whoisfunkce a stiskněte Enter.

  2. V novém whois.ts souboru kódu nahraďte obsah souboru tímto kódem:

    import { app, input } from "@azure/functions";
    
    // This OpenAI completion input requires a {name} binding value.
    const openAICompletionInput = input.generic({
        prompt: 'Who is {name}?',
        maxTokens: '100',
        type: 'textCompletion',
        model: '%CHAT_MODEL_DEPLOYMENT_NAME%'
    })
    
    app.http('whois', {
        methods: ['GET'],
        route: 'whois/{name}',
        authLevel: 'function',
        extraInputs: [openAICompletionInput],
        handler: async (_request, context) => {
            var response: any = context.extraInputs.get(openAICompletionInput)
            return { body: response.content.trim() }
        }
    });
    
  1. Do existujícího function_app.py souboru projektu přidejte tento import příkaz:

    import json
    
  2. Do stejného souboru přidejte tento kód, který definuje nový koncový bod triggeru HTTP s názvem whois:

    @app.route(route="whois/{name}", methods=["GET"])
    @app.text_completion_input(arg_name="response", prompt="Who is {name}?", max_tokens="100", model = "%CHAT_MODEL_DEPLOYMENT_NAME%")
    def whois(req: func.HttpRequest, response: str) -> func.HttpResponse:
        response_json = json.loads(response)
        return func.HttpResponse(response_json["content"], status_code=200)
    
    
    @app.route(route="genericcompletion", methods=["POST"])
    @app.text_completion_input(arg_name="response", prompt="{Prompt}", model = "%CHAT_MODEL_DEPLOYMENT_NAME%")
    def genericcompletion(req: func.HttpRequest, response: str) -> func.HttpResponse:
        response_json = json.loads(response)
        return func.HttpResponse(response_json["content"], status_code=200)
    
  1. V editoru Visual Studio Code stiskněte klávesu F1 a v typu Azure Functions: Create Function...palety příkazů vyberte trigger HTTP, zadejte název whoisfunkce, vyberte Anonymní a stiskněte Enter.

  2. Otevřete nový whois/function.json soubor kódu a nahraďte jeho obsah tímto kódem, který přidá definici TextCompletionResponse vstupní vazby:

    {
      "bindings": [
        {
          "authLevel": "function",
          "type": "httpTrigger",
          "direction": "in",
          "name": "Request",
          "route": "whois/{name}",
          "methods": [
            "get"
          ]
        },
        {
          "type": "http",
          "direction": "out",
          "name": "Response"
        },
        {
          "type": "textCompletion",
          "direction": "in",
          "name": "TextCompletionResponse",
          "prompt": "Who is {name}?",
          "maxTokens": "100",
          "model": "%CHAT_MODEL_DEPLOYMENT_NAME%"
        }
      ]
    }
    
  3. Nahraďte obsah whois/run.ps1 souboru kódu tímto kódem, který vrátí odpověď vstupní vazby:

    using namespace System.Net
    
    param($Request, $TriggerMetadata, $TextCompletionResponse)
    
    Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
            StatusCode = [HttpStatusCode]::OK
            Body       = $TextCompletionResponse.Content
        })
    

7. Spusťte funkci.

  1. V editoru Visual Studio Code stiskněte klávesu F1 a na paletě příkazů zadejte a Azurite: Start stisknutím klávesy Enter spusťte emulátor úložiště Azurite.

  2. Stisknutím klávesy F5 spusťte projekt aplikace funkcí a nástroje Core Tools v režimu ladění.

  3. Se spuštěnými nástroji Core Tools odešlete do funkce koncového whois bodu požadavek GET s názvem v cestě, jako je tato adresa URL:

    http://localhost:7071/api/whois/<NAME>

    <NAME> Nahraďte řetězec hodnotou, kterou chcete předat do výzvy"Who is {name}?". Musí <NAME> to být název veřejného obrázku kódovaný adresou URL, například Abraham%20Lincoln.

    Zobrazená odpověď je odpověď na dokončení textu z modelu Azure OpenAI.

  4. Po vrácení odpovědi stiskněte Ctrl+C a zastavte nástroje Core Tools.

8. Vyčištění prostředků

Prostředky v Azure odkazují na aplikace funkcí, funkce, účty úložiště atd. Jsou seskupené do skupin prostředků a můžete odstranit všechno ve skupině odstraněním skupiny.

Vytvořili jste prostředky k dokončení těchto rychlých startů. Tyto prostředky se vám můžou účtovat v závislosti na stavu vašeho účtu a cenách služeb. Pokud prostředky už nepotřebujete, můžete k jejich odstranění použít tento postup:

  1. V editoru Visual Studio Code stisknutím klávesy F1 otevřete paletu příkazů. Na paletě příkazů vyhledejte a vyberte Azure: Open in portal.

  2. Zvolte aplikaci funkcí a stiskněte Enter. Otevře se stránka aplikace funkcí na webu Azure Portal.

  3. Na kartě Přehled vyberte pojmenovaný odkaz vedle skupiny prostředků.

    Snímek obrazovky s výběrem skupiny prostředků, která se má odstranit ze stránky aplikace funkcí

  4. Na stránce Skupina prostředků zkontrolujte seznam zahrnutých prostředků a ověřte, že se jedná o prostředky, které chcete odstranit.

  5. Vyberte Odstranit skupinu prostředků a postupujte podle pokynů.

    Odstranění může trvat několik minut. Po jeho dokončení se na několik sekund zobrazí oznámení. K zobrazení tohoto oznámení můžete také vybrat ikonu zvonku v horní části stránky.