Aracılığıyla paylaş


Hızlı Başlangıç: Kendi verilerinizi kullanarak Azure OpenAI modelleriyle sohbet edin

Bu hızlı başlangıçta Azure OpenAI modelleriyle kendi verilerinizi kullanabilirsiniz. Verilerinizde Azure OpenAI'nin modellerini kullanmak size daha hızlı ve daha doğru iletişim sağlayan güçlü bir konuşma yapay zekası platformu sağlayabilir.

Önkoşullar

Aşağıdaki kaynaklar:

  • Kendi verileriniz yoksa GitHub'dan örnek verileri indirin.

Azure AI Foundry portalını kullanarak verilerinizi ekleme

İpucu

Verilerinizde Azure OpenAI için gerekli kaynakları program aracılığıyla oluşturmak için Azure Geliştirici CLI'sini kullanabilirsiniz

Azure AI Foundry portalına gidin ve Azure OpenAI kaynağınıza erişimi olan kimlik bilgileriyle oturum açın.

  1. Proje oluştur'a tıklayarak bir Azure AI Foundry projesi oluşturabilir veya Azure AI Foundry Modellerinde Azure OpenAI'ye Odaklanmış kutucuğundaki düğmeye tıklayarak doğrudan devam edebilirsiniz.

    Azure AI Foundry portalı giriş sayfasının ekran görüntüsü.

  2. Sol bölmedeki Oyun Alanları'nın altında Sohbet'i seçin ve model dağıtımınızı seçin.

  3. Sohbet oyun alanındaVerilerinizi ekleyin'i ve ardından Veri kaynağı ekle'yi seçin

    Azure AI Foundry'deki sohbet oyun alanının ekran görüntüsü.

  4. Görüntülenen bölmede Veri kaynağı seç'in altında Dosyaları karşıya yükle (önizleme) öğesini seçin. Azure OpenAI'ın verilerinize erişmek ve verileri dizine eklemek için hem depolama kaynağına hem de arama kaynağına ihtiyacı vardır.

    İpucu

    1. Azure OpenAI'nin depolama hesabınıza erişmesi için Çıkış noktaları arası kaynak paylaşımını (CORS) açmanız gerekir. Azure Blob Depolama kaynağı için CORS henüz açık değilse CORS'yi aç'ı seçin.

    2. Azure AI Search kaynağınızı seçin ve bu kaynağı bağlamanın hesabınızda kullanıma neden olacağı onayını seçin. Ardından İleri'yi seçin.

    Azure AI Foundry portalında veri kaynağı seçme seçeneklerini gösteren ekran görüntüsü.

  5. Dosyaları karşıya yükle bölmesinde Dosyaya gözat'ı seçin ve önkoşullar bölümünden veya kendi verilerinizden indirdiğiniz dosyaları seçin. Ardından 'Dosyaları karşıya yükle'yi seçin. Ardından İleri'yi seçin.

  6. Veri yönetimi bölmesinde, dizininiz için anlamsal aramayı mı yoksa vektör aramasını mı etkinleştirebileceğinizi seçebilirsiniz.

    Önemli

    • Anlamsal arama ve vektör araması ek fiyatlandırmaya tabidir. Anlamsal aramayı veya vektör aramasını etkinleştirmek için Temel veya daha yüksek SKU'yu seçmeniz gerekir. Daha fazla bilgi için bkz. fiyatlandırma katmanı farkı ve hizmet sınırları .
    • Bilgi alma ve model yanıtının kalitesini artırmaya yardımcı olmak için şu veri kaynağı dilleri için anlamsal aramayı etkinleştirmenizi öneririz: İngilizce, Fransızca, İspanyolca, Portekizce, İtalyanca, Almanya, Çince (Zh), Japonca, Korece, Rusça ve Arapça.
  7. Girdiğiniz ayrıntıları gözden geçirin ve Kaydet ve kapat'ı seçin. Artık modelle sohbet edebilirsiniz ve yanıt oluşturmak için verilerinizden alınan bilgileri kullanır.

Sohbet oyun alanı

Sohbet oyun alanı aracılığıyla kod içermeyen bir yaklaşımla Azure OpenAI özelliklerini keşfetmeye başlayın. Bu, tamamlama oluşturmak için bir istem gönderebileceğiniz bir metin kutusu. Bu sayfadan özellikleri hızla yineleyebilir ve deneyebilirsiniz.

Bölümlerin vurgulandığı Azure AI Foundry portalının oyun alanı sayfasının ekran görüntüsü.

Oyun alanı, sohbet deneyiminizi uyarlamak için seçenekler sunar. Üstteki menüden Dağıt'ı seçerek dizininizdeki arama sonuçlarını kullanarak hangi modelin yanıt oluşturabileceğini belirleyebilirsiniz. Gelecekte oluşturulan yanıtlar için konuşma geçmişi olarak eklenecek geçmiş iletilerin sayısını seçersiniz. Konuşma geçmişi , ilgili yanıtları oluşturmak için bağlam sağlar, ancak belirteç kullanımını da kullanır. Giriş belirteci ilerleme durumu göstergesi, gönderdiğiniz sorunun belirteç sayısını izler.

Soldaki Gelişmiş ayarlar , verilerinizden ilgili bilgileri alma ve arama üzerinde denetim sahibi olmanıza izin veren çalışma zamanı parametreleridir. İyi bir kullanım örneği, yanıtların yalnızca verilerinize göre oluşturulduğundan emin olmak istemeniz veya modelin verilerinizde mevcut bilgilere dayalı bir yanıt oluşturamadığını bulmanızdır.

  • Katılık , sistemin benzerlik puanlarına göre arama belgelerini filtrelemedeki kararlılığını belirler. Katılığı 5 olarak ayarlamak, sistemin belgeleri agresif bir şekilde filtreleyerek çok yüksek bir benzerlik eşiği uygulayacağını gösterir. Sıralama modelleri sorgunun amacını çıkarsama konusunda daha iyi bir iş çıkardığından bu senaryoda anlamsal arama yararlı olabilir. Düşük katılık düzeyleri daha kapsamlı yanıtlar üretir, ancak dizininizde olmayan bilgileri de içerebilir. Bu, varsayılan olarak 3 olarak ayarlanır.

  • Alınan belgeler 3, 5, 10 veya 20 olarak ayarlanabilen bir tamsayıdır ve son yanıtı formüle etmek için büyük dil modeline sağlanan belge öbeklerinin sayısını denetler. Varsayılan olarak, bu değer 5 olarak ayarlanır.

  • Verilerinize yanıtları sınırla etkinleştirildiğinde, model yalnızca yanıtlar için belgelerinize güvenmeye çalışır. Bu, varsayılan olarak true olarak ayarlanır.

Gelişmiş ayarların ekran görüntüsü.

İlk sorgunuzu gönderin. Sohbet modelleri soru-cevap alıştırmalarında en iyi performansı gösterir. Örneğin, "Kullanılabilir sağlık planlarım nelerdir?" veya "Sağlık artı seçeneği nedir?".

Veri analizi gerektiren sorgular, "En popüler sağlık planı hangisidir?" gibi, büyük olasılıkla başarısız olabilir. Tüm verileriniz hakkında bilgi gerektiren sorgular da büyük olasılıkla "Kaç belge yükledim?" gibi başarısız olur. Arama altyapısının sorguyla ilgili tam veya benzer terimlere, tümceciklere veya yapıya sahip öbekleri aradığını unutmayın. Model soruyu anlayabilir ancak arama sonuçları veri kümesinden alınan öbeklerse, bu tür bir soruyu yanıtlamak doğru bilgi değildir.

Sohbetler yanıtta döndürülen belge sayısıyla (öbekler) kısıtlanır (Azure AI Foundry portalı oyun alanında 3-20 ile sınırlıdır). Tahmin edebileceğiniz gibi, "tüm başlıklar" hakkında soru sorulabilmesi için vektör deposunun tamamının tam taraması gerekir.

Modelinizi dağıtın

Deneyimden memnun kaldığınızda, Dağıt'a düğmesini seçerek doğrudan portaldan bir web uygulaması dağıtabilirsiniz.

Portalda model dağıtım düğmesini gösteren ekran görüntüsü.

Bu, model üzerinde kendi verilerinizi kullanıyorsanız, tek başına bir web uygulamasına veya Copilot Studio'da bir yardımcı pilota (önizleme) dağıtma seçeneği sunar.

Örneğin, bir web uygulaması dağıtmayı seçerseniz:

Bir web uygulamasını ilk kez dağıttığınızda Yeni web uygulaması oluştur'u seçmelisiniz. Uygulama URL'sinin bir parçası olacak uygulama için bir ad seçin. Örneğin, https://<appname>.azurewebsites.net.

Yayımlanan uygulama için aboneliğinizi, kaynak grubunuzu, konumunuzu ve fiyatlandırma planınızı seçin. Mevcut bir uygulamayı güncelleştirmek için Mevcut bir web uygulamasında yayımla'yı seçin ve açılan menüden önceki uygulamanızın adını seçin.

Bir web uygulamasını dağıtmayı seçerseniz, bu uygulamayı kullanmak için dikkat edilmesi gereken önemli noktalara bakın.

Önkoşullar

Aşağıdaki kaynaklar:

Azure AI Foundry portalını kullanarak verilerinizi ekleme

İpucu

Verilerinizde Azure OpenAI için gerekli kaynakları program aracılığıyla oluşturmak için Azure Geliştirici CLI'sini kullanabilirsiniz

