Интеграция OpenAI в приложение

Завершено

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

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

доступные конечные точки;

Доступ к Azure OpenAI можно получить через REST API или пакет SDK, доступный для Python, C#, JavaScript и многое другое. Конечные точки, доступные для взаимодействия с развернутой моделью, используются по-разному, и некоторые конечные точки могут использовать только определенные модели. Доступные конечные точки:

  • Завершение — модель принимает входной запрос и создает одно или несколько прогнозируемых завершений. Вы увидите эту игровую площадку в студии, но не будет подробно описано в этом модуле.
  • ChatCompletion — модель принимает входные данные в виде беседы чата (где роли указываются с сообщением, которое они отправляют), и создается следующее завершение чата.
  • Внедрение — модель принимает входные данные и возвращает векторное представление этих входных данных.

Например, входные данные ChatCompletion — это беседа с четко определенными ролями для каждого сообщения:

{"role": "system", "content": "You are a helpful assistant, teaching people about AI."},
{"role": "user", "content": "Does Azure OpenAI support multiple languages?"},
{"role": "assistant", "content": "Yes, Azure OpenAI supports several languages, and can translate between them."},
{"role": "user", "content": "Do other Azure AI Services support translation too?"}

Когда модель ИИ дает реальную беседу, она может создать более точный ответ с более точным тоном, фразами и контекстом. ChatCompletion Конечная точка позволяет модели иметь более реалистичную беседу, отправляя журнал чата со следующим сообщением пользователя.

ChatCompletion также позволяет использовать сценарии, отличные от чата, например сводные данные или извлечение сущностей. Это можно сделать, предоставив короткую беседу, указав сведения о системе и необходимые данные, а также входные данные пользователя. Например, если вы хотите создать описание задания, укажите ChatCompletion примерно следующее входное представление беседы.

{"role": "system", "content": "You are an assistant designed to write intriguing job descriptions."},
{"role": "user", "content": "Write a job description for the following job title: 'Business Intelligence Analyst'. It should include responsibilities, required qualifications, and highlight benefits like time off and flexible hours."}

Примечание.

Completion доступен для моделей более ранних gpt-3 поколений, хотя ChatCompletion это единственный поддерживаемый вариант для gpt-4 моделей и является предпочтительной конечной точкой при использовании gpt-35-turbo модели.

Использование REST API Azure OpenAI

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

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

Имя заполнителя Значение
YOUR_ENDPOINT_NAME Эта базовая конечная точка находится в разделе "Ключи и конечная точка" в портал Azure. Это базовая конечная точка ресурса, например https://sample.openai.azure.com/.
YOUR_API_KEY Ключи находятся в разделе "Ключи и конечная точка" в портал Azure. Для ресурса можно использовать любой ключ.
YOUR_DEPLOYMENT_NAME Это имя развертывания, указанное при развертывании модели в Azure AI Foundry.

Завершение чата

После развертывания модели в ресурсе Azure OpenAI можно отправить запрос в службу с помощью POST запроса.

curl https://YOUR_ENDPOINT_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/chat/completions?api-version=2023-03-15-preview \
  -H "Content-Type: application/json" \
  -H "api-key: YOUR_API_KEY" \
  -d '{"messages":[{"role": "system", "content": "You are a helpful assistant, teaching people about AI."},
{"role": "user", "content": "Does Azure OpenAI support multiple languages?"},
{"role": "assistant", "content": "Yes, Azure OpenAI supports several languages, and can translate between them."},
{"role": "user", "content": "Do other Azure AI Services support translation too?"}]}'

Ответ API будет похож на следующий код JSON:

{
    "id": "chatcmpl-6v7mkQj980V1yBec6ETrKPRqFjNw9",
    "object": "chat.completion",
    "created": 1679001781,
    "model": "gpt-35-turbo",
    "usage": {
        "prompt_tokens": 95,
        "completion_tokens": 84,
        "total_tokens": 179
    },
    "choices": [
        {
            "message":
                {
                    "role": "assistant",
                    "content": "Yes, other Azure AI Services also support translation. Azure AI Services offer translation between multiple languages for text, documents, or custom translation through Azure AI Services Translator."
                },
            "finish_reason": "stop",
            "index": 0
        }
    ]
}

Конечные точки REST позволяют указывать другие необязательные входные параметры, такие как temperatureи max_tokens многое другое. Если вы хотите включить в запрос любой из этих параметров, добавьте их в входные данные с запросом.

