Бөлісу құралы:


Руководство. Добавление подсказок завершения текста OpenAI в функции в Visual Studio Code

В этой статье показано, как использовать Visual Studio Code для добавления конечной точки HTTP в приложение-функцию, созданное в предыдущей краткой статье. При активации эта новая конечная точка HTTP использует входную привязку ввода текста Azure OpenAI для получения подсказок завершения текста из модели данных.

В рамках этого руководства вы узнаете, как выполнить следующие задачи:

  • Создание ресурсов в Azure OpenAI.
  • Разверните модель в OpenAI ресурс.
  • Задайте разрешения на доступ к ресурсу модели.
  • Включите приложение-функцию для подключения к OpenAI.
  • Добавьте привязки OpenAI в функцию, активированную HTTP.

1. Проверка предварительных требований

  • Получите доступ к Azure OpenAI в подписке Azure. Если вы еще не получили доступ, заполните эту форму , чтобы запросить доступ.
  • Эмулятор хранилища Azurite. Хотя вы также можете использовать фактическую учетную запись служба хранилища Azure, в статье предполагается, что вы используете этот эмулятор.

2. Создание ресурсов Azure OpenAI

Ниже показано, как создать модель данных Azure OpenAI в портал Azure.

  1. Войдите с помощью подписки Azure в портал Azure.

  2. Выберите " Создать ресурс " и найдите Azure OpenAI. При поиске службы нажмите кнопку "Создать".

  3. На странице "Создание Azure OpenAI" укажите следующие сведения для полей на вкладке "Основные сведения".

    Поле Description
    Подписка Подписка, которая была подключена для использования Azure OpenAI.
    Группа ресурсов Группа ресурсов, созданная для приложения-функции в предыдущей статье. Это имя группы ресурсов можно найти, щелкнув правой кнопкой мыши приложение-функцию в браузере ресурсов Azure, выбрав свойства и выполнив поиск resourceGroup параметра в возвращаемом файле ресурса JSON.
    Регион В идеале то же расположение, что и приложение-функция.
    Имя Описательное имя ресурса службы Azure OpenAI, например mySampleOpenAI.
    Ценовая категория Ценовая категория ресурса. В настоящее время для службы Azure OpenAI доступен только уровень "Стандартный". Дополнительные сведения о ценах см. на странице цен Azure OpenAI

    Снимок экрана: настройка ресурса Azure OpenAI в портал Azure.

  4. Нажмите кнопку "Далее ", чтобы принять значения по умолчанию для вкладок "Сеть " и "Теги ". Созданная служба не имеет ограничений сети, в том числе из Интернета.

  5. Нажмите кнопку "Следующий последний раз", чтобы перейти к последнему этапу процесса: просмотр и отправка.

  6. Подтвердите параметры конфигурации и нажмите кнопку "Создать".

    В портал Azure отображается уведомление о доступности нового ресурса. Выберите "Перейти к ресурсу " в уведомлении или найдите новый ресурс Azure OpenAI по имени.

  7. На странице ресурсов Azure OpenAI для нового ресурса выберите "Щелкните здесь", чтобы просмотреть конечные точки в разделе "Основные>конечные точки". Скопируйте URL-адрес конечной точки и ключи. Сохраните эти значения позже.

Теперь, когда у вас есть учетные данные для подключения к модели в Azure OpenAI, необходимо задать эти учетные данные доступа в параметрах приложения.

3. Развертывание модели

Теперь можно развернуть модель. Вы можете выбрать одну из нескольких доступных моделей в Azure OpenAI Studio.