Azure AI Foundry portalına gidin ve Azure OpenAI kaynağınıza erişimi olan kimlik bilgileriyle oturum açın.

  1. Proje oluştur'a tıklayarak bir Azure AI Foundry projesi oluşturabilir veya Azure AI Foundry Modellerinde Azure OpenAI'ye Odaklanmış kutucuğundaki düğmeye tıklayarak doğrudan devam edebilirsiniz.

    Azure AI Foundry portalı giriş sayfasının ekran görüntüsü.

  2. Sol bölmedeki Oyun Alanları'nın altında Sohbet'i seçin ve model dağıtımınızı seçin.

  3. Sohbet oyun alanındaVerilerinizi ekleyin'i ve ardından Veri kaynağı ekle'yi seçin

    Azure AI Foundry'deki sohbet oyun alanının ekran görüntüsü.

  4. Görüntülenen bölmede Veri kaynağı seç'in altında Dosyaları karşıya yükle (önizleme) öğesini seçin. Azure OpenAI'ın verilerinize erişmek ve verileri dizine eklemek için hem depolama kaynağına hem de arama kaynağına ihtiyacı vardır.

    İpucu

    1. Azure OpenAI'nin depolama hesabınıza erişmesi için Çıkış noktaları arası kaynak paylaşımını (CORS) açmanız gerekir. Azure Blob Depolama kaynağı için CORS henüz açık değilse CORS'yi aç'ı seçin.

    2. Azure AI Search kaynağınızı seçin ve bu kaynağı bağlamanın hesabınızda kullanıma neden olacağı onayını seçin. Ardından İleri'yi seçin.

    Azure AI Foundry portalında veri kaynağı seçme seçeneklerini gösteren ekran görüntüsü.

  5. Dosyaları karşıya yükle bölmesinde Dosyaya gözat'ı seçin ve önkoşullar bölümünden veya kendi verilerinizden indirdiğiniz dosyaları seçin. Ardından 'Dosyaları karşıya yükle'yi seçin. Ardından İleri'yi seçin.

  6. Veri yönetimi bölmesinde, dizininiz için anlamsal aramayı mı yoksa vektör aramasını mı etkinleştirebileceğinizi seçebilirsiniz.

    Önemli

    • Anlamsal arama ve vektör araması ek fiyatlandırmaya tabidir. Anlamsal aramayı veya vektör aramasını etkinleştirmek için Temel veya daha yüksek SKU'yu seçmeniz gerekir. Daha fazla bilgi için bkz. fiyatlandırma katmanı farkı ve hizmet sınırları .
    • Bilgi alma ve model yanıtının kalitesini artırmaya yardımcı olmak için şu veri kaynağı dilleri için anlamsal aramayı etkinleştirmenizi öneririz: İngilizce, Fransızca, İspanyolca, Portekizce, İtalyanca, Almanya, Çince (Zh), Japonca, Korece, Rusça ve Arapça.
  7. Girdiğiniz ayrıntıları gözden geçirin ve Kaydet ve kapat'ı seçin. Artık modelle sohbet edebilirsiniz ve yanıt oluşturmak için verilerinizden alınan bilgileri kullanır.

Kaynak bilgilerini alma

Uygulamanızın kimliğini Azure OpenAI kaynağınızla doğrulamak için aşağıdaki bilgileri almanız gerekir. Bu hızlı başlangıçta verilerinizi bir Azure blob depolama hesabına yüklediğiniz ve bir Azure AI Search dizini oluşturduğunuz varsayılır. Bkz. Azure AI Foundry portalını kullanarak verilerinizi ekleme.

Değişken adı Değer
AZURE_OPENAI_ENDPOINT Bu değer, Azure portalından Azure OpenAI kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Örnek uç nokta: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_NAME Modeli dağıtırken dağıtımınız için seçtiğiniz özel isme bu değer karşılık gelir. Bu değer, Azure portalındaki Kaynak Yönetimi>Dağıtımları altında bulunabilir.
AZURE_AI_SEARCH_ENDPOINT Bu değer, Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulunabilir.
AZURE_AI_SEARCH_INDEX Bu değer, verilerinizi depolamak için oluşturduğunuz dizinin adına karşılık gelir. Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulabilirsiniz.

Anahtarsız kimlik doğrulaması ve ortam değişkenlerini ayarlama hakkında daha fazla bilgi edinin.

Proje dizininden Program.cs dosyasını açın ve içeriğini aşağıdaki kodla değiştirin:

using System;
using Azure.AI.OpenAI;
using System.ClientModel;
using Azure.AI.OpenAI.Chat;
using OpenAI.Chat;
using static System.Environment;

string azureOpenAIEndpoint = GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
string azureOpenAIKey = GetEnvironmentVariable("AZURE_OPENAI_API_KEY");
string deploymentName = GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME");
string searchEndpoint = GetEnvironmentVariable("AZURE_AI_SEARCH_ENDPOINT");
string searchKey = GetEnvironmentVariable("AZURE_AI_SEARCH_API_KEY");
string searchIndex = GetEnvironmentVariable("AZURE_AI_SEARCH_INDEX");

AzureOpenAIClient openAIClient = new(
			new Uri(azureOpenAIEndpoint),
			new ApiKeyCredential(azureOpenAIKey));
ChatClient chatClient = openAIClient.GetChatClient(deploymentName);

// Extension methods to use data sources with options are subject to SDK surface changes. Suppress the
// warning to acknowledge and this and use the subject-to-change AddDataSource method.
#pragma warning disable AOAI001

ChatCompletionOptions options = new();
options.AddDataSource(new AzureSearchChatDataSource()
{
	Endpoint = new Uri(searchEndpoint),
	IndexName = searchIndex,
	Authentication = DataSourceAuthentication.FromApiKey(searchKey),
});

ChatCompletion completion = chatClient.CompleteChat(
	[
		new UserChatMessage("What health plans are available?"),
			],
	options);

ChatMessageContext onYourDataContext = completion.GetMessageContext();

if (onYourDataContext?.Intent is not null)
{
	Console.WriteLine($"Intent: {onYourDataContext.Intent}");
}
foreach (ChatCitation citation in onYourDataContext?.Citations ?? [])
{
	Console.WriteLine($"Citation: {citation.Content}");
}

Önemli

Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Kimlik bilgisi güvenliği hakkında daha fazla bilgi için bu güvenlik makalesine bakın.

dotnet run Program.cs

Çıktı

Contoso Electronics offers two health plans: Northwind Health Plus and Northwind Standard [doc1]. Northwind Health Plus is a comprehensive plan that provides coverage for medical, vision, and dental services, prescription drug coverage, mental health and substance abuse coverage, and coverage for preventive care services. It also offers coverage for emergency services, both in-network and out-of-network. On the other hand, Northwind Standard is a basic plan that provides coverage for medical, vision, and dental services, prescription drug coverage, and coverage for preventive care services. However, it does not offer coverage for emergency services, mental health and substance abuse coverage, or out-of-network services [doc1].

Intent: ["What are the available health plans?", "List of health plans available", "Health insurance options", "Types of health plans offered"]

Citation:
Contoso Electronics plan and benefit packages

Thank you for your interest in the Contoso electronics plan and benefit packages. Use this document to

learn more about the various options available to you...// Omitted for brevity

Bu işlem, sonuçları yazdırmadan önce modelin tüm yanıtını oluşturmasını bekler.

Kaynak kodu| Kaynak kodu | Örnek

Önkoşullar

Aşağıdaki kaynaklar:

Azure AI Foundry portalını kullanarak verilerinizi ekleme

İpucu

Verilerinizde Azure OpenAI için gerekli kaynakları program aracılığıyla oluşturmak için Azure Geliştirici CLI'sini kullanabilirsiniz

Azure AI Foundry portalına gidin ve Azure OpenAI kaynağınıza erişimi olan kimlik bilgileriyle oturum açın.

  1. Proje oluştur'a tıklayarak bir Azure AI Foundry projesi oluşturabilir veya Azure AI Foundry Modellerinde Azure OpenAI'ye Odaklanmış kutucuğundaki düğmeye tıklayarak doğrudan devam edebilirsiniz.

    Azure AI Foundry portalı giriş sayfasının ekran görüntüsü.

  2. Sol bölmedeki Oyun Alanları'nın altında Sohbet'i seçin ve model dağıtımınızı seçin.

  3. Sohbet oyun alanındaVerilerinizi ekleyin'i ve ardından Veri kaynağı ekle'yi seçin

    Azure AI Foundry'deki sohbet oyun alanının ekran görüntüsü.

  4. Görüntülenen bölmede Veri kaynağı seç'in altında Dosyaları karşıya yükle (önizleme) öğesini seçin. Azure OpenAI'ın verilerinize erişmek ve verileri dizine eklemek için hem depolama kaynağına hem de arama kaynağına ihtiyacı vardır.

    İpucu

    1. Azure OpenAI'nin depolama hesabınıza erişmesi için Çıkış noktaları arası kaynak paylaşımını (CORS) açmanız gerekir. Azure Blob Depolama kaynağı için CORS henüz açık değilse CORS'yi aç'ı seçin.

    2. Azure AI Search kaynağınızı seçin ve bu kaynağı bağlamanın hesabınızda kullanıma neden olacağı onayını seçin. Ardından İleri'yi seçin.

    Azure AI Foundry portalında veri kaynağı seçme seçeneklerini gösteren ekran görüntüsü.

  5. Dosyaları karşıya yükle bölmesinde Dosyaya gözat'ı seçin ve önkoşullar bölümünden veya kendi verilerinizden indirdiğiniz dosyaları seçin. Ardından 'Dosyaları karşıya yükle'yi seçin. Ardından İleri'yi seçin.

  6. Veri yönetimi bölmesinde, dizininiz için anlamsal aramayı mı yoksa vektör aramasını mı etkinleştirebileceğinizi seçebilirsiniz.

    Önemli

    • Anlamsal arama ve vektör araması ek fiyatlandırmaya tabidir. Anlamsal aramayı veya vektör aramasını etkinleştirmek için Temel veya daha yüksek SKU'yu seçmeniz gerekir. Daha fazla bilgi için bkz. fiyatlandırma katmanı farkı ve hizmet sınırları .
    • Bilgi alma ve model yanıtının kalitesini artırmaya yardımcı olmak için şu veri kaynağı dilleri için anlamsal aramayı etkinleştirmenizi öneririz: İngilizce, Fransızca, İspanyolca, Portekizce, İtalyanca, Almanya, Çince (Zh), Japonca, Korece, Rusça ve Arapça.
  7. Girdiğiniz ayrıntıları gözden geçirin ve Kaydet ve kapat'ı seçin. Artık modelle sohbet edebilirsiniz ve yanıt oluşturmak için verilerinizden alınan bilgileri kullanır.

Gerekli değişkenleri alma

Azure OpenAI'ye karşı başarılı bir şekilde çağrı yapmak için aşağıdaki değişkenlere ihtiyacınız vardır. Bu hızlı başlangıçta verilerinizi bir Azure blob depolama hesabına yüklediğiniz ve bir Azure AI Search dizini oluşturduğunuz varsayılır. Daha fazla bilgi için bkz. Azure AI Foundry kullanarak verilerinizi ekleme.