Внедрение

Внедрение полезны для конкретных форматов, которые легко используются моделями машинного обучения. Чтобы создать внедрение из входного текста, POST запрос к конечной точке embeddings .

curl https://YOUR_ENDPOINT_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/embeddings?api-version=2022-12-01 \
  -H "Content-Type: application/json" \
  -H "api-key: YOUR_API_KEY" \
  -d "{\"input\": \"The food was delicious and the waiter...\"}"

При создании внедрения обязательно используйте модель в Azure OpenAI, предназначенную для внедрения. Эти модели начинаются с text-embedding или text-similarityв зависимости от того, какие функции вы ищете.

Ответ API будет похож на следующий код JSON:

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "embedding": [
        0.0172990688066482523,
        -0.0291879814639389515,
        ....
        0.0134544348834753042,
      ],
      "index": 0
    }
  ],
  "model": "text-embedding-ada:002"
}

Использование Azure OpenAI с пакетами SDK

Помимо интерфейсов REST API пользователи также могут получить доступ к моделям Azure OpenAI с помощью C# и пакетов SDK для Python. Одна и та же функция доступна как в REST, так и в этих пакетах SDK.

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

Имя заполнителя Значение
YOUR_ENDPOINT_NAME Эта базовая конечная точка находится в разделе "Ключи и конечная точка" в портал Azure. Это базовая конечная точка ресурса, например https://sample.openai.azure.com/.
YOUR_API_KEY Ключи находятся в разделе "Ключи и конечная точка" в портал Azure. Для ресурса можно использовать любой ключ.
YOUR_DEPLOYMENT_NAME Это имя развертывания, указанное при развертывании модели.

Установка библиотек

Сначала установите клиентную библиотеку для предпочитаемого языка. Пакет SDK C# — это адаптация REST API-интерфейсов .NET, созданная специально для Azure OpenAI, однако ее можно использовать для подключения к ресурсам Azure OpenAI или конечным точкам, отличным от Azure OpenAI. Пакет SDK для Python создается и поддерживается OpenAI.

dotnet add package Azure.AI.OpenAI --version <insert preferred version>
pip install openai

Настройка приложения для доступа к ресурсу Azure OpenAI

Конфигурация для каждого языка немного отличается, но для обоих требуется задать одни и те же параметры. Необходимые параметры: endpoint, keyи deployment name.

Добавьте библиотеку в приложение и задайте необходимые параметры для клиента.

// Add Azure OpenAI packages
using Azure.AI.OpenAI;
using OpenAI.Chat;

// Define parameters and initialize the client
string endpoint = "<YOUR_ENDPOINT_NAME>";
string key = "<YOUR_API_KEY>";
string deploymentName = "<YOUR_DEPLOYMENT_NAME>"; 

AzureOpenAIClient azureClient = new AzureOpenAIClient(new Uri(endpoint), new AzureKeyCredential(key));
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
# Add OpenAI library
from openai import AzureOpenAI

deployment_name = '<YOUR_DEPLOYMENT_NAME>' 

# Initialize the Azure OpenAI client
client = AzureOpenAI(
        azure_endpoint = '<YOUR_ENDPOINT_NAME>', 
        api_key='<YOUR_API_KEY>',  
        api_version="20xx-xx-xx" #  Target version of the API, such as 2024-02-15-preview
        )

Вызов ресурса Azure OpenAI

После настройки подключения к Azure OpenAI отправьте запрос в модель.

// Get chat completion
ChatCompletion completion = chatClient.CompleteChat(
    [
        new SystemChatMessage(systemMessage),
        new UserChatMessage(userMessage),
    ]);

// Print the response
Console.WriteLine($"{completion.Role}: {completion.Content[0].Text}");
response = client.chat.completions.create(
    model=deployment_name,
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is Azure OpenAI?"}
    ]
)
generated_text = response.choices[0].message.content

# Print the response
print("Response: " + generated_text + "\n")

Объект ответа содержит несколько значений, таких как total_tokens и finish_reason. Завершение объекта ответа будет аналогично следующему завершению:

"Azure OpenAI is a cloud-based artificial intelligence (AI) service that offers a range of tools and services for developing and deploying AI applications. Azure OpenAI provides a variety of services for training and deploying machine learning models, including a managed service for training and deploying deep learning models, a managed service for deploying machine learning models, and a managed service for managing and deploying machine learning models."

В C# и Python вызов может включать необязательные параметры, включая temperature и max_tokens.