Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak za pomocą zestawu startowego Azure OpenAI wdrożyć zasób Azure OpenAI i uruchomić małą aplikację hello world. Aplikacja używa uwierzytelniania Microsoft Entra ID i biblioteki OpenAI SDK do wywoływania interfejsu API Azure OpenAI Responses API.
Po przeczytaniu tego artykułu będziesz:
- Wdróż usługę Azure OpenAI z modelem GPT-5-mini za pomocą narzędzia Azure Developer CLI.
- Uruchom aplikację lokalną, która uwierzytelnia się przy użyciu Microsoft Entra ID zamiast klucza interfejsu API.
- Wyślij jedno żądanie do interfejsu API odpowiedzi i wyświetl dane wyjściowe modelu.
Note
W tym artykule użyto zestawu startowego Azure OpenAI jako podstawy przykładów. Zestaw startowy zawiera konfigurację infrastruktury jako kodu, konfigurację interfejsu wiersza polecenia dewelopera Azure oraz przykłady klientów dla wielu języków programowania.
Cost
Zasoby platformy Azure utworzone w tym artykule są rozliczane w ramach subskrypcji platformy Azure. Aby uniknąć bieżących opłat, wyczyść zasoby po zakończeniu artykułu.
Wymagania wstępne
Aby ukończyć ten artykuł, potrzebujesz:
- Subskrypcja platformy Azure. Utwórz je bezpłatnie.
- Uprawnienia do tworzenia zasobów Azure i przypisań ról w subskrypcji, takich jak właściciel lub administrator dostępu użytkowników.
- Git.
- Azure CLI.
- Azure Developer CLI
- Python wersji 3.8 lub nowszej.
- .NET SDK 10 lub nowszy. Zestaw startowy używa aplikacji języka C# opartych na plikach z dyrektywami pakietu.
- Node.js 18 lub nowsza wersja.
- Przejdź do wersji 1.25.1 lub nowszej.
- Java 21 lub nowsza.
- Maven 3.9 lub nowszy.
Pobieranie kodu
Sklonuj repozytorium zestawu startowego openAI Azure i otwórz folder projektu.
git clone https://github.com/Azure-Samples/azure-openai-starter.git
cd azure-openai-starter
Zaloguj się do Azure
Zaloguj się zarówno przy użyciu Azure CLI, jak i Azure Developer CLI.
az login
azd auth login
Jeśli Twoje konto ma dostęp do więcej niż jednego dzierżawcy, upewnij się, że aktywny dzierżawca to ten, w którym chcesz wdrożyć zasoby.
az account show --query tenantId -o tsv
Wdrażanie Azure OpenAI
Uruchom następujące polecenie narzędzia Azure Developer CLI z katalogu głównego repozytorium:
azd up
Skorzystaj z poniższych wskazówek, aby odpowiedzieć na polecenia:
| Komunikat | Answer |
|---|---|
| Nazwa środowiska | Użyj krótkiej, małej nazwy, takiej jak aoai-hello. Wartość jest używana w nazwach zasobów Azure. |
| Subscription | Wybierz subskrypcję, w której chcesz utworzyć zasoby. |
| Lokalizacja | Wybierz region blisko siebie. |
| lokalizacja modelu Azure OpenAI | Wybierz region, w którym jest dostępny GPT-5-mini. |
Wdrożenie zwykle trwa kilka minut. Po zakończeniu działania polecenia zestaw startowy aprowizował Azure OpenAI i wdrożył model GPT-5-mini.
Konfigurowanie środowiska lokalnego
Aplikacja hello world używa logowania Azure w celu uzyskania tokenu dostępu Microsoft Entra. Ustaw punkt końcowy używany przez klienta OpenAI.
export AZURE_OPENAI_ENDPOINT=$(azd env get-value AZURE_OPENAI_ENDPOINT)
export AZURE_OPENAI_DEPLOYMENT=$(azd env get-value AZURE_OPENAI_GPT_DEPLOYMENT_NAME)
export AZURE_TENANT_ID=$(az account show --query tenantId -o tsv)
Wskazówka
Azure OpenAI używa nazw wdrożeń w wywołaniach interfejsu API. Zestaw startowy wyświetla nazwę wdrożenia GPT-5-mini w postaci AZURE_OPENAI_GPT_DEPLOYMENT_NAME. Ten artykuł mapuje tę wartość na AZURE_OPENAI_DEPLOYMENT tak, aby kod był taki sam w różnych językach.
Tworzenie i uruchamianie aplikacji hello world
Utwórz plik o nazwie hello_world_entra.py w folderze src/python .
import os
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import OpenAI
endpoint = os.environ["AZURE_OPENAI_ENDPOINT"].rstrip("/")
deployment = os.getenv("AZURE_OPENAI_DEPLOYMENT", "gpt-5-mini")
token_provider = get_bearer_token_provider(
DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default",
)
client = OpenAI(
base_url=f"{endpoint}/openai/v1/",
api_key=token_provider,
)
response = client.responses.create(
model=deployment,
input="Say hello from Azure OpenAI in one sentence.",
max_output_tokens=300,
)
print(response.output_text)
Zainstaluj Python zależności i uruchom aplikację.
cd src/python
python -m pip install -r requirements.txt
python hello_world_entra.py
Utwórz plik o nazwie hello_world_entra.cs w folderze src/dotnet .
#!/usr/bin/dotnet run
#:package OpenAI@2.9.1
#:package Azure.Identity@1.*
using System;
using System.ClientModel.Primitives;
using Azure.Identity;
using OpenAI;
using OpenAI.Responses;
#pragma warning disable OPENAI001
string endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
?? throw new InvalidOperationException("Set AZURE_OPENAI_ENDPOINT.");
string deployment = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT")
?? "gpt-5-mini";
BearerTokenPolicy tokenPolicy = new(
new DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default");
OpenAIClientOptions options = new()
{
Endpoint = new Uri($"{endpoint.TrimEnd('/')}/openai/v1/")
};
ResponsesClient client = new(tokenPolicy, options);
ResponseResult response = await client.CreateResponseAsync(
deployment,
"Say hello from Azure OpenAI in one sentence.",
null);
Console.WriteLine(response.GetOutputText());
Uruchom aplikację.
cd src/dotnet
dotnet run hello_world_entra.cs
Utwórz plik o nazwie hello_world_entra.ts w folderze src/typescript .
import OpenAI from "openai";
import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
const endpoint = process.env.AZURE_OPENAI_ENDPOINT;
if (!endpoint) {
throw new Error("Set AZURE_OPENAI_ENDPOINT.");
}
const deployment = process.env.AZURE_OPENAI_DEPLOYMENT ?? "gpt-5-mini";
const tokenProvider = getBearerTokenProvider(
new DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default"
);
const client = new OpenAI({
baseURL: `${endpoint.replace(/\/+$/, "")}/openai/v1/`,
apiKey: tokenProvider as any,
});
const response = await client.responses.create({
model: deployment,
input: "Say hello from Azure OpenAI in one sentence.",
max_output_tokens: 300,
});
console.log(response.output_text);
Zainstaluj zależności języka TypeScript i uruchom aplikację.
cd src/typescript
npm install
npx tsx hello_world_entra.ts
Utwórz plik o nazwie hello_world_entra.go w folderze src/go/responses_example_entra .
package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
"strings"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
"github.com/openai/openai-go/v3/responses"
)
type policyAdapter option.MiddlewareNext
func (adapter policyAdapter) Do(req *policy.Request) (*http.Response, error) {
return (option.MiddlewareNext)(adapter)(req.Raw())
}
func newClient(endpoint string) openai.Client {
const scope = "https://cognitiveservices.azure.com/.default"
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("Failed to create DefaultAzureCredential: %s", err)
}
bearerTokenPolicy := runtime.NewBearerTokenPolicy(
credential,
[]string{scope},
nil,
)
return openai.NewClient(
option.WithBaseURL(strings.TrimRight(endpoint, "/")+"/openai/v1/"),
option.WithMiddleware(func(req *http.Request, next option.MiddlewareNext) (*http.Response, error) {
pipeline := runtime.NewPipeline(
"aoai-hello-world",
"",
runtime.PipelineOptions{},
&policy.ClientOptions{
PerRetryPolicies: []policy.Policy{
bearerTokenPolicy,
policyAdapter(next),
},
},
)
pipelineRequest, err := runtime.NewRequestFromRequest(req)
if err != nil {
return nil, err
}
return pipeline.Do(pipelineRequest)
}),
)
}
func main() {
endpoint := os.Getenv("AZURE_OPENAI_ENDPOINT")
if endpoint == "" {
log.Fatal("Set AZURE_OPENAI_ENDPOINT.")
}
deployment := os.Getenv("AZURE_OPENAI_DEPLOYMENT")
if deployment == "" {
deployment = "gpt-5-mini"
}
client := newClient(endpoint)
response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
Model: deployment,
Input: responses.ResponseNewParamsInputUnion{
OfString: openai.String("Say hello from Azure OpenAI in one sentence."),
},
MaxOutputTokens: openai.Int(300),
})
if err != nil {
log.Fatalf("Failed to create response: %s", err)
}
fmt.Println(response.OutputText())
}
Uruchom aplikację.
cd src/go/responses_example_entra
go run hello_world_entra.go
Utwórz plik o nazwie HelloWorldEntra.java w folderze src/java/src/main/java/com/azure/openai/starter .
package com.azure.openai.starter;
import com.azure.identity.AuthenticationUtil;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.credential.BearerTokenCredential;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import java.util.function.Supplier;
public class HelloWorldEntra {
public static void main(String[] args) {
String endpoint = System.getenv("AZURE_OPENAI_ENDPOINT");
if (endpoint == null || endpoint.isBlank()) {
throw new IllegalStateException("Set AZURE_OPENAI_ENDPOINT.");
}
String deployment = System.getenv().getOrDefault(
"AZURE_OPENAI_DEPLOYMENT",
"gpt-5-mini");
Supplier<String> bearerTokenSupplier = AuthenticationUtil.getBearerTokenSupplier(
new DefaultAzureCredentialBuilder().build(),
"https://cognitiveservices.azure.com/.default");
OpenAIClient client = OpenAIOkHttpClient.builder()
.baseUrl(endpoint.replaceAll("/+$", "") + "/openai/v1/")
.credential(BearerTokenCredential.create(bearerTokenSupplier))
.build();
Response response = client.responses().create(
ResponseCreateParams.builder()
.model(deployment)
.input(ResponseCreateParams.Input.ofText(
"Say hello from Azure OpenAI in one sentence."))
.maxOutputTokens(300)
.build());
System.out.println(response.output());
}
}
Uruchom aplikację.
cd src/java
mvn compile exec:java -Dexec.mainClass="com.azure.openai.starter.HelloWorldEntra"
Dokładny format danych wyjściowych różni się w zależności od zestawu SDK. Powinny zostać wyświetlone dane wyjściowe wdrożonego modelu Azure OpenAI zawierającego krótkie powitanie.
Hello from Azure OpenAI! I'm running on your Azure OpenAI deployment and ready to help.
Omówienie kodu
Aplikacja hello world ma trzy ważne części:
-
DefaultAzureCredentialpobiera token Microsoft Entra z lokalnego logowania do platformy Azure. - Klient OpenAI jest skonfigurowany tak, aby wskazywać na punkt końcowy v1 usługi Azure OpenAI:
/openai/v1/. - Wartość
modelto nazwa wdrożenia Azure OpenAI. W tym zestawie startowym nazwa wdrożenia togpt-5-mini.
Aplikacja w Pythonie używa pakietu openai z azure-identity. Pomocnik get_bearer_token_provider tworzy dostawcę tokenu, którego klient OpenAI może użyć jako poświadczenia.
Aplikacja w języku C# używa pakietu OpenAI z Azure.Identity. Element BearerTokenPolicy dodaje tokeny Microsoft Entra do żądań wysyłanych przez element ResponsesClient.
Aplikacja TypeScript używa pakietu openai z użyciem @azure/identity. Pomocnik getBearerTokenProvider tworzy dostawcę tokenu, którego klient OpenAI może użyć jako poświadczenia.
Aplikacja Go używa azidentity.NewDefaultAzureCredential wraz z zasadą tokenu okaziciela Azure Core. Zasada jest dodawana do klienta OpenAI jako warstwa pośrednia, dzięki czemu żądania używają tokenów Microsoft Entra ID.
Aplikacja Java używa DefaultAzureCredentialBuilder z AuthenticationUtil.getBearerTokenSupplier. Dostawca tokenu jest przekazywany do klienta OpenAI przy użyciu polecenia BearerTokenCredential.
Korzystanie z uwierzytelniania bez użycia klucza w aplikacjach hostowanych na platformie Azure
Ten przewodnik uruchamia aplikację lokalnie z tożsamością dewelopera; nie wdraża aplikacji w Azure. Podczas hostowania aplikacji w Azure należy skonfigurować usługę hostingu i poświadczenie tożsamości Azure do używania tożsamości zarządzanej. W przypadku tożsamości zarządzanej przypisanej przez użytkownika jawnie skonfiguruj poświadczenia, aby wybrać tę tożsamość. Aby uzyskać wskazówki dotyczące poświadczeń i odwołania specyficzne dla języka, zobacz Połączenia bez hasła dla usług Azure.
Przypisz tożsamości hostowanej aplikacji odpowiednią rolę Azure OpenAI, taką jak Cognitive Services OpenAI User, w zakresie zasobów Azure OpenAI. Przypisanie roli konta dewelopera nie udziela automatycznie dostępu hostowanej aplikacji. Aby poznać kroki przypisywania, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.
Uruchom przykład zestawu startowego
Zestaw startowy zawiera również bardziej rozbudowany przykład interfejsu API Responses w każdym języku.
python responses_example_entra.py
dotnet run responses_example_entra.cs
npx tsx responses_example_entra.ts
go run main.go
mvn compile exec:java -Dexec.mainClass="com.azure.openai.starter.ResponsesExampleEntra"
Troubleshooting
| Issue | Wypróbuj |
|---|---|
azd up Kończy się niepowodzeniem, ponieważ GPT-5-mini nie jest dostępny w wybranym regionie. |
Wybierz inną lokalizację modelu Azure OpenAI, gdy pojawi się monit, lub ustaw inny region za pomocą azd env set AZURE_LOCATION eastus2 i uruchom ponownie azd up. |
azd up Kończy się niepowodzeniem z powodu błędu przypisania roli lub autoryzacji. |
Upewnij się, że Twoje konto ma uprawnienia do tworzenia zasobów i przypisań ról. Właściciel lub administrator dostępu użytkowników jest zwykle wymagany dla tego szablonu. |
Aplikacja zwraca 401 lub PermissionDenied. |
Upewnij się, że jesteś zalogowany do tego samego dzierżawcy i tej samej subskrypcji, których używa azd up. Uruchom az login i azd auth login, a następnie ustaw AZURE_TENANT_ID na identyfikator dzierżawy z az account show. Propagacja przypisania roli może potrwać kilka minut. |
DefaultAzureCredential failed to retrieve a token. |
Upewnij się, że Azure CLI jest zainstalowana i uwierzytelniona za pomocą polecenia az account show. Jeśli używasz wielu dzierżaw, zaloguj się do właściwej dzierżawy za pomocą az login --tenant <tenant-id>. |
Aplikacja zwraca model not found lub deployment not found. |
Upewnij się, że AZURE_OPENAI_DEPLOYMENT odpowiada nazwie wdrożenia usługi Azure OpenAI. Domyślnym zestawem startowym jest gpt-5-mini. |
| Aplikacja .NET nie rozpoznaje dyrektyw pakietu. | Zainstaluj wersję zestawu SDK .NET wymaganą przez zestaw startowy. Aplikacje C# oparte na plikach z elementem #:package wymagają nowszego pakietu SDK platformy .NET. |
| Aplikacja Go nie może odnaleźć modułu ani zależności. | Uruchom polecenia Go z poziomu src/go/responses_example_entra. Upewnij się, że jest zainstalowany program Go 1.25.1 lub nowszy. |
| Aplikacja Java kończy się niepowodzeniem z powodu błędu wersji źródłowej lub docelowej. | Upewnij się, że Java 21 lub nowszy jest zainstalowany i wybrany przez terminal. |
| Potrzebne są szczegółowe dzienniki wdrażania. | Uruchom program azd up --debug. |
Bieżące wartości środowiska interfejsu wiersza polecenia dewelopera Azure można sprawdzić za pomocą następujących elementów:
azd env get-values
Uprzątnij zasoby
Gdy zasoby nie będą już potrzebne, uruchom następujące polecenie w głównym katalogu repozytorium zestawu startowego:
azd down --purge
Polecenie usuwa zasoby Azure utworzone przez zestaw startowy i pomaga zatrzymać bieżące opłaty.
Uzyskaj pomoc
Jeśli potrzebujesz pomocy dotyczącej zestawu startowego, skorzystaj z następujących zasobów:
- Repozytorium zestawu startowego Azure OpenAI.
- Problemy z zestawem startowym Azure OpenAI.
- Dokumentacja usługi Azure OpenAI.
- Dokumentacja interfejsu wiersza polecenia Azure Developer CLI.
- Rola użytkownika OpenAI usług Cognitive Services.