Değişken adı Değer
AZURE_OPENAI_ENDPOINT Bu değeri Azure portaldan Azure OpenAI kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulabilirsiniz. Alternatif olarak, değeri Azure AI Foundry>Sohbet oyun alanı>Kod görünümünde bulabilirsiniz. Örnek uç nokta: https://my-resource.openai.azure.com.
AZURE_OPENAI_API_KEY Bu değeri Azure portalından Azure OpenAI kaynağınızı incelerken Kaynak yönetimi>Anahtarları ve Uç Nokta bölümünde bulabilirsiniz. KEY1 veya KEY2 kullanabilirsiniz. Her zaman iki anahtara sahip olmak, hizmet kesintisine neden olmadan anahtarları güvenli bir şekilde döndürmenize ve yeniden oluşturmanıza olanak tanır.
AZURE_OPEN_AI_DEPLOYMENT_ID Modeli dağıtırken dağıtımınız için seçtiğiniz özel isme bu değer karşılık gelir. Bu değeri Azure portalındaki Kaynak Yönetimi>Dağıtımları altında veya alternatif olarak Azure AI Foundry portalında Yönetim>Dağıtımları altında bulabilirsiniz.
AZURE_AI_SEARCH_ENDPOINT Bu değeri Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulabilirsiniz.
AZURE_AI_SEARCH_API_KEY Bu değeri, Azure portalından Azure AI Search kaynağınızı incelerken Ayarlar>Anahtarları bölümünde bulabilirsiniz. Birincil yönetici anahtarını veya ikincil yönetici anahtarını kullanabilirsiniz. Her zaman iki anahtara sahip olmak, hizmet kesintisine neden olmadan anahtarları güvenli bir şekilde döndürmenize ve yeniden oluşturmanıza olanak tanır.
AZURE_AI_SEARCH_INDEX Bu değer, verilerinizi depolamak için oluşturduğunuz dizinin adına karşılık gelir. Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulabilirsiniz.

Ortam değişkenleri

Anahtarınız ve uç noktanız için kalıcı ortam değişkenleri oluşturun ve atayın.

Önemli

API anahtarlarını dikkatli kullanın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin. API anahtarı kullanıyorsanız, bunu Azure Key Vault'ta güvenli bir şekilde depolayın. Uygulamalarınızda API anahtarlarını güvenli bir şekilde kullanma hakkında daha fazla bilgi için bkz. Azure Key Vault ile API anahtarları.

Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz. Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.

Not

Spring AI, model adını varsayılan olarak olarak gpt-35-turbokullanır. Sadece farklı bir ada sahip bir model dağıttıysanız, SPRING_AI_AZURE_OPENAI_MODEL değerini sağlamanız gerekir.

export SPRING_AI_AZURE_OPENAI_ENDPOINT=REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
export SPRING_AI_AZURE_OPENAI_API_KEY=REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_ENDPOINT=REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_API_KEY=REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_INDEX=REPLACE_WITH_YOUR_INDEX_NAME_HERE
export SPRING_AI_AZURE_OPENAI_MODEL=REPLACE_WITH_YOUR_MODEL_NAME_HERE

Yeni bir Spring uygulaması oluşturma

Spring AI şu anda Azure AI sorgusunun AzureCognitiveSearchChatExtensionConfigurationAlma Artırılmış Nesil (RAG) yöntemini kapsüllemesi ve ayrıntıları kullanıcıdan gizlemesine olanak sağlayan seçenekleri desteklememektedir. Alternatif olarak, Azure AI Search dizininizdeki verileri sorgulamak ve sorgunuzu geliştirmek için alınan belgeleri kullanmak için RAG yöntemini doğrudan uygulamanızda çağırabilirsiniz.

Spring AI bir VectorStore soyutlamasını destekler ve özel verilerinizi sorgulamak için Azure AI Search'ü bir Spring AI VectorStore implementasyonunda sarabilirsiniz. Aşağıdaki proje, Azure AI Search tarafından desteklenen özel bir VectorStore uygular ve DOĞRUDAN RAG işlemlerini yürütür.

Bash penceresinde uygulamanız için yeni bir dizin oluşturun ve bu dizine gidin.

mkdir ai-custom-data-demo && cd ai-custom-data-demo

spring init Komutunu çalışma dizininizden çalıştırın. Bu komut, Spring projeniz için ana Java sınıf kaynak dosyası ve Maven tabanlı projeleri yönetmek için kullanılan pom.xml dosyası da dahil olmak üzere standart bir dizin yapısı oluşturur.

spring init -a ai-custom-data-demo -n AICustomData --force --build maven -x

Oluşturulan dosya ve klasörler aşağıdaki yapıya benzer:

ai-custom-data-demo/
|-- pom.xml
|-- mvn
|-- mvn.cmd
|-- HELP.md
|-- src/
    |-- main/
    |   |-- resources/
    |   |   |-- application.properties
    |   |-- java/
    |       |-- com/
    |           |-- example/
    |               |-- aicustomdatademo/
    |                   |-- AiCustomDataApplication.java
    |-- test/
        |-- java/
            |-- com/
                |-- example/
                    |-- aicustomdatademo/
                        |-- AiCustomDataApplicationTests.java

Spring uygulamasını düzenleme

  1. pom.xml dosyasını düzenleyin.

    Proje dizininin kökünden ,pom.xml dosyasını tercih ettiğiniz düzenleyicide veya IDE'de açın ve aşağıdaki içeriğe sahip dosyanın üzerine yazın:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>3.2.0</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>ai-custom-data-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>AICustomData</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>17</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.experimental.ai</groupId>
                <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId>
                <version>0.7.0-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.azure</groupId>
                <artifactId>azure-search-documents</artifactId>
                <version>11.6.0-beta.10</version>
                <exclusions>
                    <!-- exclude this to avoid changing the default serializer and the null-value behavior -->
                    <exclusion>
                        <groupId>com.azure</groupId>
                        <artifactId>azure-core-serializer-json-jackson</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
        <repositories>
            <repository>
                <id>spring-snapshots</id>
                <name>Spring Snapshots</name>
                <url>https://repo.spring.io/snapshot</url>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </repository>
        </repositories>
    </project>
    
  2. src/main/java/com/example/aicustomdatademo klasöründen tercih ettiğiniz düzenleyicide veya IDE'de AiCustomDataApplication.java açın ve aşağıdaki kodu yapıştırın:

    package com.example.aicustomdatademo;
    
    import java.util.Collections;
    import java.util.List;
    import java.util.Map;
    import java.util.Optional;
    import java.util.stream.Collectors;
    
    import org.springframework.ai.client.AiClient;
    import org.springframework.ai.document.Document;
    import org.springframework.ai.embedding.EmbeddingClient;
    import org.springframework.ai.prompt.Prompt;
    import org.springframework.ai.prompt.SystemPromptTemplate;
    import org.springframework.ai.prompt.messages.MessageType;
    import org.springframework.ai.prompt.messages.UserMessage;
    import org.springframework.ai.vectorstore.VectorStore;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    
    import com.azure.core.credential.AzureKeyCredential;
    import com.azure.core.util.Context;
    import com.azure.search.documents.SearchClient;
    import com.azure.search.documents.SearchClientBuilder;
    import com.azure.search.documents.models.IndexingResult;
    import com.azure.search.documents.models.SearchOptions;
    import com.azure.search.documents.models.RawVectorQuery;
    
    import lombok.AllArgsConstructor;
    import lombok.NoArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.extern.jackson.Jacksonized;
    
    @SpringBootApplication
    public class AiCustomDataApplication implements CommandLineRunner
    {
        private static final String ROLE_INFO_KEY = "role";
    
        private static final String template = """
                You are a helpful assistant. Use the information from the DOCUMENTS section to augment answers.
    
                DOCUMENTS:
                {documents}
                """;
    
        @Value("${spring.ai.azure.cognitive-search.endpoint}")
        private String acsEndpoint;
    
        @Value("${spring.ai.azure.cognitive-search.api-key}")
        private String acsApiKey;
    
        @Value("${spring.ai.azure.cognitive-search.index}")
        private String acsIndexName;
    
        @Autowired
        private AiClient aiClient;
    
        @Autowired
        private EmbeddingClient embeddingClient;
    
        public static void main(String[] args) {
            SpringApplication.run(AiCustomDataApplication.class, args);
        }
    
        @Override
        public void run(String... args) throws Exception
        {
            System.out.println(String.format("Sending custom data prompt to AI service. One moment please...\r\n"));
    
            final var store = vectorStore(embeddingClient);
    
            final String question = "What are my available health plans?";
    
            final var candidateDocs = store.similaritySearch(question);
    
            final var userMessage = new UserMessage(question);
    
            final String docPrompts =
                    candidateDocs.stream().map(entry -> entry.getContent()).collect(Collectors.joining("\n"));
    
            final SystemPromptTemplate promptTemplate = new SystemPromptTemplate(template);
            final var systemMessage = promptTemplate.createMessage(Map.of("documents", docPrompts));
    
            final var prompt = new Prompt(List.of(systemMessage, userMessage));
    
            final var resps = aiClient.generate(prompt);
    
            System.out.println(String.format("Prompt created %d generated response(s).", resps.getGenerations().size()));
    
            resps.getGenerations().stream()
              .forEach(gen -> {
                  final var role = gen.getInfo().getOrDefault(ROLE_INFO_KEY, MessageType.ASSISTANT.getValue());
    
                  System.out.println(String.format("Generated respose from \"%s\": %s", role, gen.getText()));
              });
    
        }
    
        @Bean
        public VectorStore vectorStore(EmbeddingClient embeddingClient)
        {
            final SearchClient searchClient = new SearchClientBuilder()
                    .endpoint(acsEndpoint)
                    .credential(new AzureKeyCredential(acsApiKey))
                    .indexName(acsIndexName)
                    .buildClient();
            return new AzureCognitiveSearchVectorStore(searchClient, embeddingClient);
        }
    
        public static class AzureCognitiveSearchVectorStore implements VectorStore
        {
            private static final int DEFAULT_TOP_K = 4;
    
            private static final Double DEFAULT_SIMILARITY_THRESHOLD = 0.0;
    
            private SearchClient searchClient;
    
            private final EmbeddingClient embeddingClient;
    
            public AzureCognitiveSearchVectorStore(SearchClient searchClient, EmbeddingClient embeddingClient)
            {
                this.searchClient = searchClient;
                this.embeddingClient = embeddingClient;
            }
    
            @Override
            public void add(List<Document> documents)
            {
                final var docs = documents.stream().map(document -> {
    
                    final var embeddings = embeddingClient.embed(document);
    
                    return new DocEntry(document.getId(), "", document.getContent(), embeddings);
    
                }).toList();
    
                searchClient.uploadDocuments(docs);
            }
    
            @Override
            public Optional<Boolean> delete(List<String> idList)
            {
                final List<DocEntry> docIds = idList.stream().map(id -> DocEntry.builder().id(id).build())
                    .toList();
    
                var results = searchClient.deleteDocuments(docIds);
    
                boolean resSuccess = true;
    
                for (IndexingResult result : results.getResults())
                    if (!result.isSucceeded()) {
                        resSuccess = false;
                        break;
                    }
    
                return Optional.of(resSuccess);
            }
    
            @Override
            public List<Document> similaritySearch(String query)
            {
                return similaritySearch(query, DEFAULT_TOP_K);
            }
    
            @Override
            public List<Document> similaritySearch(String query, int k)
            {
                return similaritySearch(query, k, DEFAULT_SIMILARITY_THRESHOLD);
            }
    
            @Override
            public List<Document> similaritySearch(String query, int k, double threshold)
            {
                final var searchQueryVector = new RawVectorQuery()
                        .setVector(toFloatList(embeddingClient.embed(query)))
                        .setKNearestNeighborsCount(k)
                        .setFields("contentVector");
    
                final var searchResults = searchClient.search(null,
                        new SearchOptions().setVectorQueries(searchQueryVector), Context.NONE);
    
                return searchResults.stream()
                        .filter(r -> r.getScore() >= threshold)
                        .map(r -> {
    
                            final DocEntry entry = r.getDocument(DocEntry.class);
    
                            final Document doc = new Document(entry.getId(), entry.getContent(), Collections.emptyMap());
                            doc.setEmbedding(entry.getContentVector());
    
                            return doc;
                        })
                        .collect(Collectors.toList());
            }
    
            private List<Float> toFloatList(List<Double> doubleList)
            {
                return doubleList.stream().map(Double::floatValue).toList();
            }
    
        }
    
        @Data
        @Builder
        @Jacksonized
        @AllArgsConstructor
        @NoArgsConstructor
        static class DocEntry
        {
            private String id;
    
            private String hash;
    
            private String content;
    
            private List<Double> contentVector;
        }
    
    }
    

    Önemli

    Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Kimlik bilgisi güvenliği hakkında daha fazla bilgi için bu güvenlik makalesine bakın.

  3. Proje kök klasörüne geri dönün ve aşağıdaki komutu kullanarak uygulamayı çalıştırın:

    ./mvnw spring-boot:run
    