Чтобы развернуть модель, выполните следующие действия.

  1. Войдите в Azure OpenAI Studio.

  2. Выберите подписку и созданный ресурс Azure OpenAI и выберите "Использовать ресурс".

  3. В разделе "Управление" выберите "Развертывания".

  4. Выберите "Создать новое развертывание " и настройте следующие поля:

    Поле Description
    Имя развертывания Тщательно выбирайте имя. Имя развертывания используется в коде для вызова модели с помощью клиентских библиотек и ИНТЕРФЕЙСов REST API, поэтому необходимо сохранить для последующего использования.
    Выбор модели Доступность модели зависит от региона. Список доступных моделей для каждого региона см . в сводной таблице модели и доступности регионов.

    Внимание

    При доступе к модели через API необходимо ссылаться на имя развертывания, а не имя базовой модели в вызовах API, что является одним из ключевых различий между OpenAI и Azure OpenAI. Для OpenAI требуется только имя модели. Azure OpenAI всегда требует имени развертывания, даже если используется параметр модели. В наших документах часто используются примеры, в которых имена развертываний представлены как идентичные именам моделей, чтобы указать, какая модель работает с определенной конечной точкой API. В конечном счете имена развертываний могут соответствовать любым соглашениям об именовании для вашего варианта использования.

  5. Примите значения по умолчанию для остальной части параметра и нажмите кнопку "Создать".

    В таблице развертываний показана новая запись, соответствующая созданной модели.

Теперь у вас есть все, что необходимо добавить в приложение-функцию на основе Azure OpenAI.

4. Обновление параметров приложения

  1. В Visual Studio Code откройте локальный проект кода, созданный при выполнении предыдущей статьи.

  2. В файле local.settings.json в корневой папке проекта обновите AzureWebJobsStorage параметр UseDevelopmentStorage=trueдо . Этот шаг можно пропустить, если AzureWebJobsStorage параметр в local.settings.json имеет значение строка подключения для существующей учетной записи служба хранилища Azure вместо UseDevelopmentStorage=trueнее.

  3. В файле local.settings.json добавьте следующие значения параметров:

    • AZURE_OPENAI_ENDPOINT: требуется расширением привязки. Присвойте этому значению конечную точку созданного ранее ресурса Azure OpenAI.
    • AZURE_OPENAI_KEY: требуется расширением привязки. Задайте для этого значения ключ для ресурса Azure OpenAI.
    • CHAT_MODEL_DEPLOYMENT_NAME: используется для определения входной привязки. Присвойте этому значению имя, выбранное для развертывания модели.
  4. Сохраните файл. При развертывании в Azure необходимо также добавить эти параметры в приложение-функцию.

5. Регистрация расширений привязки

Так как вы используете выходную привязку Azure OpenAI, перед запуском проекта необходимо установить соответствующее расширение привязок.

За исключением триггеров HTTP и таймера, привязки реализованы в виде пакетов расширений. Чтобы добавить пакет расширения Azure OpenAI в проект, выполните следующую команду dotnet add package в окне терминала :

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

5. Обновление пакета расширений

Чтобы получить доступ к предварительным версиям привязок Azure OpenAI, необходимо использовать предварительную версию пакета расширений, содержащего это расширение.

Замените extensionBundle параметр в текущем host.json файле этим JSON:

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

Теперь вы можете использовать выходную привязку Azure OpenAI в проекте.

6. Возврат завершения текста из модели

