Azure OpenAI tarafından desteklenen programlama dilleri
.NET için Azure OpenAI istemci kitaplığı, .NET için resmi OpenAI istemci kitaplığının eşlikçisidir. Azure OpenAI kitaplığı, Azure OpenAI ile kullanmak üzere bir istemci yapılandırılır ve Azure OpenAI senaryolarına özgü istek ve yanıt modelleri için ek güçlü türdeki uzantı desteği sağlar.
Kararlı sürüm:
Kaynak kodu | Paketi (NuGet) | Paket başvurusu belgeleriAPI başvuru belgeleri Örnekler |
Önizleme sürümü:
Önizleme sürümü en son özelliklere erişebilir.
Kaynak kodu | Paketi (NuGet) | API başvuru belgeleri | Paket başvurusu belgeleri Örnekler
Azure OpenAI API sürüm desteği
Python ve JavaScript için Azure OpenAI istemci kitaplıklarından farklı olarak Azure OpenAI .NET paketi, Azure OpenAI API sürümlerinin belirli bir alt kümesini hedeflemeyle sınırlıdır. Genellikle her Azure OpenAI .NET paketi daha yeni Azure OpenAI API yayın özelliklerine erişimin kilidini açar. En son API sürümlerine erişim sahibi olmak özellik kullanılabilirliğini etkiler.
Sürüm seçimi sabit listesi tarafından AzureOpenAIClientOptions.ServiceVersion
denetlendi.
Kararlı sürüm şu anda şunları hedeflemektedir:
2024-06-01
Önizleme sürümü şu anda şunları hedefleyebilir:
2024-06-01
2024-08-01-preview
2024-09-01-preview
2024-10-01-preview
Yükleme
dotnet add package Azure.AI.OpenAI --prerelease
Paket Azure.AI.OpenAI
, bağımlılık olarak dahil edilen resmi OpenAI paketini temel alır.
Kimlik Doğrulaması
Azure OpenAI veya OpenAI ile etkileşim kurmak için aşağıdaki yaklaşımlardan biriyle bir örneği AzureOpenAIClient
oluşturun:
Güvenli, anahtarsız bir kimlik doğrulama yaklaşımı, Azure Kimlik kitaplığı aracılığıyla Microsoft Entra Id (eski adıYla Azure Active Directory) kullanmaktır. Kitaplığı kullanmak için:
dotnet add package Azure.Identity
Kitaplıktan istenen kimlik bilgisi türünü kullanın. Örneğin, DefaultAzureCredential
:
AzureOpenAIClient openAIClient = new(
new Uri("https://your-azure-openai-resource.com"),
new DefaultAzureCredential());
ChatClient chatClient = openAIClient.GetChatClient("my-gpt-4o-mini-deployment");
Azure OpenAI anahtarsız kimlik doğrulaması hakkında daha fazla bilgi için "Azure OpenAI güvenlik yapı taşını kullanmaya başlama" Hızlı Başlangıç makalesine bakın.
Ses
AzureOpenAIClient.GetAudioClient
Döküm
AzureOpenAIClient openAIClient = new(
new Uri("https://your-azure-openai-resource.com"),
new DefaultAzureCredential());
AudioClient client = openAIClient.GetAudioClient("whisper");
string audioFilePath = Path.Combine("Assets", "speech.mp3");
AudioTranscriptionOptions options = new()
{
ResponseFormat = AudioTranscriptionFormat.Verbose,
TimestampGranularities = AudioTimestampGranularities.Word | AudioTimestampGranularities.Segment,
};
AudioTranscription transcription = client.TranscribeAudio(audioFilePath, options);
Console.WriteLine("Transcription:");
Console.WriteLine($"{transcription.Text}");
Console.WriteLine();
Console.WriteLine($"Words:");
foreach (TranscribedWord word in transcription.Words)
{
Console.WriteLine($" {word.Word,15} : {word.StartTime.TotalMilliseconds,5:0} - {word.EndTime.TotalMilliseconds,5:0}");
}
Console.WriteLine();
Console.WriteLine($"Segments:");
foreach (TranscribedSegment segment in transcription.Segments)
{
Console.WriteLine($" {segment.Text,90} : {segment.StartTime.TotalMilliseconds,5:0} - {segment.EndTime.TotalMilliseconds,5:0}");
}
Metin Okuma (TTS)
using Azure.AI.OpenAI;
using Azure.Identity;
using OpenAI.Audio;
AzureOpenAIClient openAIClient = new(
new Uri("https://your-azure-openai-resource.com"),
new DefaultAzureCredential());
AudioClient client = openAIClient.GetAudioClient("tts-hd"); //Replace with your Azure OpenAI model deployment
string input = "Testing, testing, 1, 2, 3";
BinaryData speech = client.GenerateSpeech(input, GeneratedSpeechVoice.Alloy);
using FileStream stream = File.OpenWrite($"{Guid.NewGuid()}.mp3");
speech.ToStream().CopyTo(stream);
Sohbet
AzureOpenAIClient.GetChatClient
AzureOpenAIClient openAIClient = new(
new Uri("https://your-azure-openai-resource.com"),
new DefaultAzureCredential());
ChatClient chatClient = openAIClient.GetChatClient("my-gpt-4o-deployment");
ChatCompletion completion = chatClient.CompleteChat(
[
// System messages represent instructions or other guidance about how the assistant should behave
new SystemChatMessage("You are a helpful assistant that talks like a pirate."),
// User messages represent user input, whether historical or the most recent input
new UserChatMessage("Hi, can you help me?"),
// Assistant messages in a request represent conversation history for responses
new AssistantChatMessage("Arrr! Of course, me hearty! What can I do for ye?"),
new UserChatMessage("What's the best way to train a parrot?"),
]);
Console.WriteLine($"{completion.Role}: {completion.Content[0].Text}");
Sohbet iletilerini akışla aktar
Akış sohbeti tamamlamaları, yerine veya AsyncCollectionResult<StreamingChatCompletionUpdate>
ResultCollection<StreamingChatCompletionUpdate>
ClientResult<ChatCompletion>
döndüren ve CompleteChatStreamingAsync
yöntemini kullanır.CompleteChatStreaming
Bu sonuç koleksiyonları foreach veya await foreach kullanılarak yinelenebilir ve akışlı yanıttan yeni veriler sağlandığında her güncelleştirme gelir.
AzureOpenAIClient openAIClient = new(
new Uri("https://your-azure-openai-resource.com"),
new DefaultAzureCredential());
ChatClient chatClient = openAIClient.GetChatClient("my-gpt-4o-deployment");
CollectionResult<StreamingChatCompletionUpdate> completionUpdates = chatClient.CompleteChatStreaming(
[
new SystemChatMessage("You are a helpful assistant that talks like a pirate."),
new UserChatMessage("Hi, can you help me?"),
new AssistantChatMessage("Arrr! Of course, me hearty! What can I do for ye?"),
new UserChatMessage("What's the best way to train a parrot?"),
]);
foreach (StreamingChatCompletionUpdate completionUpdate in completionUpdates)
{
foreach (ChatMessageContentPart contentPart in completionUpdate.ContentUpdate)
{
Console.Write(contentPart.Text);
}
}
Eklemeler
AzureOpenAIClient.GetEmbeddingClient
using Azure.AI.OpenAI;
using Azure.Identity;
using OpenAI.Embeddings;
AzureOpenAIClient openAIClient = new(
new Uri("https://your-azure-openai-resource.com"),
new DefaultAzureCredential());
EmbeddingClient client = openAIClient.GetEmbeddingClient("text-embedding-3-large"); //Replace with your model deployment name
string description = "This is a test embedding";
OpenAIEmbedding embedding = client.GenerateEmbedding(description);
ReadOnlyMemory<float> vector = embedding.ToFloats();
Console.WriteLine(string.Join(", ", vector.ToArray()));
Hassas ayarlama
Şu anda Azure OpenAI .NET paketleriyle desteklenmiyor.
Batch
Şu anda Azure OpenAI .NET paketleriyle desteklenmiyor.
Görüntüler
AzureOpenAIClient.GetImageClient
using Azure.AI.OpenAI;
using Azure.Identity;
using OpenAI.Images;
AzureOpenAIClient openAIClient = new(
new Uri("https://your-azure-openai-resource.com"),
new DefaultAzureCredential());
ImageClient client = openAIClient.GetImageClient("dall-e-3"); // replace with your model deployment name.
string prompt = "A rabbit eating pancakes.";
ImageGenerationOptions options = new()
{
Quality = GeneratedImageQuality.High,
Size = GeneratedImageSize.W1792xH1024,
Style = GeneratedImageStyle.Vivid,
ResponseFormat = GeneratedImageFormat.Bytes
};
GeneratedImage image = client.GenerateImage(prompt, options);
BinaryData bytes = image.ImageBytes;
using FileStream stream = File.OpenWrite($"{Guid.NewGuid()}.png");
bytes.ToStream().CopyTo(stream);
Tamamlamalar (eski)
Azure OpenAI .NET paketleriyle desteklenmez.
Hata işleme
Hata kodları
Durum Kodu | Hata Türü |
---|---|
400 | Bad Request Error |
401 | Authentication Error |
Kategori 403 | Permission Denied Error |
404 | Not Found Error |
422 | Unprocessable Entity Error |
Kategori 429 | Rate Limit Error |
500 | Internal Server Error |
503 | Service Unavailable |
504 | Gateway Timeout |
Yeniden deneme sayısı
İstemci sınıfları, üstel geri alma kullanarak aşağıdaki hataları en fazla üç kez daha otomatik olarak yeniden dener:
- 408 İstek Zaman Aşımı
- 429 Çok Fazla İstek Var
- 500 İç Sunucu Hatası
- 502 Hatalı Ağ Geçidi
- 503 Hizmet Kullanılamıyor
- 504 Ağ Geçidi Zaman Aşımı
Kaynak kodu | Paketi (pkg.go.dev) | API başvuru belgeleri | Paket başvurusu belgeleri Örnekler
Azure OpenAI API sürüm desteği
Python ve JavaScript için Azure OpenAI istemci kitaplıklarının aksine, Azure OpenAI Go kitaplığı belirli bir Azure OpenAI API sürümüne hedeflenir. En son API sürümlerine erişim sahibi olmak özellik kullanılabilirliğini etkiler.
Geçerli Azure OpenAI API sürüm hedefi: 2024-10-01-preview
Bu, custom_client.go dosyasında tanımlanır.
Yükleme
azopenai
go get ile ve azidentity
modüllerini yükleyin:
go get github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai
# optional
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Kimlik Doğrulaması
azidentity modülü, Azure OpenAI ile Azure Active Directory kimlik doğrulaması için kullanılır.
package main
import (
"log"
"github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
)
func main() {
dac, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
// NOTE: this constructor creates a client that connects to an Azure OpenAI endpoint.
// To connect to the public OpenAI endpoint, use azopenai.NewClientForOpenAI
client, err := azopenai.NewClient("https://<your-azure-openai-host>.openai.azure.com", dac, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
_ = client
}
Azure OpenAI anahtarsız kimlik doğrulaması hakkında daha fazla bilgi için bkz . Anahtarsız Azure OpenAI kullanma.
Ses
Client.GenerateSpeechFromText
ackage main
import (
"context"
"fmt"
"io"
"log"
"os"
"github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
)
func main() {
openAIKey := os.Getenv("OPENAI_API_KEY")
// Ex: "https://api.openai.com/v1"
openAIEndpoint := os.Getenv("OPENAI_ENDPOINT")
modelDeploymentID := "tts-1"
if openAIKey == "" || openAIEndpoint == "" || modelDeploymentID == "" {
fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n")
return
}
keyCredential := azcore.NewKeyCredential(openAIKey)
client, err := azopenai.NewClientForOpenAI(openAIEndpoint, keyCredential, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
audioResp, err := client.GenerateSpeechFromText(context.Background(), azopenai.SpeechGenerationOptions{
Input: to.Ptr("i am a computer"),
Voice: to.Ptr(azopenai.SpeechVoiceAlloy),
ResponseFormat: to.Ptr(azopenai.SpeechGenerationResponseFormatFlac),
DeploymentName: to.Ptr("tts-1"),
}, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
defer audioResp.Body.Close()
audioBytes, err := io.ReadAll(audioResp.Body)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
fmt.Fprintf(os.Stderr, "Got %d bytes of FLAC audio\n", len(audioBytes))
}
Client.GetAudioTranscription
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
)
func main() {
azureOpenAIKey := os.Getenv("AOAI_WHISPER_API_KEY")
// Ex: "https://<your-azure-openai-host>.openai.azure.com"
azureOpenAIEndpoint := os.Getenv("AOAI_WHISPER_ENDPOINT")
modelDeploymentID := os.Getenv("AOAI_WHISPER_MODEL")
if azureOpenAIKey == "" || azureOpenAIEndpoint == "" || modelDeploymentID == "" {
fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n")
return
}
keyCredential := azcore.NewKeyCredential(azureOpenAIKey)
client, err := azopenai.NewClientWithKeyCredential(azureOpenAIEndpoint, keyCredential, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
mp3Bytes, err := os.ReadFile("testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.mp3")
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
resp, err := client.GetAudioTranscription(context.TODO(), azopenai.AudioTranscriptionOptions{
File: mp3Bytes,
// this will return _just_ the translated text. Other formats are available, which return
// different or additional metadata. See [azopenai.AudioTranscriptionFormat] for more examples.
ResponseFormat: to.Ptr(azopenai.AudioTranscriptionFormatText),
DeploymentName: &modelDeploymentID,
}, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
fmt.Fprintf(os.Stderr, "Transcribed text: %s\n", *resp.Text)
}
Sohbet
Client.GetChatCompletions
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
)
func main() {
azureOpenAIKey := os.Getenv("AOAI_CHAT_COMPLETIONS_API_KEY")
modelDeploymentID := os.Getenv("AOAI_CHAT_COMPLETIONS_MODEL")
// Ex: "https://<your-azure-openai-host>.openai.azure.com"
azureOpenAIEndpoint := os.Getenv("AOAI_CHAT_COMPLETIONS_ENDPOINT")
if azureOpenAIKey == "" || modelDeploymentID == "" || azureOpenAIEndpoint == "" {
fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n")
return
}
keyCredential := azcore.NewKeyCredential(azureOpenAIKey)
// In Azure OpenAI you must deploy a model before you can use it in your client. For more information
// see here: https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
client, err := azopenai.NewClientWithKeyCredential(azureOpenAIEndpoint, keyCredential, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
// This is a conversation in progress.
// NOTE: all messages, regardless of role, count against token usage for this API.
messages := []azopenai.ChatRequestMessageClassification{
// You set the tone and rules of the conversation with a prompt as the system role.
&azopenai.ChatRequestSystemMessage{Content: azopenai.NewChatRequestSystemMessageContent("You are a helpful assistant. You will talk like a pirate.")},
// The user asks a question
&azopenai.ChatRequestUserMessage{Content: azopenai.NewChatRequestUserMessageContent("Can you help me?")},
// The reply would come back from the ChatGPT. You'd add it to the conversation so we can maintain context.
&azopenai.ChatRequestAssistantMessage{Content: azopenai.NewChatRequestAssistantMessageContent("Arrrr! Of course, me hearty! What can I do for ye?")},
// The user answers the question based on the latest reply.
&azopenai.ChatRequestUserMessage{Content: azopenai.NewChatRequestUserMessageContent("What's the best way to train a parrot?")},
// from here you'd keep iterating, sending responses back from ChatGPT
}
gotReply := false
resp, err := client.GetChatCompletions(context.TODO(), azopenai.ChatCompletionsOptions{
// This is a conversation in progress.
// NOTE: all messages count against token usage for this API.
Messages: messages,
DeploymentName: &modelDeploymentID,
}, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
for _, choice := range resp.Choices {
gotReply = true
if choice.ContentFilterResults != nil {
fmt.Fprintf(os.Stderr, "Content filter results\n")
if choice.ContentFilterResults.Error != nil {
fmt.Fprintf(os.Stderr, " Error:%v\n", choice.ContentFilterResults.Error)
}
fmt.Fprintf(os.Stderr, " Hate: sev: %v, filtered: %v\n", *choice.ContentFilterResults.Hate.Severity, *choice.ContentFilterResults.Hate.Filtered)
fmt.Fprintf(os.Stderr, " SelfHarm: sev: %v, filtered: %v\n", *choice.ContentFilterResults.SelfHarm.Severity, *choice.ContentFilterResults.SelfHarm.Filtered)
fmt.Fprintf(os.Stderr, " Sexual: sev: %v, filtered: %v\n", *choice.ContentFilterResults.Sexual.Severity, *choice.ContentFilterResults.Sexual.Filtered)
fmt.Fprintf(os.Stderr, " Violence: sev: %v, filtered: %v\n", *choice.ContentFilterResults.Violence.Severity, *choice.ContentFilterResults.Violence.Filtered)
}
if choice.Message != nil && choice.Message.Content != nil {
fmt.Fprintf(os.Stderr, "Content[%d]: %s\n", *choice.Index, *choice.Message.Content)
}
if choice.FinishReason != nil {
// this choice's conversation is complete.
fmt.Fprintf(os.Stderr, "Finish reason[%d]: %s\n", *choice.Index, *choice.FinishReason)
}
}
if gotReply {
fmt.Fprintf(os.Stderr, "Got chat completions reply\n")
}
}
Client.GetChatCompletionsStream
package main
import (
"context"
"errors"
"fmt"
"io"
"log"
"os"
"github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
)
func main() {
azureOpenAIKey := os.Getenv("AOAI_CHAT_COMPLETIONS_API_KEY")
modelDeploymentID := os.Getenv("AOAI_CHAT_COMPLETIONS_MODEL")
// Ex: "https://<your-azure-openai-host>.openai.azure.com"
azureOpenAIEndpoint := os.Getenv("AOAI_CHAT_COMPLETIONS_ENDPOINT")
if azureOpenAIKey == "" || modelDeploymentID == "" || azureOpenAIEndpoint == "" {
fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n")
return
}
keyCredential := azcore.NewKeyCredential(azureOpenAIKey)
// In Azure OpenAI you must deploy a model before you can use it in your client. For more information
// see here: https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
client, err := azopenai.NewClientWithKeyCredential(azureOpenAIEndpoint, keyCredential, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
// This is a conversation in progress.
// NOTE: all messages, regardless of role, count against token usage for this API.
messages := []azopenai.ChatRequestMessageClassification{
// You set the tone and rules of the conversation with a prompt as the system role.
&azopenai.ChatRequestSystemMessage{Content: azopenai.NewChatRequestSystemMessageContent("You are a helpful assistant. You will talk like a pirate and limit your responses to 20 words or less.")},
// The user asks a question
&azopenai.ChatRequestUserMessage{Content: azopenai.NewChatRequestUserMessageContent("Can you help me?")},
// The reply would come back from the ChatGPT. You'd add it to the conversation so we can maintain context.
&azopenai.ChatRequestAssistantMessage{Content: azopenai.NewChatRequestAssistantMessageContent("Arrrr! Of course, me hearty! What can I do for ye?")},
// The user answers the question based on the latest reply.
&azopenai.ChatRequestUserMessage{Content: azopenai.NewChatRequestUserMessageContent("What's the best way to train a parrot?")},
// from here you'd keep iterating, sending responses back from ChatGPT
}
resp, err := client.GetChatCompletionsStream(context.TODO(), azopenai.ChatCompletionsStreamOptions{
// This is a conversation in progress.
// NOTE: all messages count against token usage for this API.
Messages: messages,
N: to.Ptr[int32](1),
DeploymentName: &modelDeploymentID,
}, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
defer resp.ChatCompletionsStream.Close()
gotReply := false
for {
chatCompletions, err := resp.ChatCompletionsStream.Read()
if errors.Is(err, io.EOF) {
break
}
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
for _, choice := range chatCompletions.Choices {
gotReply = true
text := ""
if choice.Delta.Content != nil {
text = *choice.Delta.Content
}
role := ""
if choice.Delta.Role != nil {
role = string(*choice.Delta.Role)
}
fmt.Fprintf(os.Stderr, "Content[%d], role %q: %q\n", *choice.Index, role, text)
}
}
if gotReply {
fmt.Fprintf(os.Stderr, "Got chat completions streaming reply\n")
}
}
Eklemeler
Client.GetEmbeddings
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
)
func main() {
azureOpenAIKey := os.Getenv("AOAI_EMBEDDINGS_API_KEY")
modelDeploymentID := os.Getenv("AOAI_EMBEDDINGS_MODEL")
// Ex: "https://<your-azure-openai-host>.openai.azure.com"
azureOpenAIEndpoint := os.Getenv("AOAI_EMBEDDINGS_ENDPOINT")
if azureOpenAIKey == "" || modelDeploymentID == "" || azureOpenAIEndpoint == "" {
fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n")
return
}
keyCredential := azcore.NewKeyCredential(azureOpenAIKey)
// In Azure OpenAI you must deploy a model before you can use it in your client. For more information
// see here: https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
client, err := azopenai.NewClientWithKeyCredential(azureOpenAIEndpoint, keyCredential, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
resp, err := client.GetEmbeddings(context.TODO(), azopenai.EmbeddingsOptions{
Input: []string{"Testing, testing, 1,2,3."},
DeploymentName: &modelDeploymentID,
}, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
for _, embed := range resp.Data {
// embed.Embedding contains the embeddings for this input index.
fmt.Fprintf(os.Stderr, "Got embeddings for input %d\n", *embed.Index)
}
}
Görüntü Oluşturma
Client.GetImageGenerations
package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
"github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
)
func main() {
azureOpenAIKey := os.Getenv("AOAI_DALLE_API_KEY")
// Ex: "https://<your-azure-openai-host>.openai.azure.com"
azureOpenAIEndpoint := os.Getenv("AOAI_DALLE_ENDPOINT")
azureDeployment := os.Getenv("AOAI_DALLE_MODEL")
if azureOpenAIKey == "" || azureOpenAIEndpoint == "" || azureDeployment == "" {
fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n")
return
}
keyCredential := azcore.NewKeyCredential(azureOpenAIKey)
client, err := azopenai.NewClientWithKeyCredential(azureOpenAIEndpoint, keyCredential, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
resp, err := client.GetImageGenerations(context.TODO(), azopenai.ImageGenerationOptions{
Prompt: to.Ptr("a cat"),
ResponseFormat: to.Ptr(azopenai.ImageGenerationResponseFormatURL),
DeploymentName: &azureDeployment,
}, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
for _, generatedImage := range resp.Data {
// the underlying type for the generatedImage is dictated by the value of
// ImageGenerationOptions.ResponseFormat. In this example we used `azopenai.ImageGenerationResponseFormatURL`,
// so the underlying type will be ImageLocation.
resp, err := http.Head(*generatedImage.URL)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
_ = resp.Body.Close()
fmt.Fprintf(os.Stderr, "Image generated, HEAD request on URL returned %d\n", resp.StatusCode)
}
}
Tamamlamalar (eski)
Client.GetChatCompletions
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
)
func main() {
azureOpenAIKey := os.Getenv("AOAI_COMPLETIONS_API_KEY")
modelDeployment := os.Getenv("AOAI_COMPLETIONS_MODEL")
// Ex: "https://<your-azure-openai-host>.openai.azure.com"
azureOpenAIEndpoint := os.Getenv("AOAI_COMPLETIONS_ENDPOINT")
if azureOpenAIKey == "" || modelDeployment == "" || azureOpenAIEndpoint == "" {
fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n")
return
}
keyCredential := azcore.NewKeyCredential(azureOpenAIKey)
// In Azure OpenAI you must deploy a model before you can use it in your client. For more information
// see here: https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
client, err := azopenai.NewClientWithKeyCredential(azureOpenAIEndpoint, keyCredential, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
resp, err := client.GetCompletions(context.TODO(), azopenai.CompletionsOptions{
Prompt: []string{"What is Azure OpenAI, in 20 words or less"},
MaxTokens: to.Ptr(int32(2048)),
Temperature: to.Ptr(float32(0.0)),
DeploymentName: &modelDeployment,
}, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Printf("ERROR: %s", err)
return
}
for _, choice := range resp.Choices {
fmt.Fprintf(os.Stderr, "Result: %s\n", *choice.Text)
}
}
Hata işleme
HTTP istekleri gönderen tüm yöntemler, bu istekler başarısız olduğunda geri döner *azcore.ResponseError
.
ResponseError
hata ayrıntılarına ve hizmetten gelen ham yanıta sahiptir.
Günlük Kaydı
Bu modülde azcore içinde günlüğe kaydetme uygulaması kullanılır. Tüm Azure SDK modülleri için günlüğe kaydetmeyi açmak için AZURE_SDK_GO_LOGGING tümü olarak ayarlayın. Günlükçü varsayılan olarak stderr'a yazar. Günlük çıkışını denetlemek için azcore/log paketini kullanın. Örneğin, yalnızca HTTP isteği ve yanıt olaylarını günlüğe kaydetme ve bunları stdout'a yazdırma:
import azlog "github.com/Azure/azure-sdk-for-go/sdk/azcore/log"
// Print log events to stdout
azlog.SetListener(func(cls azlog.Event, msg string) {
fmt.Println(msg)
})
// Includes only requests and responses in credential logs
azlog.SetEvents(azlog.EventRequest, azlog.EventResponse)
Kaynak kodu | Yapıtı (Maven) | API başvuru belgeleri | Paket başvurusu belgeleri Örnekler
Azure OpenAI API sürüm desteği
Python ve JavaScript için Azure OpenAI istemci kitaplıklarından farklı olarak, uyumluluğu sağlamak için Azure OpenAI Java paketinin Azure OpenAI API sürümlerinin belirli bir alt kümesini hedeflemeyle sınırlı olduğundan emin olun. Genel olarak her Azure OpenAI Java paketi, daha yeni Azure OpenAI API yayın özelliklerine erişimin kilidini açar. En son API sürümlerine erişim sahibi olmak özellik kullanılabilirliğini etkiler.
Sürüm seçimi sabit listesi tarafından OpenAIServiceVersion
denetlendi.
Desteklenen en son Azure OpenAI önizleme API'si:
-2024-08-01-preview
Desteklenen en son kararlı (GA) sürüm:
-2024-06-01
Yükleme
Paket ayrıntıları
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-openai</artifactId>
<version>1.0.0-beta.12</version>
</dependency>
Kimlik Doğrulaması
Azure OpenAI Hizmeti ile etkileşim kurmak için istemci sınıfının OpenAIAsyncClient
bir örneğini veya OpenAIClient
kullanarak OpenAIClientBuilder
oluşturmanız gerekir. Bir istemciyi Azure OpenAI ile kullanmak üzere yapılandırmak için Azure OpenAI kaynağına geçerli bir uç nokta URI'si ve azure OpenAI kaynağını kullanma yetkisi olan ilgili anahtar kimlik bilgileri, belirteç kimlik bilgileri veya Azure Kimlik bilgileri sağlayın.
Microsoft Entra Id ile kimlik doğrulaması için bazı ilk kurulumlar gerekir:
Azure Kimlik paketini ekleyin:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.13.3</version>
</dependency>
Kurulumdan sonra, hangi kimlik bilgisi azure.identity
türünü kullanacağınızı seçebilirsiniz. Örneğin, DefaultAzureCredential
istemcinin kimliğini doğrulamak için kullanılabilir: Microsoft Entra ID uygulamasının istemci kimliği, kiracı kimliği ve istemci gizli dizisi değerlerini ortam değişkenleri olarak ayarlayın: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET.
Yetkilendirme en kolayı DefaultAzureCredential kullanmaktır. Çalışan ortamında kullanılacak en iyi kimlik bilgilerini bulur.
TokenCredential defaultCredential = new DefaultAzureCredentialBuilder().build();
OpenAIClient client = new OpenAIClientBuilder()
.credential(defaultCredential)
.endpoint("{endpoint}")
.buildClient();
Azure OpenAI anahtarsız kimlik doğrulaması hakkında daha fazla bilgi için bkz . Anahtarsız Azure OpenAI kullanma.
Ses
client.getAudioTranscription
String fileName = "{your-file-name}";
Path filePath = Paths.get("{your-file-path}" + fileName);
byte[] file = BinaryData.fromFile(filePath).toBytes();
AudioTranscriptionOptions transcriptionOptions = new AudioTranscriptionOptions(file)
.setResponseFormat(AudioTranscriptionFormat.JSON);
AudioTranscription transcription = client.getAudioTranscription("{deploymentOrModelName}", fileName, transcriptionOptions);
System.out.println("Transcription: " + transcription.getText());
client.generateSpeechFromText
Metin okuma (TTS)
String deploymentOrModelId = "{azure-open-ai-deployment-model-id}";
SpeechGenerationOptions options = new SpeechGenerationOptions(
"Today is a wonderful day to build something people love!",
SpeechVoice.ALLOY);
BinaryData speech = client.generateSpeechFromText(deploymentOrModelId, options);
// Checkout your generated speech in the file system.
Path path = Paths.get("{your-local-file-path}/speech.wav");
Files.write(path, speech.toBytes());
Sohbet
client.getChatCompletions
List<ChatRequestMessage> chatMessages = new ArrayList<>();
chatMessages.add(new ChatRequestSystemMessage("You are a helpful assistant. You will talk like a pirate."));
chatMessages.add(new ChatRequestUserMessage("Can you help me?"));
chatMessages.add(new ChatRequestAssistantMessage("Of course, me hearty! What can I do for ye?"));
chatMessages.add(new ChatRequestUserMessage("What's the best way to train a parrot?"));
ChatCompletions chatCompletions = client.getChatCompletions("{deploymentOrModelName}",
new ChatCompletionsOptions(chatMessages));
System.out.printf("Model ID=%s is created at %s.%n", chatCompletions.getId(), chatCompletions.getCreatedAt());
for (ChatChoice choice : chatCompletions.getChoices()) {
ChatResponseMessage message = choice.getMessage();
System.out.printf("Index: %d, Chat Role: %s.%n", choice.getIndex(), message.getRole());
System.out.println("Message:");
System.out.println(message.getContent());
}
Akışlar
List<ChatRequestMessage> chatMessages = new ArrayList<>();
chatMessages.add(new ChatRequestSystemMessage("You are a helpful assistant. You will talk like a pirate."));
chatMessages.add(new ChatRequestUserMessage("Can you help me?"));
chatMessages.add(new ChatRequestAssistantMessage("Of course, me hearty! What can I do for ye?"));
chatMessages.add(new ChatRequestUserMessage("What's the best way to train a parrot?"));
ChatCompletions chatCompletions = client.getChatCompletions("{deploymentOrModelName}",
new ChatCompletionsOptions(chatMessages));
System.out.printf("Model ID=%s is created at %s.%n", chatCompletions.getId(), chatCompletions.getCreatedAt());
for (ChatChoice choice : chatCompletions.getChoices()) {
ChatResponseMessage message = choice.getMessage();
System.out.printf("Index: %d, Chat Role: %s.%n", choice.getIndex(), message.getRole());
System.out.println("Message:");
System.out.println(message.getContent());
}
Resimlerle sohbet tamamlamaları
List<ChatRequestMessage> chatMessages = new ArrayList<>();
chatMessages.add(new ChatRequestSystemMessage("You are a helpful assistant that describes images"));
chatMessages.add(new ChatRequestUserMessage(Arrays.asList(
new ChatMessageTextContentItem("Please describe this image"),
new ChatMessageImageContentItem(
new ChatMessageImageUrl("https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"))
)));
ChatCompletionsOptions chatCompletionsOptions = new ChatCompletionsOptions(chatMessages);
ChatCompletions chatCompletions = client.getChatCompletions("{deploymentOrModelName}", chatCompletionsOptions);
System.out.println("Chat completion: " + chatCompletions.getChoices().get(0).getMessage().getContent());
Eklemeler
client.getEmbeddings
EmbeddingsOptions embeddingsOptions = new EmbeddingsOptions(
Arrays.asList("Your text string goes here"));
Embeddings embeddings = client.getEmbeddings("{deploymentOrModelName}", embeddingsOptions);
for (EmbeddingItem item : embeddings.getData()) {
System.out.printf("Index: %d.%n", item.getPromptIndex());
for (Float embedding : item.getEmbedding()) {
System.out.printf("%f;", embedding);
}
}
Görüntü oluşturma
ImageGenerationOptions imageGenerationOptions = new ImageGenerationOptions(
"A drawing of the Seattle skyline in the style of Van Gogh");
ImageGenerations images = client.getImageGenerations("{deploymentOrModelName}", imageGenerationOptions);
for (ImageGenerationData imageGenerationData : images.getData()) {
System.out.printf(
"Image location URL that provides temporary access to download the generated image is %s.%n",
imageGenerationData.getUrl());
}
Hataları işleme
İstemci günlüğünü etkinleştirme
Azure OpenAI kitaplığıyla ilgili sorunları gidermek için önce uygulamanın davranışını izlemek için günlüğe kaydetmeyi etkinleştirmek önemlidir. Günlüklerdeki hatalar ve uyarılar genellikle neyin yanlış gittiğine ilişkin yararlı içgörüler sağlar ve bazen sorunları düzeltmek için düzeltici eylemler içerir. Java için Azure istemci kitaplıklarının iki günlük seçeneği vardır:
- Yerleşik günlük çerçevesi.
- SLF4J arabirimini kullanarak günlüğe kaydetme desteği.
Bu başvuru belgesindeki [Java için Azure SDK'da günlüğe kaydetmeyi yapılandırma][logging_overview] yönergelerine bakın.
HTTP isteği/yanıt günlüğünü etkinleştirme
Azure OpenAI hizmetinden gelen/giden kablo üzerinden gönderilen HTTP isteğinin veya yanıtın gözden geçirilmesi sorunları gidermede yararlı olabilir. HTTP isteğinin ve yanıt yükünün günlüğe kaydedilmesini etkinleştirmek için [OpenAIClient][openai_client] aşağıda gösterildiği gibi yapılandırılabilir. Sınıf yolunda SLF4J Logger
yoksa, günlüğe kaydetmeyi etkinleştirmek için makinenizde [AZURE_LOG_LEVEL][azure_log_level] ortam değişkenini ayarlayın.
OpenAIClient openAIClient = new OpenAIClientBuilder()
.endpoint("{endpoint}")
.credential(new AzureKeyCredential("{key}"))
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
.buildClient();
// or
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
OpenAIClient configurationClientAad = new OpenAIClientBuilder()
.credential(credential)
.endpoint("{endpoint}")
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
.buildClient();
Alternatif olarak, aşağıdaki ortam değişkenini ayarlayarak uygulamanızın tamamı için http isteklerinin ve yanıtlarının günlüğe kaydedilmesini yapılandırabilirsiniz. Bu değişikliğin, HTTP isteğinin/yanıtının günlüğe kaydedilmesini destekleyen her Azure istemcisi için günlüğe kaydetmeyi etkinleştireceğini unutmayın.
Ortam değişkeni adı: AZURE_HTTP_LOG_DETAIL_LEVEL
Değer | Günlük düzeyi |
---|---|
yok | HTTP isteği/yanıt günlüğü devre dışı bırakıldı |
temel | Yalnızca URL'leri, HTTP yöntemlerini ve isteği tamamlama süresini günlüğe kaydeder. |
üst bilgiler | BASIC'teki her şeyin yanı sıra tüm istek ve yanıt üst bilgilerini günlüğe kaydeder. |
gövde | BASIC'teki her şeyin yanı sıra tüm istek ve yanıt gövdesini günlüğe kaydeder. |
body_and_headers | ÜST BILGILER ve GÖVDE içindeki her şeyi günlüğe kaydeder. |
Not
İstek ve yanıt gövdesini günlüğe kaydederek gizli bilgiler içermediklerinden emin olun. Üst bilgileri günlüğe kaydederken, istemci kitaplığında günlüğe kaydetmenin güvenli olduğu kabul edilen varsayılan bir üst bilgi kümesi vardır, ancak bu küme, oluşturucudaki günlük seçenekleri aşağıda gösterildiği gibi güncelleştirilerek güncelleştirilebilir.
clientBuilder.httpLogOptions(new HttpLogOptions().addAllowedHeaderName("safe-to-log-header-name"))
Özel durumlarla ilgili sorunları giderme
Azure OpenAI hizmet yöntemleri hata durumunda bir[HttpResponseException
veya alt sınıfı oluşturur.
HttpResponseException
OpenAI istemci kitaplığı tarafından atılan, neyin yanlış gittiğine ilişkin belirli yararlı içgörüler sağlayan ve yaygın sorunları düzeltmek için düzeltici eylemler içeren ayrıntılı yanıt hata nesnesi içerir.
Bu hata bilgileri, nesnenin ileti özelliğinin HttpResponseException
içinde bulunabilir.
Zaman uyumlu istemciyle yakalama örneği aşağıda verilmiştir
List<ChatRequestMessage> chatMessages = new ArrayList<>();
chatMessages.add(new ChatRequestSystemMessage("You are a helpful assistant. You will talk like a pirate."));
chatMessages.add(new ChatRequestUserMessage("Can you help me?"));
chatMessages.add(new ChatRequestAssistantMessage("Of course, me hearty! What can I do for ye?"));
chatMessages.add(new ChatRequestUserMessage("What's the best way to train a parrot?"));
try {
ChatCompletions chatCompletions = client.getChatCompletions("{deploymentOrModelName}",
new ChatCompletionsOptions(chatMessages));
} catch (HttpResponseException e) {
System.out.println(e.getMessage());
// Do something with the exception
}
Zaman uyumsuz istemcilerle, hata geri çağırmalarında özel durumları yakalayabilir ve işleyebilirsiniz:
asyncClient.getChatCompletions("{deploymentOrModelName}", new ChatCompletionsOptions(chatMessages))
.doOnSuccess(ignored -> System.out.println("Success!"))
.doOnError(
error -> error instanceof ResourceNotFoundException,
error -> System.out.println("Exception: 'getChatCompletions' could not be performed."));
Kimlik Doğrulama hataları
Azure OpenAI, Microsoft Entra Id kimlik doğrulamayı destekler.
OpenAIClientBuilder
, ayarlamak için yöntemine credential
sahiptir. Geçerli bir kimlik bilgisi sağlamak için bağımlılığı kullanabilirsiniz azure-identity
.
Kaynak kodu | Paketi (npm) | Başvurusu |
Azure OpenAI API sürüm desteği
Azure OpenAI'de özellik kullanılabilirliği, hedeflediğiniz REST API sürümüne bağlıdır. En yeni özellikler için en son önizleme API'sini hedefleyin.
En son GA API'si | En Son Önizleme API'si |
---|---|
2024-10-21 |
2025-01-01-preview |
Yükleme
npm install openai
Kimlik Doğrulaması
Microsoft Entra ID belirteçlerini kullanarak Azure OpenAI hizmetiyle kimlik doğrulaması yapmanın çeşitli yolları vardır. Varsayılan yol, sınıfını paketten kullanmaktır DefaultAzureCredential
@azure/identity
.
import { DefaultAzureCredential } from "@azure/identity";
const credential = new DefaultAzureCredential();
Bu nesne daha sonra nesnenin AzureClientOptions
bir parçası olarak ve AssistantsClient
istemci oluşturucularına AzureOpenAI
geçirilir.
Ancak istemcinin AzureOpenAI
kimliğini doğrulamak için paketteki getBearerTokenProvider
işlevini @azure/identity
kullanmamız gerekir. Bu işlev, her istek için belirteçleri almak için dahili olarak kullanan bir belirteç sağlayıcısı AzureOpenAI
oluşturur. Belirteç sağlayıcısı aşağıdaki gibi oluşturulur:
import { AzureOpenAI } from 'openai';
import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
const credential = new DefaultAzureCredential();
const endpoint = "https://your-azure-openai-resource.com";
const apiVersion = "2024-10-21"
const scope = "https://cognitiveservices.azure.com/.default";
const azureADTokenProvider = getBearerTokenProvider(credential, scope);
const deployment = "gpt-35-turbo";
const client = new AzureOpenAI({
endpoint,
apiVersion,
deployment,
azureADTokenProvider
});
Azure OpenAI anahtarsız kimlik doğrulaması hakkında daha fazla bilgi için "Azure OpenAI güvenlik yapı taşını kullanmaya başlama" Hızlı Başlangıç makalesine bakın.
Yapılandırma
AzureClientOptions
nesnesi OpenAI ClientOptions
nesnesini genişletir. Bu Azure'a özgü istemci nesnesi, Azure OpenAI istemcisinin bağlantısını ve davranışını yapılandırmak için kullanılır. Azure'a özgü özellikleri belirtmek için özellikler içerir.
Özellik | Ayrıntılar |
---|---|
apiVersion: string |
Kullanılacak API sürümünü belirtir. |
azureADTokenProvider: (() => Promise<string>) |
Her istekte çağrılan Microsoft Entra (eski adıyla Azure Active Directory) için erişim belirteci döndüren bir işlev. |
Dağıtım: string |
Model dağıtımı. Sağlanırsa, temel istemci URL'sini içerecek /deployments/{deployment} şekilde ayarlar. Dağıtım dışı uç noktalar kullanılamaz (Yardımcılar API'leri ile desteklenmez). |
bitiş noktası: string |
Azure OpenAI uç noktanız şu biçimdedir: https://RESOURCE-NAME.azure.openai.com/ . |
Ses
Döküm
import { createReadStream } from "fs";
const result = await client.audio.transcriptions.create({
model: '',
file: createReadStream(audioFilePath),
});
Sohbet
chat.completions.create
const result = await client.chat.completions.create({ messages, model: '', max_tokens: 100 });
Akışlar
const stream = await client.chat.completions.create({ model: '', messages, max_tokens: 100, stream: true });
Eklemeler
const embeddings = await client.embeddings.create({ input, model: '' });
Görüntü oluşturma
const results = await client.images.generate({ prompt, model: '', n, size });
Hata işleme
Hata kodları
Durum Kodu | Hata Türü |
---|---|
400 | Bad Request Error |
401 | Authentication Error |
Kategori 403 | Permission Denied Error |
404 | Not Found Error |
422 | Unprocessable Entity Error |
Kategori 429 | Rate Limit Error |
500 | Internal Server Error |
503 | Service Unavailable |
504 | Gateway Timeout |
Yeniden deneme sayısı
Aşağıdaki hatalar, kısa bir üstel geri alma ile varsayılan olarak iki kez otomatik olarak kullanımdan kaldırılır:
- Bağlantı Hataları
- 408 İstek Zaman Aşımı
- 429 Hız Sınırı
-
>=
500 İç Hata
Yeniden deneme davranışını ayarlamak/devre dışı bırakmak için kullanın maxRetries
:
// Configure the default for all requests:
const client = new AzureOpenAI({
maxRetries: 0, // default is 2
});
// Or, configure per-request:
await client.chat.completions.create({ messages: [{ role: 'user', content: 'How can I get the name of the current day in Node.js?' }], model: '' }, {
maxRetries: 5,
});
Kitaplık kaynak kodu | Paketi (PyPi) | Başvurusu |
Not
Bu kitaplık OpenAI tarafından korunur. Kitaplığın en son güncelleştirmelerini izlemek için sürüm geçmişine bakın.
Azure OpenAI API sürüm desteği
Azure OpenAI'de özellik kullanılabilirliği, hedeflediğiniz REST API sürümüne bağlıdır. En yeni özellikler için en son önizleme API'sini hedefleyin.
En son GA API'si | En Son Önizleme API'si |
---|---|
2024-10-21 |
2025-01-01-preview |
Yükleme
pip install openai
En son sürüm için:
pip install openai --upgrade
Kimlik Doğrulaması
import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider,
api_version="2024-10-21"
)
Azure OpenAI anahtarsız kimlik doğrulaması hakkında daha fazla bilgi için "Azure OpenAI güvenlik yapı taşını kullanmaya başlama" Hızlı Başlangıç makalesine bakın.
Ses
audio.speech.create()
Bu işlev şu anda bir önizleme API sürümü gerektirir.
Bu işlevi kullanmak için ayarlayın api_version="2024-10-01-preview"
.
# from openai import AzureOpenAI
# client = AzureOpenAI()
from pathlib import Path
import os
speech_file_path = Path("speech.mp3")
response = client.audio.speech.create(
model="tts-hd", #Replace with model deployment name
voice="alloy",
input="Testing, testing, 1,2,3."
)
response.write_to_file(speech_file_path)
audio.transcriptions.create()
# from openai import AzureOpenAI
# client = AzureOpenAI()
audio_file = open("speech1.mp3", "rb")
transcript = client.audio.transcriptions.create(
model="whisper", # Replace with model deployment name
file=audio_file
)
print(transcript)
Sohbet
chat.completions.create()
# from openai import AzureOpenAI
# client = AzureOpenAI()
completion = client.chat.completions.create(
model="gpt-4o", # Replace with your model dpeloyment name.
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "When was Microsoft founded?"}
]
)
#print(completion.choices[0].message)
print(completion.model_dump_json(indent=2)
chat.completions.create() - akış
# from openai import AzureOpenAI
# client = AzureOpenAI()
completion = client.chat.completions.create(
model="gpt-4o", # Replace with your model dpeloyment name.
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "When was Microsoft founded?"}
],
stream=True
)
for chunk in completion:
if chunk.choices and chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end='',)
chat.completions.create() - görüntü girişi
completion = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "What's in this image?"},
{
"type": "image_url",
"image_url": {
"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png",
}
},
],
}
],
max_tokens=300,
)
print(completion.model_dump_json(indent=2))
Eklemeler
embeddings.create()
# from openai import AzureOpenAI
# client = AzureOpenAI()
embedding = client.embeddings.create(
model="text-embedding-3-large", # Replace with your model deployment name
input="Attenion is all you need",
encoding_format="float"
)
print(embedding)
Hassas ayarlama
Python ile ince ayarlama nasıl yapılır makalesi
Batch
Python ile Batch nasıl yapılır makalesi
Görüntüler
images.generate()
# from openai import AzureOpenAI
# client = AzureOpenAI()
generate_image = client.images.generate(
model="dall-e-3", #replace with your model deployment name
prompt="A rabbit eating pancakes",
n=1,
size="1024x1024",
quality = "hd",
response_format = "url",
style = "vivid"
)
print(generate_image.model_dump_json(indent=2))
Tamamlamalar (eski)
completions.create()
# from openai import AzureOpenAI
# client = AzureOpenAI()
legacy_completion = client.completions.create(
model="gpt-35-turbo-instruct", # Replace with model deployment name
prompt="Hello World!",
max_tokens=100,
temperature=0
)
print(legacy_completion.model_dump_json(indent=2))
Hata işleme
# from openai import AzureOpenAI
# client = AzureOpenAI()
import openai
try:
client.fine_tuning.jobs.create(
model="gpt-4o",
training_file="file-test",
)
except openai.APIConnectionError as e:
print("The server could not be reached")
print(e.__cause__) # an underlying Exception, likely raised within httpx.
except openai.RateLimitError as e:
print("A 429 status code was received; we should back off a bit.")
except openai.APIStatusError as e:
print("Another non-200-range status code was received")
print(e.status_code)
print(e.response)
Hata kodları
Durum Kodu | Hata Türü |
---|---|
400 | BadRequestError |
401 | AuthenticationError |
Kategori 403 | PermissionDeniedError |
404 | NotFoundError |
422 | UnprocessableEntityError |
Kategori 429 | RateLimitError |
>=500 | InternalServerError |
Yok | APIConnectionError |
kimlik isteme
İsteğinizin kimliğini almak için yanıt üst bilgisine _request_id
x-request-id
karşılık gelen özelliğini kullanabilirsiniz.
print(completion._request_id)
print(legacy_completion._request_id)
Yeniden deneme sayısı
Aşağıdaki hatalar, kısa bir üstel geri alma ile varsayılan olarak iki kez otomatik olarak kullanımdan kaldırılır:
- Bağlantı Hataları
- 408 İstek Zaman Aşımı
- 429 Hız Sınırı
-
>=
500 İç Hata
Yeniden deneme davranışını ayarlamak/devre dışı bırakmak için kullanın max_retries
:
# For all requests
from openai import AzureOpenAI
client = AzureOpenAI(
max_retries=0
)
# max retires for specific requests
client.with_options(max_retries=5).chat.completions.create(
messages=[
{
"role": "user",
"content": "When was Microsoft founded?",
}
],
model="gpt-4o",
)