Çıktı

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.1.5)

2023-11-07T14:40:45.250-06:00  INFO 18557 --- [           main] c.e.a.AiCustomDataApplication            : No active profile set, falling back to 1 default profile: "default"
2023-11-07T14:40:46.035-06:00  INFO 18557 --- [           main] c.e.a.AiCustomDataApplication            : Started AiCustomDataApplication in 1.095 seconds (process running for 1.397)
Sending custom data prompt to AI service. One moment please...

Prompt created 1 generated response(s).
Generated response from "assistant": The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.

Başvuru belgeleri | Kaynak kodu | Paket (npm) | Örnekleri

Önkoşullar

Microsoft Entra Id önkoşulları

Microsoft Entra Id ile önerilen anahtarsız kimlik doğrulaması için şunları yapmanız gerekir:

  • Microsoft Entra ID ile anahtarsız kimlik doğrulaması için kullanılan Azure CLI'yi yükleyin.
  • Rolü kullanıcı hesabınıza atayın Cognitive Services User . Azure portalında Erişim denetimi (IAM)>Rol ataması ekle altında rol atayabilirsiniz.

Azure AI Foundry portalını kullanarak verilerinizi ekleme

İpucu

Verilerinizde Azure OpenAI için gerekli kaynakları program aracılığıyla oluşturmak için Azure Geliştirici CLI'sini kullanabilirsiniz

Azure AI Foundry portalına gidin ve Azure OpenAI kaynağınıza erişimi olan kimlik bilgileriyle oturum açın.

  1. Proje oluştur'a tıklayarak bir Azure AI Foundry projesi oluşturabilir veya Azure AI Foundry Modellerinde Azure OpenAI'ye Odaklanmış kutucuğundaki düğmeye tıklayarak doğrudan devam edebilirsiniz.

    Azure AI Foundry portalı giriş sayfasının ekran görüntüsü.

  2. Sol bölmedeki Oyun Alanları'nın altında Sohbet'i seçin ve model dağıtımınızı seçin.

  3. Sohbet oyun alanındaVerilerinizi ekleyin'i ve ardından Veri kaynağı ekle'yi seçin

    Azure AI Foundry'deki sohbet oyun alanının ekran görüntüsü.

  4. Görüntülenen bölmede Veri kaynağı seç'in altında Dosyaları karşıya yükle (önizleme) öğesini seçin. Azure OpenAI'ın verilerinize erişmek ve verileri dizine eklemek için hem depolama kaynağına hem de arama kaynağına ihtiyacı vardır.

    İpucu

    1. Azure OpenAI'nin depolama hesabınıza erişmesi için Çıkış noktaları arası kaynak paylaşımını (CORS) açmanız gerekir. Azure Blob Depolama kaynağı için CORS henüz açık değilse CORS'yi aç'ı seçin.

    2. Azure AI Search kaynağınızı seçin ve bu kaynağı bağlamanın hesabınızda kullanıma neden olacağı onayını seçin. Ardından İleri'yi seçin.

    Azure AI Foundry portalında veri kaynağı seçme seçeneklerini gösteren ekran görüntüsü.

  5. Dosyaları karşıya yükle bölmesinde Dosyaya gözat'ı seçin ve önkoşullar bölümünden veya kendi verilerinizden indirdiğiniz dosyaları seçin. Ardından 'Dosyaları karşıya yükle'yi seçin. Ardından İleri'yi seçin.

  6. Veri yönetimi bölmesinde, dizininiz için anlamsal aramayı mı yoksa vektör aramasını mı etkinleştirebileceğinizi seçebilirsiniz.

    Önemli

    • Anlamsal arama ve vektör araması ek fiyatlandırmaya tabidir. Anlamsal aramayı veya vektör aramasını etkinleştirmek için Temel veya daha yüksek SKU'yu seçmeniz gerekir. Daha fazla bilgi için bkz. fiyatlandırma katmanı farkı ve hizmet sınırları .
    • Bilgi alma ve model yanıtının kalitesini artırmaya yardımcı olmak için şu veri kaynağı dilleri için anlamsal aramayı etkinleştirmenizi öneririz: İngilizce, Fransızca, İspanyolca, Portekizce, İtalyanca, Almanya, Çince (Zh), Japonca, Korece, Rusça ve Arapça.
  7. Girdiğiniz ayrıntıları gözden geçirin ve Kaydet ve kapat'ı seçin. Artık modelle sohbet edebilirsiniz ve yanıt oluşturmak için verilerinizden alınan bilgileri kullanır.

Kaynak bilgilerini alma

Uygulamanızın kimliğini Azure OpenAI kaynağınızla doğrulamak için aşağıdaki bilgileri almanız gerekir. Bu hızlı başlangıçta verilerinizi bir Azure blob depolama hesabına yüklediğiniz ve bir Azure AI Search dizini oluşturduğunuz varsayılır. Bkz. Azure AI Foundry portalını kullanarak verilerinizi ekleme.

Değişken adı Değer
AZURE_OPENAI_ENDPOINT Bu değer, Azure portalından Azure OpenAI kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Örnek uç nokta: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_NAME Modeli dağıtırken dağıtımınız için seçtiğiniz özel isme bu değer karşılık gelir. Bu değer, Azure portalındaki Kaynak Yönetimi>Dağıtımları altında bulunabilir.
AZURE_AI_SEARCH_ENDPOINT Bu değer, Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulunabilir.
AZURE_AI_SEARCH_INDEX Bu değer, verilerinizi depolamak için oluşturduğunuz dizinin adına karşılık gelir. Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulabilirsiniz.

Anahtarsız kimlik doğrulaması ve ortam değişkenlerini ayarlama hakkında daha fazla bilgi edinin.

Kurulum

  1. Yeni bir klasör use-data-quickstart oluşturun ve aşağıdaki komutu kullanarak hızlı başlangıç klasörüne gidin:

    mkdir use-data-quickstart && cd use-data-quickstart
    
  2. Aşağıdaki komutla package.json oluşturun:

    npm init -y
    
  3. JavaScript için OpenAI istemci kitaplığını şu şekilde yükleyin:

    npm install openai
    
  4. Önerilen parolasız kimlik doğrulaması için:

    npm install @azure/identity
    

JavaScript kodunu ekleme

  1. index.js Dosyayı aşağıdaki kodla oluşturun:

    const { DefaultAzureCredential, getBearerTokenProvider } = require("@azure/identity");
    const { AzureOpenAI } = require("openai");
    
    // Set the Azure and AI Search values from environment variables
    const endpoint = process.env.AZURE_OPENAI_ENDPOINT || "Your endpoint";
    const searchEndpoint = process.env.AZURE_AI_SEARCH_ENDPOINT || "Your search endpoint";
    const searchIndex = process.env.AZURE_AI_SEARCH_INDEX || "Your search index";
    
    // keyless authentication    
    const credential = new DefaultAzureCredential();
    const scope = "https://cognitiveservices.azure.com/.default";
    const azureADTokenProvider = getBearerTokenProvider(credential, scope);
    
    // Required Azure OpenAI deployment name and API version
    const deploymentName = process.env.AZURE_OPENAI_DEPLOYMENT_NAME || "gpt-4";
    const apiVersion = process.env.OPENAI_API_VERSION || "2024-10-21";
    
    function getClient() {
      return new AzureOpenAI({
        endpoint,
        azureADTokenProvider,
        deployment: deploymentName,
        apiVersion,
      });
    }
    
    async function main() {
      const client = getClient();
    
      const messages = [
        { role: "user", content: "What are my available health plans?" },
      ];
    
      console.log(`Message: ${messages.map((m) => m.content).join("\n")}`);
    
      const events = await client.chat.completions.create({
        stream: true,
        messages: [
          {
            role: "user",
            content:
              "What's the most common feedback we received from our customers about the product?",
          },
        ],
        max_tokens: 128,
        model: "",
        data_sources: [
          {
            type: "azure_search",
            parameters: {
              endpoint: searchEndpoint,
              index_name: searchIndex,
              authentication: {
                type: "api_key",
                key: searchKey,
              },
            },
          },
        ],
      });
    
      let response = "";
      for await (const event of events) {
        for (const choice of event.choices) {
          const newText = choice.delta?.content;
          if (newText) {
            response += newText;
            // To see streaming results as they arrive, uncomment line below
            // console.log(newText);
          }
        }
      }
      console.log(response);
    }
    
    main().catch((err) => {
      console.error("The sample encountered an error:", err);
    });
    
  2. Aşağıdaki komutla Azure'da oturum açın:

    az login
    
  3. JavaScript dosyasını çalıştırın.

    node index.js
    

