Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Azure OpenAI güvenlik yapı taşı örneğinin nasıl oluşturulacağı ve kullanılacağı gösterilmektedir. Azure OpenAI hesabının rol tabanlı erişim denetimi (RBAC) ve anahtarsız (Microsoft Entra ID) kimlik doğrulaması ile sağlanmasını göstermeyi amaçlamaktadır. Bu sohbet uygulaması örneği, Azure OpenAI kaynaklarını sağlamak ve uygulamayı Azure Geliştirici CLI'sini kullanarak Azure Container Apps dağıtmak için gereken tüm altyapıyı ve yapılandırmayı da içerir.
Bu makaledeki yönergeleri izleyerek şunları yapacaksınız:
- Güvenli bir sohbet uygulamasını Azure Container Apps'e dağıtın.
- Azure OpenAI erişimi için yönetilen kimlik kullanın.
- OpenAI kitaplığını kullanarak Azure Bir OpenAI Büyük Dil Modeli (LLM) ile sohbet edin.
Bu makaleyi tamamladıktan sonra, özel kodunuz ve verilerinizle yeni projeyi değiştirmeye başlayabilirsiniz.
Not
Bu makalede, makaledeki örnekler ve kılavuzlar için temel olarak bir veya daha fazla yapay zeka uygulaması şablonu kullanılır. Yapay zeka uygulama şablonları, yapay zeka uygulamalarınız için yüksek kaliteli bir başlangıç noktası sağlamaya yardımcı olan, bakımlı, kolay dağıtılan başvuru uygulamaları sağlar.
Mimariye genel bakış
Aşağıdaki diyagramda sohbet uygulamasının basit bir mimarisi gösterilmiştir:
Sohbet uygulaması bir Azure Kapsayıcı Uygulaması olarak çalışır. Uygulama, api anahtarı yerine Azure OpenAI ile kimlik doğrulaması yapmak için Microsoft Entra ID aracılığıyla yönetilen kimlik kullanır. Sohbet uygulaması, kullanıcı iletilerine yanıt oluşturmak için Azure OpenAI kullanır.
Uygulama mimarisi aşağıdaki hizmetlere ve bileşenlere dayanır:
- Azure OpenAI kullanıcının sorgularını gönderdiğimiz yapay zeka sağlayıcısını temsil eder.
- Azure Container Apps uygulamanın barındırıldığı kapsayıcı ortamıdır.
- Yönetilen Kimlik , sınıfının en iyisi güvenliği sağlamamıza yardımcı olur ve bir geliştirici olarak gizli bir bilgiyi güvenli bir şekilde olarak yönetme gereksinimini ortadan kaldırır.
- Azure OpenAI, Azure Container Apps, Azure Container Registry, Azure Log Analytics ve RBAC rolleri dahil olmak üzere Azure kaynakları sağlamak için Bicep dosyaları.
- Kullanıcı iletilerine yanıt oluşturmak için paketini ve
openaikullanan Python Quart uygulaması. - JSON Çizgileri kullanarak ReadableStream üzerinden arka uçtan yanıt akışı sağlayan temel bir HTML/JavaScript ön uç.
- Bir Blazor web uygulaması, kullanıcı iletilerine yanıt oluşturmak için Azure.AI.OpenAI NuGet paketini kullanır.
- Kullanıcı iletilerine yanıt oluşturmak için OpenAI npm paketini kullanan bir TypeScript web uygulaması.
Maliyet
Bu örnekte fiyatlandırmayı mümkün olduğunca düşük tutmak amacıyla kaynakların çoğu temel veya tüketim fiyatlandırma katmanını kullanır. Hedeflenen kullanımınıza göre katman düzeyinizi gerektiği gibi değiştirin. Ücretlendirmeyi durdurmak için makaleyle işiniz bittiğinde kaynakları silin.
Örnek depodaki maliyet hakkında daha fazla bilgi edinin.
Örnek depodaki maliyet hakkında daha fazla bilgi edinin.
Örnek depodaki maliyet hakkında daha fazla bilgi edinin.
Önkoşullar
Bu makaleyi tamamlamak için gereken tüm bağımlılıklarla birlikte bir geliştirme kapsayıcısı ortamı sağlanır. Geliştirme kapsayıcısını GitHub Codespaces'ta (tarayıcıda) veya Visual Studio Code kullanarak yerel olarak çalıştırabilirsiniz.
Bu makaleyi kullanmak için aşağıdaki önkoşulları yerine getirmeniz gerekir:
Azure aboneliği - Ücretsiz bir abonelik oluştur
Azure hesap izinleri - Azure Hesabınızın
Microsoft.Authorization/roleAssignments/writeveya Sahip gibi izinleri olmalıdır.GitHub hesabı
Açık geliştirme ortamı
Bu makaleyi tamamlamak için gerekli tüm bağımlılıkları içeren önceden yapılandırılmış bir geliştirme ortamı dağıtmak için aşağıdaki yönergeleri kullanın.
GitHub Codespaces, kullanıcı arabirimi olarak Web için Visual Studio Code ile GitHub tarafından yönetilen bir geliştirme kapsayıcısı çalıştırır. En basit geliştirme ortamı için GitHub Codespaces'ı kullanarak bu makaleyi tamamlamak için doğru geliştirici araçlarını ve bağımlılıklarını önceden yüklemiş olursunuz.
Önemli
Tüm GitHub hesapları Codespaces'ı her ay 2 çekirdek örneğiyle 60 saate kadar ücretsiz olarak kullanabilir. Daha fazla bilgi için, GitHub Codespaces'in aylık dahil depolama ve çekirdek saatleri bölümüne bakın.
main GitHub deposunun Azure-Samples/openai-chat-app-quickstart dalında yeni bir GitHub Codespace oluşturmak için aşağıdaki adımları kullanın.
Aşağıdaki düğmeye sağ tıklayın ve Bağlantıyı yeni pencerede aç'ı seçin. Bu eylem, geliştirme ortamına ve gözden geçirilebilecek belgelere sahip olmanıza olanak tanır.
Kod alanı oluştur sayfasında, inceleyin ve ardından Yeni kod alanı oluştur seçeneğini seçin.
Kod alanının başlamasını bekleyin. Bu başlatma işlemi birkaç dakika sürebilir.
Ekranın alt kısmındaki terminalde Azure Geliştirici CLI'sı ile Azure oturum açın.
azd auth loginKodu terminalden kopyalayın ve bir tarayıcıya yapıştırın. Azure hesabınızla kimlik doğrulaması yapmak için yönergeleri izleyin.
Bu makalede belirtilen kalan görevler, bu geliştirme kapsayıcısı bağlamında yürütülür.
main GitHub deposunun Azure-Samples/openai-chat-app-quickstart-dotnet dalında yeni bir GitHub Codespace oluşturmak için aşağıdaki adımları kullanın.
Aşağıdaki düğmeye sağ tıklayın ve Bağlantıyı yeni pencerede aç'ı seçin. Bu eylem, geliştirme ortamına ve gözden geçirilebilecek belgelere sahip olmanıza olanak tanır.
"Kod alanı oluştur" sayfasında, "Kod alanı oluştur" seçeneğini gözden geçirin ve seçin
Kod alanının başlamasını bekleyin. Bu başlatma işlemi birkaç dakika sürebilir.
Ekranın alt kısmındaki terminalde Azure Geliştirici CLI'sı ile Azure oturum açın.
azd auth loginKodu terminalden kopyalayın ve bir tarayıcıya yapıştırın. Azure hesabınızla kimlik doğrulaması yapmak için yönergeleri izleyin.
Bu makalede belirtilen kalan görevler, bu geliştirme kapsayıcısı bağlamında yürütülür.
main GitHub deposunun Azure-Samples/openai-chat-app-quickstart-javascript dalında yeni bir GitHub Codespace oluşturmak için aşağıdaki adımları kullanın.
- Aşağıdaki düğmeye sağ tıklayın ve Bağlantıyı yeni pencerede aç'ı seçin. Bu eylem, geliştirme ortamına ve gözden geçirilebilecek belgelere sahip olmanıza olanak tanır.
Kod alanı oluştur sayfasında, inceleyin ve ardından Yeni kod alanı oluştur seçeneğini seçin.
Kod alanının başlamasını bekleyin. Bu başlatma işlemi birkaç dakika sürebilir.
Ekranın alt kısmındaki terminalde Azure Geliştirici CLI'sı ile Azure oturum açın.
azd auth loginKodu terminalden kopyalayın ve bir tarayıcıya yapıştırın. Azure hesabınızla kimlik doğrulaması yapmak için yönergeleri izleyin.
Bu makalede belirtilen kalan görevler, bu geliştirme kapsayıcısı bağlamında yürütülür.
Kur ve çalıştır
Örnek depo, sohbet uygulaması Azure dağıtımı için tüm kod ve yapılandırma dosyalarını içerir. Aşağıdaki adımlar, örnek sohbet uygulaması Azure dağıtım işleminde size yol gösterir.
sohbet uygulamasını Azure dağıtma
Önemli
Bu bölümde oluşturulan Azure kaynaklara anında maliyet uygulanır. Bu kaynaklar, komutu tam olarak yürütülmeden önce kesintiye uğratsanız bile maliyetleri tahakkuk ettirebilir.
kaynak sağlama ve kaynak kodu dağıtımı Azure için aşağıdaki Azure Geliştirici CLI komutunu çalıştırın:
azd upistemleri yanıtlamak için aşağıdaki tabloyu kullanın:
İstem Yanıt Ortam adı Kısa ve küçük tutun. Adınızı veya diğer adınızı ekleyin. Örneğin, secure-chat. Kaynak grubu adının bir parçası olarak kullanılır.Abonelik Kaynakları oluşturmak için aboneliği seçin. Konum (barındırma için) Listeden size yakın bir konum seçin. OpenAI modelinin konumu Listeden size yakın bir konum seçin. İlk konumunuzla aynı konum kullanılabiliyorsa bunu seçin. Uygulama dağıtılana kadar bekleyin. Dağıtımın tamamlanması genellikle 5 ile 10 dakika arasında sürer.
Büyük Dil Modeline soru sormak için sohbet uygulamasını kullanma
Terminal, başarılı uygulama dağıtımından sonra bir URL görüntüler.
Sohbet uygulamasını tarayıcıda açmak için etiketli
Deploying service webURL'yi seçin.Tarayıcıda "Yönetilen kimlik neden anahtarlardan daha iyi?" gibi bir soru girin.
Yanıt Azure OpenAI'den gelir ve sonuç görüntülenir.
Örnek kodu keşfetme
OpenAI ve Azure OpenAI Service common Python istemci kitaplığına bağımlı olsa da, Azure OpenAI uç noktaları kullanılırken küçük kod değişiklikleri gerekir. Şimdi bu örneğin Microsoft Entra ID ile anahtarsız kimlik doğrulamasını nasıl yapılandırıp Azure OpenAI ile nasıl iletişim kuracaklarını görelim.
Yönetilen kimlikle kimlik doğrulamayı yapılandırma
Bu örnekte, src/quartapp/chat.py dosya anahtarsız kimlik doğrulamasını yapılandırmayla başlar.
Aşağıdaki kod parçacığı, zaman uyumsuz Microsoft Entra kimlik doğrulama akışı oluşturmak için azure.identity.aio modülünü kullanır.
Aşağıdaki kod parçacığı, kullanıcı tarafından atanan yönetilen kimlik aracılığıyla kimlik doğrulaması yapabilen bir ManagedIdentityCredential örneği oluşturmak için ortam değişkenini kullanır.AZURE_CLIENT_IDazd
user_assigned_managed_identity_credential = ManagedIdentityCredential(client_id=os.getenv("AZURE_CLIENT_ID"))
Not
Kaynak ortam değişkenleri, uygulama dağıtımı sırasında sağlanır.
Aşağıdaki kod parçacığı AZURE_TENANT_ID geçerli Microsoft Entra kiracısıyla kimlik doğrulaması yapabilen bir örnek oluşturmak için azd kaynak ortamı değişkenini kullanır.
azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)
Azure Kimliği istemci kitaplığı, Azure Core kitaplığının TokenCredential protokolünü uygulayan genel sınıflardan yetkilendirmeler sağlar. Kimlik bilgisi, Microsoft Entra ID erişim belirteci almak için ayrı bir kimlik doğrulama akışını temsil eder. Bu kimlik bilgileri, denenecek sıralı bir kimlik doğrulama mekanizması dizisi oluşturmak için birbirine zincirlenebilir.
Aşağıdaki kod parçacığı, bir ChainedTokenCredential ve bir ManagedIdentityCredential kullanarak bir AzureDeveloperCliCredential oluşturur.
-
ManagedIdentityCredentialAzure İşlevleri, Azure App Service ve Azure Container Apps için kullanılır. Kullanıcı tarafından atanan yönetilen kimlik,client_idöğesineManagedIdentityCredentialaktarılıp desteklenir. -
AzureDeveloperCliCredentialyerel geliştirme için kullanılır. Önceden kullanılacak Microsoft Entra kiracısına göre ayarlanmıştı.
azure_credential = ChainedTokenCredential(
user_assigned_managed_identity_credential,
azure_dev_cli_credential
)
İpucu
İlk geçerli Microsoft Entra erişim belirteci kullanıldığından kimlik bilgilerinin sırası önemlidir. Daha fazla bilgi için ChainedTokenCredential Genel Bakış makalesine bakın.
Aşağıdaki kod parçacığı, seçilen Azure kimlik bilgilerine göre Azure OpenAI belirteç sağlayıcısını alır. Bu değer, azure.identity.aio.get_bearer_token_provider iki bağımsız değişkenle çağrılarak elde edilir.
azure_credential: İsteği doğrulamak için daha önce oluşturulmuş olanChainedTokenCredentialörneği.https://cognitiveservices.azure.com/.default: Bir veya birden fazla taşıyıcı belirteç kapsamı gereklidir. Bu durumda, Azure Bilişsel Hizmetler uç birimi.
token_provider = get_bearer_token_provider(
azure_credential, "https://cognitiveservices.azure.com/.default"
)
Aşağıdaki satırlar, sağlama sırasında ayarlanan gerekli AZURE_OPENAI_ENDPOINT ve AZURE_OPENAI_CHAT_DEPLOYMENT'e, iki azd ortam değişkenine bakar. Bir değer yoksa hata atılır.
openai_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
if not openai_endpoint:
raise ValueError("AZURE_OPENAI_ENDPOINT is required for Azure OpenAI")
if not os.getenv("AZURE_OPENAI_CHAT_DEPLOYMENT"):
raise ValueError("AZURE_OPENAI_CHAT_DEPLOYMENT is required for Azure OpenAI")
Bu kod parçacığı, Azure /openai/v1/ uç noktasına karşı OpenAI istemcisini başlatır ve belirteç sağlayıcısını api_key olarak geçirir. v1 uç noktası ile api_version gerekli değildir.
bp.openai_client = AsyncOpenAI(
base_url=f"{openai_endpoint.rstrip('/')}/openai/v1/",
api_key=token_provider,
)
Aşağıdaki satır, AZURE OpenAI modeli dağıtım adını API çağrılarında kullanılacak şekilde ayarlar:
bp.openai_model = os.getenv("AZURE_OPENAI_CHAT_DEPLOYMENT")
Not
OpenAI, hangi modelin kullanılacağını belirtmek için model anahtar değerini kullanır. Azure OpenAI unique model dağıtımları kavramına sahiptir. Azure OpenAI kullandığınızda model, Azure OpenAI modeli dağıtımı sırasında seçilen altta yatan dağıtım adına başvurmalıdır.
Bu işlev tamamlandıktan sonra, istemci düzgün yapılandırılır ve Azure OpenAI hizmetleriyle etkileşime hazır olur.
OpenAI Yanıtları API'sini kullanarak yanıtları akışla aktarın
response_stream rota üzerinde Yanıtlar API akış çağrısını işler. Ön uç, Yanıtlar şeklindeki input öğeleri doğrudan gönderir ve arka uç bunları responses.stream() öğesine iletir.
async def response_stream():
try:
async with bp.openai_client.responses.stream(
model=bp.openai_model,
input=request_input,
store=False,
) as openai_stream:
async for event in openai_stream:
yield json.dumps(event.model_dump(), ensure_ascii=False) + "\n"
except Exception as e:
current_app.logger.exception("Responses stream failed")
yield json.dumps({"error": str(e)}, ensure_ascii=False) + "\n"
Örnek kodu keşfetme
.NET uygulamaları, Azure OpenAI hizmetleriyle iletişim kurmak için Azure.AI.OpenAI istemci kitaplığına dayanır ve bu da OpenAI kitaplığına bağımlıdır. Örnek uygulama, Azure OpenAI ile iletişim kurmak için Microsoft Entra ID kullanarak anahtarsız kimlik doğrulamasını yapılandırıyor.
Kimlik doğrulama ve hizmet kaydını yapılandırma
Bu örnekte program.cs dosyasında anahtarsız kimlik doğrulaması yapılandırılır. Aşağıdaki kod parçacığı, kullanıcı tarafından atanan yönetilen kimlik aracılığıyla kimlik doğrulaması yapabilen bir ManagedIdentityCredential örneği oluşturmak için tarafından AZURE_CLIENT_ID ayarlanan ortam değişkenini kullanırazd.
var userAssignedIdentityCredential =
new ManagedIdentityCredential(builder.Configuration.GetValue<string>("AZURE_CLIENT_ID"));
Not
Kaynak ortam değişkenleri, uygulama dağıtımı sırasında sağlanır.
Aşağıdaki kod parçacığı, AZURE_TENANT_ID tarafından ayarlanan azd ortam değişkenini kullanarak, 'de oturum açmış olan hesabı kullanarak yerel olarak kimlik doğrulaması yapabilen bir azd örneği oluşturur.
var azureDevCliCredential = new AzureDeveloperCliCredential(
new AzureDeveloperCliCredentialOptions()
{
TenantId = builder.Configuration.GetValue<string>("AZURE_TENANT_ID")
});
Azure Kimliği istemci kitaplığı, Azure Core kitaplığının TokenCredential protokollerini uygulayan kimlik bilgisi sınıfları sağlar. Kimlik bilgisi, Microsoft Entra ID erişim belirteci almak için ayrı bir kimlik doğrulama akışını temsil eder. Bu kimlik bilgileri, belirli bir sırayla denenecek kimlik doğrulama mekanizmalarından oluşan bir dizi oluşturmak için ChainedTokenCredential zincirleme yöntemiyle birleştirilebilir.
Aşağıdaki kod parçacığı AzureOpenAIClient'ı bağımlılık enjeksiyonu için kaydeder ve ChainedTokenCredential kullanarak bir ManagedIdentityCredential ile AzureDeveloperCliCredential oluşturur:
-
ManagedIdentityCredentialAzure İşlevleri, Azure App Service ve Azure Container Apps için kullanılır. Kullanıcı tarafından atanan yönetilen kimlik,AZURE_CLIENT_IDsağlananManagedIdentityCredentialkullanılarak desteklenmektedir. -
AzureDeveloperCliCredentialyerel geliştirme için kullanılır. Daha önce, kullanım için Microsoft Entra kiracısına göre ayarlanmıştı.
builder.Services.AddAzureClients(
clientBuilder => {
clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
=> new AzureOpenAIClient(
new Uri(endpoint),
new ChainedTokenCredential(
userAssignedIdentityCredential, azureDevCliCredential), options));
});
İpucu
İlk geçerli Microsoft Entra erişim belirteci kullanıldığından kimlik bilgilerinin sırası önemlidir. Daha fazla bilgi için ChainedTokenCredential Genel Bakış makalesine bakın.
Azure OpenAI istemcisini kullanarak sohbet tamamlamalarını alma
Blazor web uygulaması, kayıtlı AzureOpenAIClient öğeyi bileşenin Home.Razor en üstüne enjekte eder:
@inject AzureOpenAIClient azureOpenAIClient
Kullanıcı formu gönderdiğinde, AzureOpenAIClient tamamlama oluşturmak için openAI modeline istemini gönderir:
ChatClient chatClient = azureOpenAIClient.GetChatClient("gpt-4o-mini");
messages.Add(new UserChatMessage(model.UserMessage));
ChatCompletion completion = await chatClient.CompleteChatAsync(messages);
messages.Add(new SystemChatMessage(completion.Content[0].Text));
Örnek kodu keşfetme
OpenAI ve Azure OpenAI Service openai (ortak JavaScript istemci kitaplığı) kullanıyor olsa da, Azure OpenAI uç noktaları kullanılırken küçük kod değişiklikleri gerekir. Şimdi bu örneğin Microsoft Entra ID ile anahtarsız kimlik doğrulamasını nasıl yapılandırıp Azure OpenAI ile nasıl iletişim kuracaklarını görelim.
Her ortam için anahtarsız kimlik doğrulaması
Azure Kimliği istemci kitaplığı, Azure Core kitaplığının TokenCredential protokollerini uygulayan kimlik bilgisi sınıfları sağlar. Kimlik bilgisi, Microsoft Entra ID erişim belirteci almak için ayrı bir kimlik doğrulama akışını temsil eder. Bu kimlik bilgileri, denenecek sıralı bir kimlik doğrulama mekanizması dizisi oluşturmak için ChainedTokenCredential kullanılarak zincirlenebilir. Bu sayede hem üretim hem de yerel geliştirme ortamlarında aynı kodu dağıtabilirsiniz.
Yönetilen kimlikle kimlik doğrulamayı yapılandırma
Bu örnekte ./src/azure-authentication.ts, OpenAI Azure anahtarsız kimlik doğrulaması sağlamak için çeşitli işlevler sağlar.
getChainedCredential() ilk işlev, zincirde bulunan ilk geçerli Azure kimlik bilgilerini döndürür.
function getChainedCredential() {
return new ChainedTokenCredential(
new ManagedIdentityCredential(process.env.AZURE_CLIENT_ID!),
new AzureDeveloperCliCredential({
tenantId: process.env.AZURE_TENANT_ID! ? process.env.AZURE_TENANT_ID! : undefined
})
);
}
- Önce ManagedIdentityCredential denendi. Üretim çalışma zamanında AZURE_CLIENT_ID ortam değişkeniyle ayarlanır ve kullanıcı tarafından atanan yönetilen kimlik aracılığıyla kimlik doğrulaması yapabilir.
-
AzureDeveloperCliCredential ikinci kez denendi. Bir geliştirici
azd auth loginkullanarak Azure Geliştirici CLI'sı ile oturum açtığında ayarlanır.
İpucu
İlk geçerli Microsoft Entra erişim belirteci kullanıldığından kimlik bilgilerinin sırası önemlidir. Daha fazla bilgi için ChainedTokenCredential Genel Bakış makalesine bakın.
OpenAI için taşıyıcı belirteci alma
./src/azure-authentication.ts'daki ikinci işlev, getTokenProvider() uç noktası kapsamında bir taşıyıcı belirteci sağlayan bir geri çağırma döndüren işlevidir.
function getTokenProvider(): () => Promise<string> {
const credential = getChainedCredential();
const scope = "https://cognitiveservices.azure.com/.default";
return getBearerTokenProvider(credential, scope);
}
Önceki kod parçacığı, kimlik bilgilerini ve kapsamı elde etmek için getBearerTokenProvider kullanır, ardından bir taşıyıcı belirteç sağlayan bir geri çağırma döndürür.
Kimliği doğrulanmış Azure OpenAI istemcisi oluşturma
./src/azure-authentication.ts'daki üçüncü işlev, Azure OpenAI istemcisini döndüren getOpenAiClient() işlevidir.
export function getOpenAiClient(): AzureOpenAI | undefined{
try {
if (!process.env.AZURE_OPENAI_ENDPOINT) {
throw new Error("AZURE_OPENAI_ENDPOINT is required for Azure OpenAI");
}
if (!process.env.AZURE_OPENAI_CHAT_DEPLOYMENT) {
throw new Error("AZURE_OPENAI_CHAT_DEPLOYMENT is required for Azure OpenAI");
}
const options = {
azureADTokenProvider: getTokenProvider(),
deployment: process.env.AZURE_OPENAI_CHAT_DEPLOYMENT!,
apiVersion: process.env.AZURE_OPENAI_API_VERSION! || "2024-02-15-preview",
endpoint: process.env.AZURE_OPENAI_ENDPOINT!
}
// Create the Asynchronous Azure OpenAI client
return new AzureOpenAI (options);
} catch (error) {
console.error('Error getting Azure OpenAI client: ', error);
}
}
Bu kod, doğru şekilde kapsamlanmış belirteç de dahil olmak üzere seçenekleri alır ve AzureOpenAI istemcisini oluşturur.
Azure OpenAI ile sohbet yanıtı akışı
Azure OpenAI'ya mesaj göndermek ve yanıtı akış olarak almak için ./src/openai-chat-api.ts'da aşağıdaki Fastify yol işleyicisini kullanın.
import { FastifyReply, FastifyRequest } from 'fastify';
import { AzureOpenAI } from "openai";
import { getOpenAiClient } from './azure-authentication.js';
import { ChatCompletionChunk, ChatCompletionMessageParam } from 'openai/resources/chat/completions';
interface ChatRequestBody {
messages: ChatCompletionMessageParam [];
}
export async function chatRoute (request: FastifyRequest<{ Body: ChatRequestBody }>, reply: FastifyReply) {
const requestMessages: ChatCompletionMessageParam[] = request?.body?.messages;
const openaiClient: AzureOpenAI | undefined = getOpenAiClient();
if (!openaiClient) {
throw new Error("Azure OpenAI client is not configured");
}
const allMessages = [
{ role: "system", content: "You are a helpful assistant."},
...requestMessages
] as ChatCompletionMessageParam [];
const chatCompletionChunks = await openaiClient.chat.completions.create({
// Azure Open AI takes the deployment name as the model name
model: process.env.AZURE_OPENAI_CHAT_DEPLOYMENT_MODEL || "gpt-4o-mini",
messages: allMessages,
stream: true
})
reply.raw.setHeader('Content-Type', 'text/html; charset=utf-8');
reply.raw.setHeader('Cache-Control', 'no-cache');
reply.raw.setHeader('Connection', 'keep-alive');
reply.raw.flushHeaders();
for await (const chunk of chatCompletionChunks as AsyncIterable<ChatCompletionChunk>) {
for (const choice of chunk.choices) {
reply.raw.write(JSON.stringify(choice) + "\n")
}
}
reply.raw.end()
}
İşlev, önceki iletiler de dahil olmak üzere sohbet konuşmasını alır ve Azure OpenAI'ye gönderir. Akış öbekleri Azure OpenAI'den döndürüldükçe, istemciye gönderilir.
Diğer güvenlik konuları
Bu makalede, örneğin Azure OpenAI hizmetinde kimlik doğrulaması için ChainedTokenCredential nasıl kullandığı gösterilmektedir.
Örnekte ayrıca kod olarak altyapı dosyalarını tarar ve algılanan sorunları içeren bir rapor oluşturan GitHub Action vardır. Kendi deponuzda en iyi yöntemlerin devam etmesini sağlamak için, şablonlarımızı temel alan çözümler oluşturan herkesin GitHub gizli dizi tarama ayarının etkinleştirildiğinden emin olmasını öneririz.
Aşağıdakiler gibi diğer güvenlik önlemlerini göz önünde bulundurun:
Microsoft Entra kullanarak uygulama kullanıcılarının uygun kümesine erişimi kısıtlayın.
firewall ve/veya Sanal Ağ ile Azure Container Apps örneğini koruma.
Kaynakları temizleme
Azure kaynaklarını temizleme
Bu makalede oluşturulan Azure kaynaklar Azure aboneliğinize faturalandırılır. Gelecekte bu kaynaklara ihtiyaç duymayı beklemiyorsanız, daha fazla ücret ödememek için bunları silin.
Azure kaynaklarını silmek ve kaynak kodunu kaldırmak için aşağıdaki Azure Developer CLI komutunu çalıştırın:
azd down --purge
GitHub Codespaces'i temizleme
GitHub Codespaces ortamını silmek, hesabınız için elde ettiğiniz ücretsiz çekirdek başına saat yetkilendirmesi miktarını en üst düzeye çıkarmanızı sağlar.
Önemli
GitHub hesabınızın hakları hakkında daha fazla bilgi için bakınız GitHub Codespaces aylık dahil depolama ve işlemci saatleri.
GitHub Codespaces panosunda oturum açın.
Azure-Samples/openai-chat-app-quickstartGitHub deposundan alınan şu anda çalışan Codespaces'ınızı bulun.Codespace bağlam menüsünü açın ve sil'i seçin.
GitHub Codespaces panosunda oturum açın.
Azure-Samples/openai-chat-app-quickstart-dotnetGitHub deposundan alınan şu anda çalışan Codespaces'ınızı bulun.Codespace bağlam menüsünü açın ve sil'i seçin.
GitHub Codespaces panosunda oturum açın.
Azure-Samples/openai-chat-app-quickstart-javascriptGitHub deposundan alınan şu anda çalışan Codespaces'ınızı bulun.Codespace bağlam menüsünü açın ve sil'i seçin.
Yardım alın
Sorununuz giderilemediyse sorununuzu deponun Issues kısmına kaydedin.
Sorununuz giderilemediyse sorununuzu deponun Issues kısmına kaydedin.