Добавленный код создает конечную точку whois функции HTTP в существующем проекте. В этой функции данные, передаваемые в параметре URL-адреса name запроса GET, используются для динамического создания запроса завершения. Эта динамическая строка привязана к входной привязке ввода текста, которая возвращает ответ модели на основе запроса. Завершение модели возвращается в ответе HTTP.

  1. Добавьте в существующий HttpExample файл класса следующее using :

    using Microsoft.Azure.Functions.Worker.Extensions.OpenAI.TextCompletion;
    
  2. В том же файле добавьте этот код, который определяет новую конечную точку триггера HTTP с именем 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 Обновите файл проекта, чтобы добавить эту ссылку в коллекциюproperties:

    <azure-functions-java-library-openai>0.3.0-preview</azure-functions-java-library-openai>
    
  2. В том же файле добавьте эту зависимость в коллекцию dependencies :

    <dependency>
        <groupId>com.microsoft.azure.functions</groupId>
        <artifactId>azure-functions-java-library-openai</artifactId>
        <version>${azure-functions-java-library-openai}</version>
    </dependency>
    
  3. Добавьте следующие import инструкции в существующий Function.java файл проекта:

    import com.microsoft.azure.functions.openai.annotation.textcompletion.TextCompletion;
    import com.microsoft.azure.functions.openai.annotation.textcompletion.TextCompletionResponse;
    
  4. В том же файле добавьте этот код, который определяет новую конечную точку триггера HTTP с именем 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. В Visual Studio Code нажмите клавишу F1 и в палитре Azure Functions: Create Function...команд, выберите триггер HTTP, введите имя whoisфункции и нажмите клавишу ВВОД.

  2. В новом whois.js файле кода замените содержимое файла следующим кодом:

    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. В Visual Studio Code нажмите клавишу F1 и в палитре Azure Functions: Create Function...команд, выберите триггер HTTP, введите имя whoisфункции и нажмите клавишу ВВОД.

  2. В новом whois.ts файле кода замените содержимое файла следующим кодом:

    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. Добавьте следующую import инструкцию в существующий function_app.py файл проекта:

    import json
    
  2. В том же файле добавьте этот код, который определяет новую конечную точку триггера HTTP с именем 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. В Visual Studio Code нажмите клавишу F1 и в палитре Azure Functions: Create Function...команд, выберите триггер HTTP, введите имя whoisфункции, выберите "Анонимный" и нажмите клавишу ВВОД.

  2. Откройте новый whois/function.json файл кода и замените его содержимое этим кодом, который добавляет определение входной привязки TextCompletionResponse :

    {
      "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. Замените содержимое файла кода этим кодом, который возвращает ответ входной whois/run.ps1 привязки:

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

7. Запустите функцию

  1. В Visual Studio Code нажмите клавишу F1 и введите Azurite: Start палитру команд и нажмите клавишу ВВОД, чтобы запустить эмулятор хранилища Azurite.

  2. Нажмите клавишу F5 , чтобы запустить проект приложения-функции и основные инструменты в режиме отладки.

  3. При выполнении основных инструментов отправьте запрос whois GET в функцию конечной точки с именем в пути, как по этому URL-адресу:

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

    Замените <NAME> строку значением, переданным в "Who is {name}?" запрос. Должно <NAME> быть url-кодированное имя общедоступной фигуры, например Abraham%20Lincoln.

    Ответ, который вы видите, — это ответ на завершение текста из модели Azure OpenAI.

  4. После возврата ответа нажмите клавиши CTRL+C, чтобы остановить работу Core Tools.

8. Очистка ресурсов

Ресурсы в Azure — это приложения-функции, функции, учетные записи хранения и т. д. Они объединяются в группы ресурсов, при удалении которых удаляются и все данные в них.

Вы создали ресурсы для завершения этих кратких руководств. Вы можете выставлять счета за эти ресурсы в зависимости от состояния учетной записи и цен на услуги. Если вам больше не нужны ресурсы, их можно удалить следующим образом:

  1. В Visual Studio Code нажмите клавишу F1, чтобы открыть палитру команд. В палитре команд найдите и щелкните Azure: Open in portal.

  2. Выберите приложение-функцию и нажмите клавишу ВВОД. Страница приложения-функции откроется на портале Azure.

  3. На вкладке Обзор выберите именованную ссылку рядом с полем Группа ресурсов.

    Снимок экрана: выбор группы ресурсов, которую требуется удалить со страницы приложения-функции.

  4. На странице Группа ресурсов просмотрите список включенных ресурсов и убедитесь, что именно их нужно удалить.

  5. Выберите Удалить группу ресурсов и следуйте инструкциям.

    Удаление может занять несколько минут. После этого на несколько секунд появится уведомление. Кроме того, можно выбрать значок колокольчика в верхней части страницы, чтобы просмотреть уведомление.