Çıktı

Message: What are my available health plans?
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.

Başvuru belgeleri | Kaynak kodu | Paket (npm) | Örnekleri

Önkoşullar

Microsoft Entra Id önkoşulları

Microsoft Entra Id ile önerilen anahtarsız kimlik doğrulaması için şunları yapmanız gerekir:

  • Microsoft Entra ID ile anahtarsız kimlik doğrulaması için kullanılan Azure CLI'yi yükleyin.
  • Rolü kullanıcı hesabınıza atayın Cognitive Services User . Azure portalında Erişim denetimi (IAM)>Rol ataması ekle altında rol atayabilirsiniz.

Azure AI Foundry portalını kullanarak verilerinizi ekleme

İpucu

Verilerinizde Azure OpenAI için gerekli kaynakları program aracılığıyla oluşturmak için Azure Geliştirici CLI'sini kullanabilirsiniz

Azure AI Foundry portalına gidin ve Azure OpenAI kaynağınıza erişimi olan kimlik bilgileriyle oturum açın.

  1. Proje oluştur'a tıklayarak bir Azure AI Foundry projesi oluşturabilir veya Azure AI Foundry Modellerinde Azure OpenAI'ye Odaklanmış kutucuğundaki düğmeye tıklayarak doğrudan devam edebilirsiniz.

    Azure AI Foundry portalı giriş sayfasının ekran görüntüsü.

  2. Sol bölmedeki Oyun Alanları'nın altında Sohbet'i seçin ve model dağıtımınızı seçin.

  3. Sohbet oyun alanındaVerilerinizi ekleyin'i ve ardından Veri kaynağı ekle'yi seçin

    Azure AI Foundry'deki sohbet oyun alanının ekran görüntüsü.

  4. Görüntülenen bölmede Veri kaynağı seç'in altında Dosyaları karşıya yükle (önizleme) öğesini seçin. Azure OpenAI'ın verilerinize erişmek ve verileri dizine eklemek için hem depolama kaynağına hem de arama kaynağına ihtiyacı vardır.

    İpucu

    1. Azure OpenAI'nin depolama hesabınıza erişmesi için Çıkış noktaları arası kaynak paylaşımını (CORS) açmanız gerekir. Azure Blob Depolama kaynağı için CORS henüz açık değilse CORS'yi aç'ı seçin.

    2. Azure AI Search kaynağınızı seçin ve bu kaynağı bağlamanın hesabınızda kullanıma neden olacağı onayını seçin. Ardından İleri'yi seçin.

    Azure AI Foundry portalında veri kaynağı seçme seçeneklerini gösteren ekran görüntüsü.

  5. Dosyaları karşıya yükle bölmesinde Dosyaya gözat'ı seçin ve önkoşullar bölümünden veya kendi verilerinizden indirdiğiniz dosyaları seçin. Ardından 'Dosyaları karşıya yükle'yi seçin. Ardından İleri'yi seçin.

  6. Veri yönetimi bölmesinde, dizininiz için anlamsal aramayı mı yoksa vektör aramasını mı etkinleştirebileceğinizi seçebilirsiniz.

    Önemli

    • Anlamsal arama ve vektör araması ek fiyatlandırmaya tabidir. Anlamsal aramayı veya vektör aramasını etkinleştirmek için Temel veya daha yüksek SKU'yu seçmeniz gerekir. Daha fazla bilgi için bkz. fiyatlandırma katmanı farkı ve hizmet sınırları .
    • Bilgi alma ve model yanıtının kalitesini artırmaya yardımcı olmak için şu veri kaynağı dilleri için anlamsal aramayı etkinleştirmenizi öneririz: İngilizce, Fransızca, İspanyolca, Portekizce, İtalyanca, Almanya, Çince (Zh), Japonca, Korece, Rusça ve Arapça.
  7. Girdiğiniz ayrıntıları gözden geçirin ve Kaydet ve kapat'ı seçin. Artık modelle sohbet edebilirsiniz ve yanıt oluşturmak için verilerinizden alınan bilgileri kullanır.

Kaynak bilgilerini alma

Uygulamanızın kimliğini Azure OpenAI kaynağınızla doğrulamak için aşağıdaki bilgileri almanız gerekir. Bu hızlı başlangıçta verilerinizi bir Azure blob depolama hesabına yüklediğiniz ve bir Azure AI Search dizini oluşturduğunuz varsayılır. Bkz. Azure AI Foundry portalını kullanarak verilerinizi ekleme.

Değişken adı Değer
AZURE_OPENAI_ENDPOINT Bu değer, Azure portalından Azure OpenAI kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Örnek uç nokta: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_NAME Modeli dağıtırken dağıtımınız için seçtiğiniz özel isme bu değer karşılık gelir. Bu değer, Azure portalındaki Kaynak Yönetimi>Dağıtımları altında bulunabilir.
AZURE_AI_SEARCH_ENDPOINT Bu değer, Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulunabilir.
AZURE_AI_SEARCH_INDEX Bu değer, verilerinizi depolamak için oluşturduğunuz dizinin adına karşılık gelir. Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulabilirsiniz.

Anahtarsız kimlik doğrulaması ve ortam değişkenlerini ayarlama hakkında daha fazla bilgi edinin.

Kurulum

  1. Yeni bir klasör use-data-quickstart oluşturun ve aşağıdaki komutu kullanarak hızlı başlangıç klasörüne gidin:

    mkdir use-data-quickstart && cd use-data-quickstart
    
  2. Aşağıdaki komutla package.json oluşturun:

    npm init -y
    
  3. package.json aşağıdaki komut ile ECMAScript olarak güncelleyin:

    npm pkg set type=module
    
  4. JavaScript için OpenAI istemci kitaplığını şu şekilde yükleyin:

    npm install openai
    
  5. Önerilen parolasız kimlik doğrulaması için:

    npm install @azure/identity
    

TypeScript kodunu ekleme

  1. index.ts Dosyayı aşağıdaki kodla oluşturun:

    import { AzureOpenAI } from "openai";
    import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
    import "@azure/openai/types";
    
    // Set the Azure and AI Search values from environment variables
    const endpoint = process.env.AZURE_OPENAI_ENDPOINT || "Your endpoint";
    const searchEndpoint = process.env.AZURE_AI_SEARCH_ENDPOINT || "Your search endpoint";
    const searchIndex = process.env.AZURE_AI_SEARCH_INDEX || "Your search index";
    
    // keyless authentication    
    const credential = new DefaultAzureCredential();
    const scope = "https://cognitiveservices.azure.com/.default";
    const azureADTokenProvider = getBearerTokenProvider(credential, scope);
    
    // Required Azure OpenAI deployment name and API version
    const deploymentName = process.env.AZURE_OPENAI_DEPLOYMENT_NAME || "gpt-4";
    const apiVersion = process.env.OPENAI_API_VERSION || "2024-07-01-preview";
    
    function getClient(): AzureOpenAI {
      return new AzureOpenAI({
        endpoint,
        azureADTokenProvider,
        deployment: deploymentName,
        apiVersion,
      });
    }
    
    async function main() {
      const client = getClient();
    
      const messages = [
        { role: "user", content: "What are my available health plans?" },
      ];
    
      console.log(`Message: ${messages.map((m) => m.content).join("\n")}`);
    
      const events = await client.chat.completions.create({
        stream: true,
        messages: [
          {
            role: "user",
            content:
              "What's the most common feedback we received from our customers about the product?",
          },
        ],
        max_tokens: 128,
        model: "",
        data_sources: [
          {
            type: "azure_search",
            parameters: {
              endpoint: searchEndpoint,
              index_name: searchIndex,
              authentication: {
                type: "api_key",
                key: searchKey,
              },
            },
          },
        ],
      });
    
      let response = "";
      for await (const event of events) {
        for (const choice of event.choices) {
          const newText = choice.delta?.content;
          if (newText) {
            response += newText;
            // To see streaming results as they arrive, uncomment line below
            // console.log(newText);
          }
        }
      }
      console.log(response);
    }
    
    main().catch((err) => {
      console.error("The sample encountered an error:", err);
    });
    
  2. tsconfig.json dosyasını oluşturup TypeScript kodunu dönüştürmek için ECMAScript için aşağıdaki kodu kopyalayın.

    {
        "compilerOptions": {
          "module": "NodeNext",
          "target": "ES2022", // Supports top-level await
          "moduleResolution": "NodeNext",
          "skipLibCheck": true, // Avoid type errors from node_modules
          "strict": true // Enable strict type-checking options
        },
        "include": ["*.ts"]
    }
    
  3. TypeScript'ten JavaScript'e dönüştürme.

    tsc
    
  4. Aşağıdaki komutla Azure'da oturum açın:

    az login
    
  5. Kodu aşağıdaki komutla çalıştırın:

    node index.js
    

Önemli

Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Kimlik bilgisi güvenliği hakkında daha fazla bilgi için bu güvenlik makalesine bakın.

Çıktı

Message: What are my available health plans?
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.

Önkoşullar

Aşağıdaki kaynaklar:

Referans | Kaynak kodu | Paket (pypi) | Örnekleri

Bu bağlantılar Python için OpenAI API'sine başvurur. Azure'a özgü OpenAI Python SDK'sı yoktur. OpenAI hizmetleriyle Azure OpenA arasında geçiş yapmayı öğrenin.

Azure AI Foundry portalını kullanarak verilerinizi ekleme

İpucu

Verilerinizde Azure OpenAI için gerekli kaynakları program aracılığıyla oluşturmak için Azure Geliştirici CLI'sini kullanabilirsiniz

