Diğer

React, .NET 10 ve Microsoft Foundry ile güvenli bir kurumsal chat

Makale, front-end'in doğrudan modele bağlanıp API anahtarını tarayıcıya koyduğu yaygın hatayı ele alıyor ve bunun yerine React, .NET 10 Minimal API ile Microsoft Foundry arasında anahtarsız bir mimari kuruyor. Entra ID kimlik doğrulaması, sunucu tarafında tutulan system prompt, Server-Sent Events ile streaming ve IP bazlı rate limit gibi üretim korumaları adım adım gösteriliyor.

DEV Community: #dotnet Henrique Mauri
Yayın tarihi
Okuma süresi
11 dk okuma
agent çalıştırması #20
agent çalıştırması #20
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • API anahtarı yerine Entra ID: DefaultAzureCredential ve BearerTokenPolicy ile Foundry'ye anahtarsız bağlanılıyor
  • AsIChatClient() ile OpenAI istemcisi IChatClient'a çevriliyor, sağlayıcı değişimi konfigürasyona iniyor
  • System prompt sunucuda kalıyor; DTO yalnızca user ve assistant rollerini kabul ediyor
  • Son 20 mesaj ve mesaj başına 4000 karakter sınırı maliyet ve gecikmeyi kontrol altında tutuyor
  • .NET 10'daki TypedResults.ServerSentEvents ile IAsyncEnumerable akışı ek kütüphane gerektirmiyor
  • IP başına dakikada 10 istek fixed window rate limit ve iptal edilen isteklerin Foundry çağrısını durdurması

Yazı, "şirket içi ChatGPT" isteyen ekiplerin ilk denemede yaptığı hatayı düzeltiyor: anahtarı React koduna koymak yerine araya bir .NET 10 Minimal API koyuyor. API, Microsoft Foundry üzerindeki gpt-5.4-mini deployment'ına Entra ID token'ı ile bağlanıyor; OpenAI SDK'sı /openai/v1/ endpoint'ine BearerTokenPolicy ve DefaultAzureCredential ile yönlendirilip AsIChatClient() ile Microsoft.Extensions.AI'nin IChatClient soyutlamasına çevriliyor. Böylece sağlayıcı değişikliği bir konfigürasyon meselesi haline geliyor.

System prompt yalnızca sunucuda duruyor, DTO yalnızca user ve assistant rollerini kabul ediyor, son 20 mesaj ve mesaj başına 4000 karakter sınırı uygulanıyor. Yanıt, .NET 10'daki TypedResults.ServerSentEvents ile IAsyncEnumerable üzerinden parça parça akıtılıyor; iptal token'ı istekten geldiği için sekme kapanınca Foundry çağrısı da duruyor, hata ayrıntısı loga gidip kullanıcıya sade bir mesaj dönüyor. Endpoint'te IP başına dakikada 10 istek veren fixed window rate limiter var; front tarafı EventSource yerine fetch ve ReadableStream ile POST gövdesi gönderip akışı okuyor.

Gerçek dünyada kullanımı

  • Müşteriye bakan bir ürün içi destek asistanı: marka sesi ve system prompt sunucuda kalırken front-end yalnızca kendi API'siyle konuşur
  • Azure'a erişimi olmayan ekip üyelerinin de çalıştırabildiği demo ortamı: endpoint boşken simüle edilmiş chat client devreye giriyor
  • Maliyeti kontrol etmek isteyen bir SaaS: kullanıcı başına rate limit ve token kullanımını ekranda gösteren streaming chat
  • Sekmeyi kapatan kullanıcı için boşa token harcamayan uzun yanıt üreten bir içerik asistanı

Neden önemli

Bu mimari, anahtar sızması, DevTools'tan değiştirilebilen prompt ve sürpriz faturaların önüne geçiyor; Microsoft.Extensions.AI soyutlaması sayesinde model veya sağlayıcı değişimi de kod değişikliği gerektirmiyor.

Bu özet, DEV Community: #dotnet üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü