Integrace OpenAI do aplikace

Dokončeno

Azure OpenAI nabízí sady SDK specifické pro jazyk i rozhraní REST API, které můžou vývojáři použít k přidání funkcí AI do svých aplikací. Možnosti generování AI v Azure OpenAI jsou poskytovány prostřednictvím modelů. Modely dostupné ve službě Azure OpenAI patří do různých rodin, z nichž každý má vlastní zaměření. Pokud chcete použít některý z těchto modelů, musíte ho nasadit prostřednictvím služby Azure OpenAI.

Jakmile vytvoříte prostředek Azure OpenAI a nasadíte model, můžete aplikaci nakonfigurovat.

Dostupné koncové body

K Azure OpenAI je možné přistupovat přes rozhraní REST API nebo sadu SDK dostupnou pro Python, C#, JavaScript a další. Koncové body dostupné pro interakci s nasazeným modelem se používají odlišně a některé koncové body můžou používat jenom určité modely. Dostupné koncové body jsou:

  • Dokončení – model přebírá vstupní výzvu a generuje jedno nebo více předpovídané dokončení. Toto hřiště uvidíte v studiu, ale v tomto modulu se nebudeme podrobně zabývat.
  • ChatCompletion – model přijímá vstup ve formě konverzace chatu (kde jsou role zadané se zprávou, kterou odesílají) a vygeneruje se další dokončení chatu.
  • Vkládání – model přijímá vstup a vrací vektorovou reprezentaci tohoto vstupu.

Například vstup pro ChatCompletion konverzaci s jasně definovanými rolemi pro každou zprávu:

{"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?"}

Když modelu AI poskytnete skutečnou konverzaci, může vygenerovat lepší odpověď s přesnějším tónem, formulací a kontextem. Koncový ChatCompletion bod umožňuje modelu realističtější konverzaci odesláním historie chatu s další zprávou uživatele.

ChatCompletion umožňuje také nechatovací scénáře, jako je sumarizace nebo extrakce entit. Toho lze dosáhnout tak, že poskytnete krátkou konverzaci, zadáte informace o systému a to, co chcete, spolu se vstupem uživatele. Pokud například chcete vygenerovat popis úlohy, zadejte ChatCompletion něco jako následující vstup konverzace.

{"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."}

Poznámka:

Completion je k dispozici pro modely starší gpt-3 generace, zatímco ChatCompletion je jedinou podporovanou možností pro gpt-4 modely a je upřednostňovaným koncovým bodem při použití gpt-35-turbo modelu.

Použití rozhraní REST API Azure OpenAI

Azure OpenAI nabízí rozhraní REST API pro interakci a generování odpovědí, které můžou vývojáři použít k přidání funkcí AI do svých aplikací. Tato lekce popisuje příklad použití, vstupu a výstupu z rozhraní API.

Pro každé volání rozhraní REST API potřebujete koncový bod a klíč z prostředku Azure OpenAI a název, který jste zadali pro nasazený model. V následujících příkladech se používají následující zástupné symboly:

Název zástupného textu Hodnota
YOUR_ENDPOINT_NAME Tento základní koncový bod najdete v části Klíče a koncový bod na webu Azure Portal. Jedná se o základní koncový bod vašeho prostředku, například https://sample.openai.azure.com/.
YOUR_API_KEY Klíče najdete v části Klíče a koncový bod na webu Azure Portal. Pro svůj prostředek můžete použít jeden klíč.
YOUR_DEPLOYMENT_NAME Tento název nasazení je název zadaný při nasazení modelu v Azure AI Foundry.

Dokončení chatu

Po nasazení modelu do prostředku Azure OpenAI můžete službě poslat výzvu pomocí POST požadavku.

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?"}]}'

Odpověď z rozhraní API bude podobná následujícímu formátu 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
        }
    ]
}

Koncové body REST umožňují zadat další volitelné vstupní parametry, například temperaturea max_tokens další. Pokud chcete do požadavku zahrnout některý z těchto parametrů, přidejte je do vstupních dat s požadavkem.

Vkládání

Vkládání je užitečné pro konkrétní formáty, které modely strojového učení snadno využívají. Pokud chcete vygenerovat vkládání ze vstupního textu, POST požadavek na embeddings koncový bod.

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...\"}"

Při generování vkládání nezapomeňte použít model v Azure OpenAI určený pro vkládání. Tyto modely začínají text-embedding nebo text-similarityv závislosti na tom, jaké funkce hledáte.

Odpověď z rozhraní API bude podobná následujícímu formátu JSON:

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

Použití Azure OpenAI se sadami SDK

Kromě rozhraní REST API mají uživatelé také přístup k modelům Azure OpenAI prostřednictvím sad C# a Python SDK. Stejné funkce jsou dostupné prostřednictvím rozhraní REST i těchto sad SDK.

Pro obě sady SDK popsané v této lekci potřebujete koncový bod a klíč z prostředku Azure OpenAI a název, který jste zadali pro nasazený model. V následujících fragmentech kódu se používají následující zástupné symboly:

Název zástupného textu Hodnota
YOUR_ENDPOINT_NAME Tento základní koncový bod najdete v části Klíče a koncový bod na webu Azure Portal. Jedná se o základní koncový bod vašeho prostředku, například https://sample.openai.azure.com/.
YOUR_API_KEY Klíče najdete v části Klíče a koncový bod na webu Azure Portal. Pro svůj prostředek můžete použít jeden klíč.
YOUR_DEPLOYMENT_NAME Tento název nasazení je název zadaný při nasazení modelu.

Instalace knihoven

Nejprve nainstalujte klientskou knihovnu pro preferovaný jazyk. Sada C# SDK je adaptace rozhraní REST API .NET a sestavená speciálně pro Azure OpenAI, dá se ale použít k připojení k prostředkům Azure OpenAI nebo koncovým bodům mimo Azure OpenAI. Sada Python SDK je vytvořená a udržovaná platformou OpenAI.

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

Konfigurace aplikace pro přístup k prostředku Azure OpenAI

Konfigurace pro každý jazyk se mírně liší, ale obě vyžadují nastavení stejných parametrů. Nezbytné parametry jsou endpoint, keya deployment name.

Přidejte do aplikace knihovnu a nastavte požadované parametry pro klienta.

// 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
        )

Volání prostředku Azure OpenAI

Jakmile nakonfigurujete připojení k Azure OpenAI, odešlete do modelu výzvu.

// 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")

Objekt odpovědi obsahuje několik hodnot, například total_tokens a finish_reason. Dokončení z objektu odpovědi bude podobné následujícímu dokončení:

"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."

V jazyce C# i Python může vaše volání obsahovat volitelné parametry včetně temperature a max_tokens.