Azure AI Foundry portalına gidin ve Azure OpenAI kaynağınıza erişimi olan kimlik bilgileriyle oturum açın.

  1. Proje oluştur'a tıklayarak bir Azure AI Foundry projesi oluşturabilir veya Azure AI Foundry Modellerinde Azure OpenAI'ye Odaklanmış kutucuğundaki düğmeye tıklayarak doğrudan devam edebilirsiniz.

    Azure AI Foundry portalı giriş sayfasının ekran görüntüsü.

  2. Sol bölmedeki Oyun Alanları'nın altında Sohbet'i seçin ve model dağıtımınızı seçin.

  3. Sohbet oyun alanındaVerilerinizi ekleyin'i ve ardından Veri kaynağı ekle'yi seçin

    Azure AI Foundry'deki sohbet oyun alanının ekran görüntüsü.

  4. Görüntülenen bölmede Veri kaynağı seç'in altında Dosyaları karşıya yükle (önizleme) öğesini seçin. Azure OpenAI'ın verilerinize erişmek ve verileri dizine eklemek için hem depolama kaynağına hem de arama kaynağına ihtiyacı vardır.

    İpucu

    1. Azure OpenAI'nin depolama hesabınıza erişmesi için Çıkış noktaları arası kaynak paylaşımını (CORS) açmanız gerekir. Azure Blob Depolama kaynağı için CORS henüz açık değilse CORS'yi aç'ı seçin.

    2. Azure AI Search kaynağınızı seçin ve bu kaynağı bağlamanın hesabınızda kullanıma neden olacağı onayını seçin. Ardından İleri'yi seçin.

    Azure AI Foundry portalında veri kaynağı seçme seçeneklerini gösteren ekran görüntüsü.

  5. Dosyaları karşıya yükle bölmesinde Dosyaya gözat'ı seçin ve önkoşullar bölümünden veya kendi verilerinizden indirdiğiniz dosyaları seçin. Ardından 'Dosyaları karşıya yükle'yi seçin. Ardından İleri'yi seçin.

  6. Veri yönetimi bölmesinde, dizininiz için anlamsal aramayı mı yoksa vektör aramasını mı etkinleştirebileceğinizi seçebilirsiniz.

    Önemli

    • Anlamsal arama ve vektör araması ek fiyatlandırmaya tabidir. Anlamsal aramayı veya vektör aramasını etkinleştirmek için Temel veya daha yüksek SKU'yu seçmeniz gerekir. Daha fazla bilgi için bkz. fiyatlandırma katmanı farkı ve hizmet sınırları .
    • Bilgi alma ve model yanıtının kalitesini artırmaya yardımcı olmak için şu veri kaynağı dilleri için anlamsal aramayı etkinleştirmenizi öneririz: İngilizce, Fransızca, İspanyolca, Portekizce, İtalyanca, Almanya, Çince (Zh), Japonca, Korece, Rusça ve Arapça.
  7. Girdiğiniz ayrıntıları gözden geçirin ve Kaydet ve kapat'ı seçin. Artık modelle sohbet edebilirsiniz ve yanıt oluşturmak için verilerinizden alınan bilgileri kullanır.

Kaynak bilgilerini alma

Uygulamanızın kimliğini Azure OpenAI kaynağınızla doğrulamak için aşağıdaki bilgileri almanız gerekir. Bu hızlı başlangıçta verilerinizi bir Azure blob depolama hesabına yüklediğiniz ve bir Azure AI Search dizini oluşturduğunuz varsayılır. Bkz. Azure AI Foundry portalını kullanarak verilerinizi ekleme.

Değişken adı Değer
AZURE_OPENAI_ENDPOINT Bu değer, Azure portalından Azure OpenAI kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Örnek uç nokta: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_NAME Modeli dağıtırken dağıtımınız için seçtiğiniz özel isme bu değer karşılık gelir. Bu değer, Azure portalındaki Kaynak Yönetimi>Dağıtımları altında bulunabilir.
AZURE_AI_SEARCH_ENDPOINT Bu değer, Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulunabilir.
AZURE_AI_SEARCH_INDEX Bu değer, verilerinizi depolamak için oluşturduğunuz dizinin adına karşılık gelir. Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulabilirsiniz.

Anahtarsız kimlik doğrulaması ve ortam değişkenlerini ayarlama hakkında daha fazla bilgi edinin.

Python ortamı oluşturma

  1. Projeniz için openai-python adlı yeni bir klasör ve main.py adlı yeni bir Python kod dosyası oluşturun. Bu dizine geçin:
mkdir openai-python
cd openai-python
  1. Aşağıdaki Python Kitaplıklarını yükleyin:
pip install openai
pip install python-dotenv

Python uygulamasını oluşturma

  1. Proje dizininden main.py dosyasını açın ve aşağıdaki kodu ekleyin:
import os
import openai
import dotenv

dotenv.load_dotenv()

endpoint = os.environ.get("AZURE_OPENAI_ENDPOINT")
api_key = os.environ.get("AZURE_OPENAI_API_KEY")
deployment = os.environ.get("AZURE_OPENAI_DEPLOYMENT_NAME")

client = openai.AzureOpenAI(
    azure_endpoint=endpoint,
    api_key=api_key,
    api_version="2024-10-21",
)

completion = client.chat.completions.create(
    model=deployment,
    messages=[
        {
            "role": "user",
            "content": "What are my available health plans?",
        },
    ],
    extra_body={
        "data_sources":[
            {
                "type": "azure_search",
                "parameters": {
                    "endpoint": os.environ["AZURE_AI_SEARCH_ENDPOINT"],
                    "index_name": os.environ["AZURE_AI_SEARCH_INDEX"],
                    "authentication": {
                        "type": "api_key",
                        "key": os.environ["AZURE_AI_SEARCH_API_KEY"],
                    }
                }
            }
        ],
    }
)

print(f"{completion.choices[0].message.role}: {completion.choices[0].message.content}")

Önemli

Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Kimlik bilgisi güvenliği hakkında daha fazla bilgi için bu güvenlik makalesine bakın.

  1. Şu kodu yürütün:
python main.py

Uygulama, yanıtı birçok senaryoda kullanıma uygun bir JSON biçiminde yazdırır. Hem sorgunuzun yanıtlarını hem de karşıya yüklediğiniz dosyalardan alıntıları içerir.

Önkoşullar

Aşağıdaki kaynaklar:

Azure AI Foundry portalını kullanarak verilerinizi ekleme

İpucu

Verilerinizde Azure OpenAI için gerekli kaynakları program aracılığıyla oluşturmak için Azure Geliştirici CLI'sini kullanabilirsiniz

Azure AI Foundry portalına gidin ve Azure OpenAI kaynağınıza erişimi olan kimlik bilgileriyle oturum açın.

  1. Proje oluştur'a tıklayarak bir Azure AI Foundry projesi oluşturabilir veya Azure AI Foundry Modellerinde Azure OpenAI'ye Odaklanmış kutucuğundaki düğmeye tıklayarak doğrudan devam edebilirsiniz.

    Azure AI Foundry portalı giriş sayfasının ekran görüntüsü.

  2. Sol bölmedeki Oyun Alanları'nın altında Sohbet'i seçin ve model dağıtımınızı seçin.

  3. Sohbet oyun alanındaVerilerinizi ekleyin'i ve ardından Veri kaynağı ekle'yi seçin

    Azure AI Foundry'deki sohbet oyun alanının ekran görüntüsü.

  4. Görüntülenen bölmede Veri kaynağı seç'in altında Dosyaları karşıya yükle (önizleme) öğesini seçin. Azure OpenAI'ın verilerinize erişmek ve verileri dizine eklemek için hem depolama kaynağına hem de arama kaynağına ihtiyacı vardır.

    İpucu

    1. Azure OpenAI'nin depolama hesabınıza erişmesi için Çıkış noktaları arası kaynak paylaşımını (CORS) açmanız gerekir. Azure Blob Depolama kaynağı için CORS henüz açık değilse CORS'yi aç'ı seçin.

    2. Azure AI Search kaynağınızı seçin ve bu kaynağı bağlamanın hesabınızda kullanıma neden olacağı onayını seçin. Ardından İleri'yi seçin.

    Azure AI Foundry portalında veri kaynağı seçme seçeneklerini gösteren ekran görüntüsü.

  5. Dosyaları karşıya yükle bölmesinde Dosyaya gözat'ı seçin ve önkoşullar bölümünden veya kendi verilerinizden indirdiğiniz dosyaları seçin. Ardından 'Dosyaları karşıya yükle'yi seçin. Ardından İleri'yi seçin.

  6. Veri yönetimi bölmesinde, dizininiz için anlamsal aramayı mı yoksa vektör aramasını mı etkinleştirebileceğinizi seçebilirsiniz.

    Önemli

    • Anlamsal arama ve vektör araması ek fiyatlandırmaya tabidir. Anlamsal aramayı veya vektör aramasını etkinleştirmek için Temel veya daha yüksek SKU'yu seçmeniz gerekir. Daha fazla bilgi için bkz. fiyatlandırma katmanı farkı ve hizmet sınırları .
    • Bilgi alma ve model yanıtının kalitesini artırmaya yardımcı olmak için şu veri kaynağı dilleri için anlamsal aramayı etkinleştirmenizi öneririz: İngilizce, Fransızca, İspanyolca, Portekizce, İtalyanca, Almanya, Çince (Zh), Japonca, Korece, Rusça ve Arapça.
  7. Girdiğiniz ayrıntıları gözden geçirin ve Kaydet ve kapat'ı seçin. Artık modelle sohbet edebilirsiniz ve yanıt oluşturmak için verilerinizden alınan bilgileri kullanır.

Kaynak bilgilerini alma

Uygulamanızın kimliğini Azure OpenAI kaynağınızla doğrulamak için aşağıdaki bilgileri almanız gerekir. Bu hızlı başlangıçta verilerinizi bir Azure blob depolama hesabına yüklediğiniz ve bir Azure AI Search dizini oluşturduğunuz varsayılır. Bkz. Azure AI Foundry portalını kullanarak verilerinizi ekleme.

Değişken adı Değer
AZURE_OPENAI_ENDPOINT Bu değer, Azure portalından Azure OpenAI kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Örnek uç nokta: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_NAME Modeli dağıtırken dağıtımınız için seçtiğiniz özel isme bu değer karşılık gelir. Bu değer, Azure portalındaki Kaynak Yönetimi>Dağıtımları altında bulunabilir.
AZURE_AI_SEARCH_ENDPOINT Bu değer, Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulunabilir.
AZURE_AI_SEARCH_INDEX Bu değer, verilerinizi depolamak için oluşturduğunuz dizinin adına karşılık gelir. Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulabilirsiniz.

Anahtarsız kimlik doğrulaması ve ortam değişkenlerini ayarlama hakkında daha fazla bilgi edinin.

Örnek PowerShell komutları

Azure OpenAI sohbet modelleri, konuşma olarak biçimlendirilmiş girişlerle çalışacak şekilde iyileştirilmiştir. messages değişkeni, konuşmada sistem, kullanıcı, araç ve asistan tarafından belirlenen farklı rollere sahip sözlüklerden oluşan bir dizi geçirir. değişkeni dataSources Azure Bilişsel Arama dizininize bağlanır ve Azure OpenAI modellerinin verilerinizi kullanarak yanıt vermesini sağlar.

Modelden bir yanıt tetikleyebilmek için yanıt vermenin yardımcının sırası olduğunu belirten bir kullanıcı iletisiyle bitirmelisiniz.

İpucu

Modelin yanıtını değiştirmek için kullanabileceğiniz temperature veya top_p gibi çeşitli parametreler vardır. Daha fazla bilgi için başvuru belgelerine bakın.

# Azure OpenAI metadata variables
   $openai = @{
       api_key     = $Env:AZURE_OPENAI_API_KEY
       api_base    = $Env:AZURE_OPENAI_ENDPOINT # your endpoint should look like the following https://YOUR_RESOURCE_NAME.openai.azure.com/
       api_version = '2023-07-01-preview' # this may change in the future
       name        = 'YOUR-DEPLOYMENT-NAME-HERE' #This will correspond to the custom name you chose for your deployment when you deployed a model.
   }

   $acs = @{
       search_endpoint     = 'YOUR ACS ENDPOINT' # your endpoint should look like the following https://YOUR_RESOURCE_NAME.search.windows.net/
       search_key    = 'YOUR-ACS-KEY-HERE' # or use the Get-Secret cmdlet to retrieve the value
       search_index = 'YOUR-INDEX-NAME-HERE' # the name of your ACS index
   }

   # Completion text
   $body = @{
    dataSources = @(
        @{
            type = 'AzureCognitiveSearch'
            parameters = @{
                    endpoint = $acs.search_endpoint
                    key = $acs.search_key
                    indexName = $acs.search_index
                }
        }
    )
    messages = @(
            @{
                role = 'user'
                content = 'What are my available health plans?'
            }
    )
   } | convertto-json -depth 5

   # Header for authentication
   $headers = [ordered]@{
       'api-key' = $openai.api_key
   }

   # Send a completion call to generate an answer
   $url = "$($openai.api_base)/openai/deployments/$($openai.name)/extensions/chat/completions?api-version=$($openai.api_version)"

   $response = Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Post -ContentType 'application/json'
   return $response.choices.messages[1].content

Örnek çıkış

The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.

Önemli

Üretim için Azure Key Vault ile PowerShell Gizli Dizi Yönetimi gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Kimlik bilgisi güvenliği hakkında daha fazla bilgi için bu güvenlik makalesine bakın.

Web uygulaması kullanarak modelinizle sohbet etme

Verilerinizi kullanan Azure OpenAI modeliyle sohbet etmeye başlamak için, Azure AI Foundry portalını veya GitHub'da sağladığımız örnek kodu kullanarak bir web uygulaması dağıtabilirsiniz. Bu uygulama Azure app service kullanarak dağıtılır ve sorgu göndermek için bir kullanıcı arabirimi sağlar. Bu uygulama, verilerinizi kullanan Azure OpenAI modelleriyle veya verilerinizi kullanmayan modellerle kullanılabilir. Gereksinimler, kurulum ve dağıtım yönergeleri için depodaki benioku dosyasına bakın. İsteğe bağlı olarak, kaynak kodda değişiklik yaparak web uygulamasının ön uç ve arka uç mantığını özelleştirebilirsiniz.

Önkoşullar

Aşağıdaki kaynaklar:

Referans | Kaynak kodu | Paket (Go) | Örnekleri

Azure AI Foundry portalını kullanarak verilerinizi ekleme

İpucu

Verilerinizde Azure OpenAI için gerekli kaynakları program aracılığıyla oluşturmak için Azure Geliştirici CLI'sini kullanabilirsiniz

Azure AI Foundry portalına gidin ve Azure OpenAI kaynağınıza erişimi olan kimlik bilgileriyle oturum açın.

  1. Proje oluştur'a tıklayarak bir Azure AI Foundry projesi oluşturabilir veya Azure AI Foundry Modellerinde Azure OpenAI'ye Odaklanmış kutucuğundaki düğmeye tıklayarak doğrudan devam edebilirsiniz.

    Azure AI Foundry portalı giriş sayfasının ekran görüntüsü.

  2. Sol bölmedeki Oyun Alanları'nın altında Sohbet'i seçin ve model dağıtımınızı seçin.

  3. Sohbet oyun alanındaVerilerinizi ekleyin'i ve ardından Veri kaynağı ekle'yi seçin

    Azure AI Foundry'deki sohbet oyun alanının ekran görüntüsü.

  4. Görüntülenen bölmede Veri kaynağı seç'in altında Dosyaları karşıya yükle (önizleme) öğesini seçin. Azure OpenAI'ın verilerinize erişmek ve verileri dizine eklemek için hem depolama kaynağına hem de arama kaynağına ihtiyacı vardır.

    İpucu

    1. Azure OpenAI'nin depolama hesabınıza erişmesi için Çıkış noktaları arası kaynak paylaşımını (CORS) açmanız gerekir. Azure Blob Depolama kaynağı için CORS henüz açık değilse CORS'yi aç'ı seçin.

    2. Azure AI Search kaynağınızı seçin ve bu kaynağı bağlamanın hesabınızda kullanıma neden olacağı onayını seçin. Ardından İleri'yi seçin.

    Azure AI Foundry portalında veri kaynağı seçme seçeneklerini gösteren ekran görüntüsü.

  5. Dosyaları karşıya yükle bölmesinde Dosyaya gözat'ı seçin ve önkoşullar bölümünden veya kendi verilerinizden indirdiğiniz dosyaları seçin. Ardından 'Dosyaları karşıya yükle'yi seçin. Ardından İleri'yi seçin.

  6. Veri yönetimi bölmesinde, dizininiz için anlamsal aramayı mı yoksa vektör aramasını mı etkinleştirebileceğinizi seçebilirsiniz.

    Önemli

    • Anlamsal arama ve vektör araması ek fiyatlandırmaya tabidir. Anlamsal aramayı veya vektör aramasını etkinleştirmek için Temel veya daha yüksek SKU'yu seçmeniz gerekir. Daha fazla bilgi için bkz. fiyatlandırma katmanı farkı ve hizmet sınırları .
    • Bilgi alma ve model yanıtının kalitesini artırmaya yardımcı olmak için şu veri kaynağı dilleri için anlamsal aramayı etkinleştirmenizi öneririz: İngilizce, Fransızca, İspanyolca, Portekizce, İtalyanca, Almanya, Çince (Zh), Japonca, Korece, Rusça ve Arapça.
  7. Girdiğiniz ayrıntıları gözden geçirin ve Kaydet ve kapat'ı seçin. Artık modelle sohbet edebilirsiniz ve yanıt oluşturmak için verilerinizden alınan bilgileri kullanır.

Microsoft Entra Id önkoşulları

Microsoft Entra Id ile önerilen anahtarsız kimlik doğrulaması için şunları yapmanız gerekir:

  • Microsoft Entra ID ile anahtarsız kimlik doğrulaması için kullanılan Azure CLI'yi yükleyin.
  • Rolü kullanıcı hesabınıza atayın Cognitive Services User . Azure portalında Erişim denetimi (IAM)>Rol ataması ekle altında rol atayabilirsiniz.

Kurulum

  1. Yeni bir klasör dall-e-quickstart oluşturun ve aşağıdaki komutu kullanarak hızlı başlangıç klasörüne gidin:

     mkdir dall-e-quickstart && cd dall-e-quickstart
    
  2. Microsoft Entra ID ile önerilen anahtarsız kimlik doğrulaması için aşağıdaki komutu kullanarak Azure'da oturum açın:

     az login
    

Kaynak bilgilerini alma

Uygulamanızın kimliğini Azure OpenAI kaynağınızla doğrulamak için aşağıdaki bilgileri almanız gerekir. Bu hızlı başlangıçta verilerinizi bir Azure blob depolama hesabına yüklediğiniz ve bir Azure AI Search dizini oluşturduğunuz varsayılır. Bkz. Azure AI Foundry portalını kullanarak verilerinizi ekleme.

Değişken adı Değer
AZURE_OPENAI_ENDPOINT Bu değer, Azure portalından Azure OpenAI kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Örnek uç nokta: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_NAME Modeli dağıtırken dağıtımınız için seçtiğiniz özel isme bu değer karşılık gelir. Bu değer, Azure portalındaki Kaynak Yönetimi>Dağıtımları altında bulunabilir.
AZURE_AI_SEARCH_ENDPOINT Bu değer, Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulunabilir.
AZURE_AI_SEARCH_INDEX Bu değer, verilerinizi depolamak için oluşturduğunuz dizinin adına karşılık gelir. Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulabilirsiniz.

Anahtarsız kimlik doğrulaması ve ortam değişkenlerini ayarlama hakkında daha fazla bilgi edinin.

Hızlı başlangıcı çalıştırma

Bu hızlı başlangıçtaki örnek kod, önerilen anahtarsız kimlik doğrulaması için Microsoft Entra Kimliğini kullanır. API anahtarı kullanmayı tercih ediyorsanız, NewDefaultAzureCredential uygulamasını NewKeyCredential ile değiştirebilirsiniz.

azureOpenAIEndpoint := os.Getenv("AZURE_OPENAI_ENDPOINT")
credential, err := azidentity.NewDefaultAzureCredential(nil)
client, err := azopenai.NewClient(azureOpenAIEndpoint, credential, nil)

Örneği çalıştırmak için:

  1. quickstart.go adlı yeni bir dosya oluşturun. Aşağıdaki kodu quickstart.go dosyasına kopyalayın.

    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() {
     azureOpenAIEndpoint := os.Getenv("AZURE_OPENAI_ENDPOINT")
     credential, err := azidentity.NewDefaultAzureCredential(nil)
     client, err := azopenai.NewClient(azureOpenAIEndpoint, credential, nil)
    
     modelDeploymentID := os.Getenv("AZURE_OPENAI_DEPLOYMENT_NAME")
    
     // Azure AI Search configuration
     searchIndex := os.Getenv("AZURE_AI_SEARCH_INDEX")
     searchEndpoint := os.Getenv("AZURE_AI_SEARCH_ENDPOINT")
     searchAPIKey := os.Getenv("AZURE_AI_SEARCH_API_KEY")
    
     if modelDeploymentID == "" || azureOpenAIEndpoint == "" || searchIndex == "" || searchEndpoint == "" || searchAPIKey == "" {
     	fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n")
     	return
     }
    
     client, err := azopenai.NewClientWithKeyCredential(azureOpenAIEndpoint, credential, nil)
    
     if err != nil {
     	// Implement application specific error handling logic.
     	log.Printf("ERROR: %s", err)
     	return
     }
    
     resp, err := client.GetChatCompletions(context.TODO(), azopenai.ChatCompletionsOptions{
     	Messages: []azopenai.ChatRequestMessageClassification{
     		&azopenai.ChatRequestUserMessage{Content: azopenai.NewChatRequestUserMessageContent("What are my available health plans?")},
     	},
     	MaxTokens: to.Ptr[int32](512),
     	AzureExtensionsOptions: []azopenai.AzureChatExtensionConfigurationClassification{
     		&azopenai.AzureSearchChatExtensionConfiguration{
     			// This allows Azure OpenAI to use an Azure AI Search index.
     			// Answers are based on the model's pretrained knowledge
     			// and the latest information available in the designated data source. 
     			Parameters: &azopenai.AzureSearchChatExtensionParameters{
     				Endpoint:  &searchEndpoint,
     				IndexName: &searchIndex,
     				Authentication: &azopenai.OnYourDataAPIKeyAuthenticationOptions{
     					Key: &searchAPIKey,
     				},
     			},
     		},
     	},
     	DeploymentName: &modelDeploymentID,
     }, nil)
    
     if err != nil {
     	// Implement application specific error handling logic.
     	log.Printf("ERROR: %s", err)
     	return
     }
    
     fmt.Fprintf(os.Stderr, "Extensions Context Role: %s\nExtensions Context (length): %d\n",
     	*resp.Choices[0].Message.Role,
     	len(*resp.Choices[0].Message.Content))
    
     fmt.Fprintf(os.Stderr, "ChatRole: %s\nChat content: %s\n",
     	*resp.Choices[0].Message.Role,
     	*resp.Choices[0].Message.Content,
     )
    }
    
  2. Yeni bir Go modülü oluşturmak için aşağıdaki komutu çalıştırın:

     go mod init quickstart.go
    
  3. Gerekli bağımlılıkları yüklemek için komutunu çalıştırın go mod tidy :

     go mod tidy
    
  4. Örneği çalıştırmak için aşağıdaki komutu çalıştırın:

     go run quickstart.go
    

Uygulama, hem sorgunuzun yanıtlarını hem de karşıya yüklediğiniz dosyalardan alıntıları içeren yanıtı yazdırır.

Önkoşullar

Aşağıdaki kaynaklar:

Azure AI Foundry portalını kullanarak verilerinizi ekleme

İpucu

Verilerinizde Azure OpenAI için gerekli kaynakları program aracılığıyla oluşturmak için Azure Geliştirici CLI'sini kullanabilirsiniz

Azure AI Foundry portalına gidin ve Azure OpenAI kaynağınıza erişimi olan kimlik bilgileriyle oturum açın.

  1. Proje oluştur'a tıklayarak bir Azure AI Foundry projesi oluşturabilir veya Azure AI Foundry Modellerinde Azure OpenAI'ye Odaklanmış kutucuğundaki düğmeye tıklayarak doğrudan devam edebilirsiniz.

    Azure AI Foundry portalı giriş sayfasının ekran görüntüsü.

  2. Sol bölmedeki Oyun Alanları'nın altında Sohbet'i seçin ve model dağıtımınızı seçin.

  3. Sohbet oyun alanındaVerilerinizi ekleyin'i ve ardından Veri kaynağı ekle'yi seçin

    Azure AI Foundry'deki sohbet oyun alanının ekran görüntüsü.

  4. Görüntülenen bölmede Veri kaynağı seç'in altında Dosyaları karşıya yükle (önizleme) öğesini seçin. Azure OpenAI'ın verilerinize erişmek ve verileri dizine eklemek için hem depolama kaynağına hem de arama kaynağına ihtiyacı vardır.

    İpucu

    1. Azure OpenAI'nin depolama hesabınıza erişmesi için Çıkış noktaları arası kaynak paylaşımını (CORS) açmanız gerekir. Azure Blob Depolama kaynağı için CORS henüz açık değilse CORS'yi aç'ı seçin.

    2. Azure AI Search kaynağınızı seçin ve bu kaynağı bağlamanın hesabınızda kullanıma neden olacağı onayını seçin. Ardından İleri'yi seçin.

    Azure AI Foundry portalında veri kaynağı seçme seçeneklerini gösteren ekran görüntüsü.

  5. Dosyaları karşıya yükle bölmesinde Dosyaya gözat'ı seçin ve önkoşullar bölümünden veya kendi verilerinizden indirdiğiniz dosyaları seçin. Ardından 'Dosyaları karşıya yükle'yi seçin. Ardından İleri'yi seçin.

  6. Veri yönetimi bölmesinde, dizininiz için anlamsal aramayı mı yoksa vektör aramasını mı etkinleştirebileceğinizi seçebilirsiniz.

    Önemli

    • Anlamsal arama ve vektör araması ek fiyatlandırmaya tabidir. Anlamsal aramayı veya vektör aramasını etkinleştirmek için Temel veya daha yüksek SKU'yu seçmeniz gerekir. Daha fazla bilgi için bkz. fiyatlandırma katmanı farkı ve hizmet sınırları .
    • Bilgi alma ve model yanıtının kalitesini artırmaya yardımcı olmak için şu veri kaynağı dilleri için anlamsal aramayı etkinleştirmenizi öneririz: İngilizce, Fransızca, İspanyolca, Portekizce, İtalyanca, Almanya, Çince (Zh), Japonca, Korece, Rusça ve Arapça.
  7. Girdiğiniz ayrıntıları gözden geçirin ve Kaydet ve kapat'ı seçin. Artık modelle sohbet edebilirsiniz ve yanıt oluşturmak için verilerinizden alınan bilgileri kullanır.

Kaynak bilgilerini alma

Uygulamanızın kimliğini Azure OpenAI kaynağınızla doğrulamak için aşağıdaki bilgileri almanız gerekir. Bu hızlı başlangıçta verilerinizi bir Azure blob depolama hesabına yüklediğiniz ve bir Azure AI Search dizini oluşturduğunuz varsayılır. Bkz. Azure AI Foundry portalını kullanarak verilerinizi ekleme.

Değişken adı Değer
AZURE_OPENAI_ENDPOINT Bu değer, Azure portalından Azure OpenAI kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Örnek uç nokta: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_NAME Modeli dağıtırken dağıtımınız için seçtiğiniz özel isme bu değer karşılık gelir. Bu değer, Azure portalındaki Kaynak Yönetimi>Dağıtımları altında bulunabilir.
AZURE_AI_SEARCH_ENDPOINT Bu değer, Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulunabilir.
AZURE_AI_SEARCH_INDEX Bu değer, verilerinizi depolamak için oluşturduğunuz dizinin adına karşılık gelir. Azure portalından Azure AI Search kaynağınızı incelerken Genel Bakış bölümünde bulabilirsiniz.

Anahtarsız kimlik doğrulaması ve ortam değişkenlerini ayarlama hakkında daha fazla bilgi edinin.

Örnek cURL komutları

Azure OpenAI sohbet modelleri, konuşma olarak biçimlendirilmiş girişlerle çalışacak şekilde iyileştirilmiştir. messages değişkeni, konuşmada sistem, kullanıcı, araç ve asistan tarafından belirlenen farklı rollere sahip sözlüklerden oluşan bir dizi geçirir. dataSources Değişkeni Azure AI Search dizininize bağlanır ve Azure OpenAI modellerinin verilerinizi kullanarak yanıt vermesini sağlar.

Modelden bir yanıt tetikleyebilmek için yanıt vermenin yardımcının sırası olduğunu belirten bir kullanıcı iletisiyle bitirmelisiniz.

İpucu

Modelin yanıtını değiştirmek için kullanabileceğiniz temperature veya top_p gibi çeşitli parametreler vardır. Daha fazla bilgi için başvuru belgelerine bakın.

curl -i -X POST $AZURE_OPENAI_ENDPOINT/openai/deployments/$AZURE_OPENAI_DEPLOYMENT_NAME/chat/completions?api-version=2024-10-21 \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d \
'
{
    "data_sources": [
        {
            "type": "azure_search",
            "parameters": {
                "endpoint": "'$AZURE_AI_SEARCH_ENDPOINT'",
                "index_name": "'$AZURE_AI_SEARCH_INDEX'",
                "authentication": {
                    "type": "api_key",
                    "key": "'$AZURE_AI_SEARCH_API_KEY'"
                }
            }
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": "What are my available health plans?"
        }
    ]
}
'

Örnek çıkış

{
    "id": "12345678-1a2b-3c4e5f-a123-12345678abcd",
    "model": "gpt-4",
    "created": 1709835345,
    "object": "extensions.chat.completion",
    "choices": [
        {
            "index": 0,
            "finish_reason": "stop",
            "message": {
                "role": "assistant",
                "content": "The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans. [doc1].",
                "end_turn": true,
                "context": {
                    "citations": [
                        {
                            "content": "...",
                            "title": "...",
                            "url": "https://mysearch.blob.core.windows.net/xyz/001.txt",
                            "filepath": "001.txt",
                            "chunk_id": "0"
                        }
                    ],
                    "intent": "[\"Available health plans\"]"
                }
            }
        }
    ],
    "usage": {
        "prompt_tokens": 3779,
        "completion_tokens": 105,
        "total_tokens": 3884
    },
    "system_fingerprint": "fp_65792305e4"
}

Web uygulaması kullanarak modelinizle sohbet etme

Verilerinizi kullanan Azure OpenAI modeliyle sohbet etmeye başlamak için, Azure AI Foundry portalını veya GitHub'da sağladığımız örnek kodu kullanarak bir web uygulaması dağıtabilirsiniz. Bu uygulama Azure app service kullanarak dağıtılır ve sorgu göndermek için bir kullanıcı arabirimi sağlar. Bu uygulama, verilerinizi kullanan Azure OpenAI modelleriyle veya verilerinizi kullanmayan modellerle kullanılabilir. Gereksinimler, kurulum ve dağıtım yönergeleri için depodaki benioku dosyasına bakın. İsteğe bağlı olarak, kaynak kodda değişiklik yaparak web uygulamasının ön uç ve arka uç mantığını özelleştirebilirsiniz.

Kaynakları temizleme

Azure OpenAI veya Azure AI Search kaynağını temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar