Hızlı Başlangıç: özel soru yanıtlama

Not

Verilerinizde Azure Open AI, Özel Soru Yanıtlama'ya benzer sonuçlar elde etmek için büyük dil modellerini (LLM) kullanır. Mevcut bir Özel Soru Yanıtlama projesini Azure Open AI On Your Data'ya bağlamak istiyorsanız lütfen kılavuzumuzu inceleyin.

Not

İş yüklerinizi Soru-Cevap Oluşturma'dan geçirmek mi istiyorsunuz? Özellik karşılaştırmaları ve geçiş adımları hakkında bilgi için geçiş kılavuzumuza bakın.

İstemci kitaplığını yanıtlayan özel soruyu kullanmaya başlayın. Paketi yüklemek ve temel görevler için örnek kodu denemek için bu adımları izleyin.

SSS'ler veya ürün kılavuzları gibi kendi içeriğinizden projeyi yanıtlayan özel bir soru oluşturabilirsiniz. Bu makale, soruları yanıtlamak için ürün kılavuzundan proje yanıtlayan özel bir soru oluşturma örneği içerir.

Önkoşullar

İlk özel sorunuzu yanıtlama projenizi oluşturma

  1. Azure kimlik bilgilerinizle Language Studio'da oturum açın.

  2. Aşağı kaydırarak Soruları yanıtla bölümüne gelin ve Özel soru yanıtlamayı aç'ı seçin.

    Özel soru yanıtlamayı açma

  3. Kaynağınız henüz Azure Search'e bağlı değilse Azure Search'e Bağlan seçin. Bu işlem, Azure portalında kaynağınızın Özellikler bölmesine yeni bir tarayıcı sekmesi açar.

    Azure Search'e Bağlan

  4. Özel soru yanıtlamayı etkinleştir'i seçin, bağlanılacak Azure Search kaynağını seçin ve ardından Uygula'yı seçin.

    Özel soru yanıtlamayı etkinleştirme

  5. Language Studio sekmesine dönün. Değişikliği kaynağınıza kaydetmek için bu sayfayı yenilemeniz gerekebilir. Yeni proje oluştur'u seçin.

  6. Bu kaynakta oluşturulan tüm projeler için dil ayarlamak istiyorum seçeneğini belirleyin ve İngilizce> İleri'yi seçin.>

  7. Örnek proje proje adını, ilk sorumu yanıtlayan projemin açıklamasını girin ve varsayılan yanıtı Yanıt bulunamadı ayarıyla bırakın.

  8. Seçimlerinizi gözden geçirin ve Proje oluştur'u seçin

  9. Kaynakları yönet sayfasında Kaynak>URL'leri ekle'yi seçin.

  10. Url ekle'yi seçin, aşağıdaki değerleri girin ve ardından Tümünü ekle'yi seçin:

    URL Adı URL Değeri
    Surface Book Kullanıcı Kılavuzu https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf

    Ayıklama işleminin belgeyi okuması ve soruları ve yanıtları tanımlaması birkaç dakika sürer.

    Kaynağı başarıyla ekledikten sonra, daha fazla özel soru yanıt kümesi eklemek için kaynak içeriğini düzenleyebilirsiniz.

Projenizi test etme

  1. Kaynağınızın bağlantısını seçtiğinizde proje düzenleme sayfası açılır.

  2. Menü çubuğundan > Test et'i seçin Surface book'umu ayarlamak Nasıl yaparım? soruyu girin. Otomatik olarak tanımlanan ve kaynak URL'nizden ayıklanan soru yanıt çiftlerine göre bir yanıt oluşturulur:

    Test sorusu sohbet arabirimi

    Kısa yanıt yanıtı ekle kutusunu işaretlerseniz, soru sorduğunuzda test bölmesindeki yanıt bölümüyle birlikte varsa kesin bir yanıt da görürsünüz.

  3. Yanıtı daha ayrıntılı bir şekilde incelemek için Inspect (Denetle) öğesini seçin. Test penceresi, projenizi dağıtmadan önce projenizdeki değişiklikleri test etmek için kullanılır.

    Güvenilirlik aralığına bakın

    İncele arabiriminden, bu yanıtın soruyu yanıtlayıp belirli bir soru ile yanıt yanıt çiftini doğrudan düzenleyebileceğine ilişkin güvenilirlik düzeyini görebilirsiniz.

Projenizi dağıtma

  1. Projeyi dağıt simgesini seçerek projeyi dağıt menüsüne girin.

    Projeyi dağıtma

    Bir projeyi dağıttığınızda, projenizin içeriği dizinden test Azure Search'teki bir prod dizine taşınır.

  2. Dağıt'ı> seçin ve sorulduğunda yeniden Dağıt'ı seçin.

    Başarılı dağıtım

    Projeniz başarıyla dağıtıldı. Sorularınızı yanıtlamak için kendi özel uygulamanızda veya botta soruları yanıtlamak için uç noktayı kullanabilirsiniz.

Önkoşullar

  • cURL'nin geçerli sürümü. Hızlı başlangıçlarda cURL belgelerinde belirtilen çeşitli komut satırı anahtarları kullanılır.
  • Azure aboneliği - Ücretsiz olarak oluşturun
  • Özel soru yanıtlama, BIR API anahtarı ve uç noktası oluşturmak için özel soru yanıtlama özelliğinin etkinleştirildiği bir Dil kaynağı gerektirir.
    • Dil kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. API'ye bağlanmak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştırın.
  • Azure CLI ile dil kaynağı oluşturmak için aşağıdaki ek özellikleri sağlayın:--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Sorguya alınacak mevcut bir proje. Bir proje ayarlamadıysanız, Language Studio hızlı başlangıcındaki yönergeleri izleyebilirsiniz. Veya veri kaynağı olarak bu Surface Kullanıcı Kılavuzu URL'sini kullanan bir proje ekleyin.

Ayarlama

Ortam değişkenlerini oluşturma

API istekleri göndermek için uygulamanızın kimliği doğrulanmalıdır. Üretim için kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Bu örnekte, kimlik bilgilerinizi uygulamayı çalıştıran yerel makinedeki ortam değişkenlerine yazacaksınız.

İpucu

Anahtarı doğrudan kodunuz içinde eklemeyin ve asla herkese açık olarak göndermeyin. Azure Key Vault gibi daha fazla kimlik doğrulama seçeneği için Azure AI hizmetleri güvenlik makalesine bakın.

Dil kaynak anahtarınızın ortam değişkenini ayarlamak için bir konsol penceresi açın ve işletim sisteminiz ve geliştirme ortamınıza yönelik yönergeleri izleyin.

  1. Ortam değişkenini LANGUAGE_KEY ayarlamak için değerini kaynağınızın anahtarlarından biriyle değiştirin your-key .
  2. Ortam değişkenini LANGUAGE_ENDPOINT ayarlamak için değerini kaynağınızın uç noktasıyla değiştirin your-endpoint .
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Not

Yalnızca geçerli çalışan konsoldaki ortam değişkenlerine erişmeniz gerekiyorsa, ortam değişkenini yerine setxile set ayarlayabilirsiniz.

Ortam değişkenlerini ekledikten sonra, konsol penceresi de dahil olmak üzere ortam değişkenlerini okuması gereken tüm çalışan programları yeniden başlatmanız gerekebilir. Örneğin, düzenleyici olarak Visual Studio kullanıyorsanız, örneği çalıştırmadan önce Visual Studio'yu yeniden başlatın.

Projeyi sorgulama

Projeden yanıt oluşturma

REST API'leri ve cURL ile projeyi yanıtlayan özel bir soruyu sorgulamak için aşağıdaki bilgilere ihtiyacınız vardır:

Değişken adı Değer
Endpoint Bu değer, Azure portal kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Alternatif olarak, Language Studio'da>projeyi>dağıtma Tahmin URL'sini alma sorusuna yanıt olarak>değerini bulabilirsiniz. Örnek uç nokta: https://southcentralus.api.cognitive.microsoft.com/
API-Key Bu değer, Azure portal kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Key1 veya Key2 kullanabilirsiniz. Her zaman iki geçerli anahtara sahip olmak her zaman sıfır kapalı kalma süresiyle güvenli anahtar döndürme için. Alternatif olarak, Language Studio'da>projeyi>dağıtma Tahmin URL'sini alma sorusuna yanıt olarak>değerini bulabilirsiniz. Anahtar değeri örnek isteğin bir parçasıdır.
Project Projenizi yanıtlayan özel sorunuzun adı.
Deployment İki olası değer vardır: test, ve production. production, Projeyi dağıtın sorusunu yanıtlamak için Language Studio'dan >projenizi dağıttığınıza>bağlıdır.

cURL komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınız, kaynak anahtarınız ve JSON değerlerinizle ve JSON boyutuyla düzenleyin.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
  "question": "How much battery life do I have left?"
  }'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com/language/:query-knowledgebases?projectName={YOUR_PROJECT_NAME}&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'

Yukarıdaki kodu çalıştırdığınızda, önkoşullardan veri kaynağını kullanıyorsanız aşağıdaki gibi görünen bir yanıt alırsınız:

{
"answers": [
    {
      "questions": [
        "Check battery level"
      ],
      "answer": "If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.",
      "confidenceScore": 0.9185,
      "id": 101,
      "source": "https://support.microsoft.com/en-us/surface/how-to-use-your-surface-pen-8a403519-cd1f-15b2-c9df-faa5aa924e98",
      "metadata": {},
      "dialog": {
        "isContextOnly": false,
        "prompts": []
      }
    }
  ]
}

confidenceScore 0 ile 1 arasında bir değer döndürür. Bunu yüzde olarak düşünebilirsiniz ve 100 ile çarpabilirsiniz, bu nedenle 0,9185 güvenilirlik puanı, özel soru yanıtlamanın projeye göre sorunun doğru yanıtı olduğundan %91,85 emin olduğu anlamına gelir.

Güvenilirlik puanının belirli bir eşiğin altına düştüğü yanıtları dışlamak istiyorsanız parametresini confidenceScoreThreshold ekleyebilirsiniz.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
  "question": "How much battery life do I have left?",
  "confidenceScoreThreshold": "0.95",
  }'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com//language/:query-knowledgebases?projectName=Sample-project&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'

Kodun önceki yürütmesinden güvenilirlik puanımızın şu olduğunu bildiğimiz için.95: .9185 eşiğin olarak ayarlanması varsayılan yanıtın döndürülmesine neden olur.

{
  "answers": [
    {
      "questions": [],
      "answer": "No good match found in KB",
      "confidenceScore": 0.0,
      "id": -1,
      "metadata": {}
    }
  ]
}

Proje olmadan metin sorgulama

Ayrıca, aracılığıyla query-textçağrılan REST API'yi yanıtlayan önceden oluşturulmuş özel soruyla proje olmadan özel soru yanıtlamayı da kullanabilirsiniz. Bu durumda, hem bir soruyla hem de istek gönderildiğinde yanıt aramak istediğiniz ilişkili metin kayıtlarıyla yanıtlayan bir soru sağlarsınız.

Bu örnekte, yalnızca ve ENDPOINTdeğişkenlerini API KEY değiştirmeniz gerekir.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question":"How long does it takes to charge a surface?",
"records":[
{"id":"doc1","text":"Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you\u0027re using your Surface for power-intensive activities like gaming or video streaming while you\u0027re charging it"},
{"id":"doc2","text":"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."}],
"language":"en",
"stringIndexType":"Utf16CodeUnit"
}'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com/language/:query-text?&api-version=2021-10-01'

Bu örnek şunun sonucunu döndürür:

{  
"answers": [
    {
      "answer": "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
      "confidenceScore": 0.9118788838386536,
      "id": "doc1",
      "answerSpan": {
        "text": "two to four hours",
        "confidenceScore": 0.9850527,
        "offset": 27,
        "length": 18
      },
      "offset": 0,
      "length": 243
    },
    {
      "answer": "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
      "confidenceScore": 0.052793052047491074,
      "id": "doc1",
      "answerSpan": {
        "text": "longer",
        "confidenceScore": 0.6694634,
        "offset": 11,
        "length": 7
      },
      "offset": 109,
      "length": 134
    },
    {
      "answer": "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
      "confidenceScore": 0.017600709572434425,
      "id": "doc2",
      "answerSpan": {
        "text": "USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging",
        "confidenceScore": 0.1544854,
        "offset": 15,
        "length": 165
      },
      "offset": 0,
      "length": 280
    }
  ]
}

.NET için istemci kitaplığını yanıtlayan özel soru için şu hızlı başlangıcı kullanın:

  • Bir projeden yanıt alın.
  • Sorunuzla birlikte gönderdiğiniz metin gövdesinden bir yanıt alın.
  • Sorunuza yanıt olarak güvenilirlik puanını alın.

Başvuru belgeleri | Paketi (NuGet) | Ek örnekler | Kitaplık kaynak kodu

Önkoşullar

  • Azure aboneliği - Ücretsiz olarak oluşturun
  • Visual Studio IDE veya .NET Core'un geçerli sürümü.
  • Özel soru yanıtlama, BIR API anahtarı ve uç noktası oluşturmak için özel soru yanıtlama özelliğinin etkinleştirildiği bir Dil kaynağı gerektirir.
    • Dil kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. API'ye bağlanmak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştırın.
  • Azure CLI ile dil kaynağı oluşturmak için aşağıdaki ek özellikleri sağlayın:--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Sorguya alınacak mevcut bir proje. Bir proje ayarlamadıysanız, Language Studio hızlı başlangıcındaki yönergeleri izleyebilirsiniz. Veya veri kaynağı olarak bu Surface Kullanıcı Kılavuzu URL'sini kullanan bir proje ekleyin.

Ayarlama

Ortam değişkenlerini oluşturma

API istekleri göndermek için uygulamanızın kimliği doğrulanmalıdır. Üretim için kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Bu örnekte, kimlik bilgilerinizi uygulamayı çalıştıran yerel makinedeki ortam değişkenlerine yazacaksınız.

İpucu

Anahtarı doğrudan kodunuz içinde eklemeyin ve asla herkese açık olarak göndermeyin. Azure Key Vault gibi daha fazla kimlik doğrulama seçeneği için Azure AI hizmetleri güvenlik makalesine bakın.

Dil kaynak anahtarınızın ortam değişkenini ayarlamak için bir konsol penceresi açın ve işletim sisteminiz ve geliştirme ortamınıza yönelik yönergeleri izleyin.

  1. Ortam değişkenini LANGUAGE_KEY ayarlamak için değerini kaynağınızın anahtarlarından biriyle değiştirin your-key .
  2. Ortam değişkenini LANGUAGE_ENDPOINT ayarlamak için değerini kaynağınızın uç noktasıyla değiştirin your-endpoint .
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Not

Yalnızca geçerli çalışan konsoldaki ortam değişkenlerine erişmeniz gerekiyorsa, ortam değişkenini yerine setxile set ayarlayabilirsiniz.

Ortam değişkenlerini ekledikten sonra, konsol penceresi de dahil olmak üzere ortam değişkenlerini okuması gereken tüm çalışan programları yeniden başlatmanız gerekebilir. Örneğin, düzenleyici olarak Visual Studio kullanıyorsanız, örneği çalıştırmadan önce Visual Studio'yu yeniden başlatın.

CLI

Bir konsol penceresinde (cmd, PowerShell veya Bash gibi), adlı question-answering-quickstartyeni bir konsol uygulaması oluşturmak için komutunu kullanındotnet new. Bu komut, tek bir kaynak dosyayla basit bir "Merhaba Dünya" C# projesi oluşturur: program.cs.

dotnet new console -n question-answering-quickstart

Dizininizi yeni oluşturulan uygulama klasörüyle değiştirin. Uygulamayı şu şekilde oluşturabilirsiniz:

dotnet build

Derleme çıkışı hiçbir uyarı veya hata içermemelidir.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

Uygulama dizininde, aşağıdaki komutla .NET için istemci kitaplığını yanıtlayan özel soruyu yükleyin:

dotnet add package Azure.AI.Language.QuestionAnswering

Projeyi sorgulama

Projeden yanıt oluşturma

Aşağıdaki örnek, sorunuza yanıt almak için kullanarak GetAnswers bir projeyi sorgulamanıza olanak sağlar.

Aşağıdaki kodu güncelleştirmeniz ve aşağıdaki değişkenler için kendi değerlerinizi sağlamanız gerekir.

Değişken adı Değer
endpoint Bu değer, Azure portal kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Alternatif olarak, Language Studio'da>projeyi>dağıtma Tahmin URL'sini alma sorusuna yanıt olarak>değerini bulabilirsiniz. Örnek uç nokta: https://southcentralus.api.cognitive.microsoft.com/
credential Bu değer, Azure portal kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Key1 veya Key2 kullanabilirsiniz. Her zaman iki geçerli anahtara sahip olmak her zaman sıfır kapalı kalma süresiyle güvenli anahtar döndürme için. Alternatif olarak, Language Studio'da>projeyi>dağıtma Tahmin URL'sini alma sorusuna yanıt olarak>değerini bulabilirsiniz. Anahtar değeri örnek isteğin bir parçasıdır.
projectName Projenizi yanıtlayan özel sorunuzun adı.
deploymentName İki olası değer vardır: test, ve production. production, Projeyi dağıtın sorusunu yanıtlamak için Language Studio'dan >projenizi dağıttığınıza>bağlıdır.

Önemli

İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Azure AI hizmetleri güvenlik makalesine bakın.

Proje dizininden program.cs dosyasını açın ve öğesini aşağıdaki kodla değiştirin:

using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;

namespace question_answering
{
    class Program
    {
        static void Main(string[] args)
        {

            // This example requires environment variables named "LANGUAGE_KEY" and "LANGUAGE_ENDPOINT"
            Uri endpoint = new Uri("LANGUAGE_ENDPOINT");
            AzureKeyCredential credential = new AzureKeyCredential("LANGUAGE_KEY");
            string projectName = "{YOUR-PROJECT-NAME}";
            string deploymentName = "production";

            string question = "How long should my Surface battery last?";

            QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
            QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);

            Response<AnswersResult> response = client.GetAnswers(question, project);

            foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
            {
                Console.WriteLine($"Q:{question}");
                Console.WriteLine($"A:{answer.Answer}");
            }
        }
    }
}

Örneğimiz için değişkenleri sabit bir şekilde kodlarken. Üretim için kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı göz önünde bulundurun. Örneğin, Azure anahtar kasası güvenli anahtar depolama alanı sağlar.

Yukarıdaki kodla güncelleştirdikten Program.cs ve doğru değişken değerlerini değiştirdikten sonra. Uygulamayı uygulama dizininizdeki komutuyla dotnet run çalıştırın.

dotnet run

Yanıt aşağıdaki gibi görünür:

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.

Özel soru yanıtlamanın doğru yanıt olduğu konusunda ne kadar güvenli olduğu hakkında bilgi için mevcut yazdırma deyimlerinin altına ek bir yazdırma deyimi ekleyin:

Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
Console.WriteLine($"({answer.Confidence})"); // add this line

Yeniden yürütürseniz dotnet run şimdi güvenilirlik puanına sahip bir sonuç alırsınız:

Q:How much battery life do I have left?
A:If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.
(0.9185)

Güvenilirlik puanı 0 ile 1 arasında bir değer döndürür. Bunu yüzde olarak düşünebilirsiniz ve 100 ile çarpabilirsiniz, bu nedenle 0,9185 güvenilirlik puanı, özel soru yanıtlamanın projeye göre sorunun doğru yanıtı olduğundan %91,85 emin olduğu anlamına gelir.

Güvenilirlik puanının belirli bir eşiğin altına düştüğü yanıtları dışlamak istiyorsanız özelliğini eklemek ConfidenceScoreThreshold için kullanınAnswerOptions.

QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
AnswersOptions options = new AnswersOptions(); //Add this line
options.ConfidenceThreshold = 0.95; //Add this line

Response<AnswersResult> response = client.GetAnswers(question, project, options); //Add the additional options parameter

Kodun önceki yürütmesinden güvenilirlik puanımızın şu olduğunu bildiğimiz için.95: .9185 eşiğin olarak ayarlanması varsayılan yanıtın döndürülmesine neden olur.

Q:How much battery life do I have left?
A:No good match found in KB
(0)

Proje olmadan metin sorgulama

ile GetAnswersFromTextbir proje olmadan özel soru yanıtlamayı da kullanabilirsiniz. Bu durumda, hem bir soruyu hem de isteğin gönderildiği sırada yanıt aramak istediğiniz ilişkili metin kayıtlarını içeren özel bir soru yanıtlarsınız.

Bu örnekte, yalnızca ve credentialdeğişkenlerini endpoint değiştirmeniz gerekir.

using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;
using System.Collections.Generic;


namespace questionansweringcsharp
{
    class Program
    {
        static void Main(string[] args)
        {

            Uri endpoint = new Uri("https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/");
            AzureKeyCredential credential = new AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY");
            QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);

            IEnumerable<TextDocument> records = new[]
            {
                new TextDocument("doc1", "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
                         "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it"),
                new TextDocument("doc2", "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
                         "The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."),
            };

            AnswersFromTextOptions options = new AnswersFromTextOptions("How long does it takes to charge a surface?", records);
            Response<AnswersFromTextResult> response = client.GetAnswersFromText(options);

           foreach (TextAnswer answer in response.Value.Answers)
            {
                if (answer.Confidence > .9)
                {
                    string BestAnswer = response.Value.Answers[0].Answer;

                    Console.WriteLine($"Q:{options.Question}");
                    Console.WriteLine($"A:{BestAnswer}");
                    Console.WriteLine($"Confidence Score: ({response.Value.Answers[0].Confidence:P2})"); //:P2 converts the result to a percentage with 2 decimals of accuracy. 
                    break;
                }
                else
                {
                    Console.WriteLine($"Q:{options.Question}");
                    Console.WriteLine("No answers met the requested confidence score.");
                    break;
                }
            }

        }
    }
}

Yukarıdaki kodu çalıştırmak için öğesini yukarıdaki betik bloğunun içeriğiyle değiştirin Program.cs ve ve credential değişkenlerini önkoşulların bir parçası olarak oluşturduğunuz dil kaynağına karşılık gelen şekilde değiştirinendpoint.

Bu durumda, tüm yanıtları yineler ve yalnızca 0,9'dan büyük en yüksek güvenilirlik puanına sahip yanıtı döndürüriz. ile GetAnswersFromTextsağlanan seçenekler hakkında daha fazla bilgi edinmek için.

Python için istemci kitaplığını yanıtlayan özel soru için şu hızlı başlangıcı kullanın:

  • Bir projeden yanıt alın.
  • Sorunuzla birlikte gönderdiğiniz metin gövdesinden bir yanıt alın.
  • Sorunuza yanıt olarak güvenilirlik puanını alın.

Başvuru belgeleri | Paketi (PyPI) | Ek örnekler | Kitaplık kaynak kodu

Önkoşullar

  • Azure aboneliği - Ücretsiz olarak oluşturun
  • Python 3.x
  • Özel soru yanıtlama, BIR API anahtarı ve uç noktası oluşturmak için özel soru yanıtlama özelliğinin etkinleştirildiği bir Dil kaynağı gerektirir.
    • Dil kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. API'ye bağlanmak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştırın.
  • Azure CLI ile dil kaynağı oluşturmak için aşağıdaki diğer özellikleri sağlayın:--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Sorguya alınacak mevcut bir proje. Bir proje ayarlamadıysanız, Language Studio hızlı başlangıcındaki yönergeleri izleyebilirsiniz. Veya veri kaynağı olarak bu Surface Kullanıcı Kılavuzu URL'sini kullanan bir proje ekleyin.

Ayarlama

İstemci kitaplığını yükleme

Python yükledikten sonra şunları kullanarak istemci kitaplığını yükleyebilirsiniz:

pip install azure-ai-language-questionanswering

Projeyi sorgulama

Projeden yanıt oluşturma

Aşağıdaki örnek, sorunuza yanıt almak için get_answers kullanarak bir projeyi sorgulamanıza olanak sağlar. Bu kodu ayrılmış bir .py dosyasına veya Jupyter Notebook/Lab'deki bir hücreye kopyalayabilirsiniz.

Aşağıdaki kodu güncelleştirmeniz ve aşağıdaki değişkenler için kendi değerlerinizi sağlamanız gerekir.

Değişken adı Değer
endpoint Bu değer, Azure portal kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Alternatif olarak, Language Studio'da>projeyi>dağıtma Tahmin URL'sini alma sorusuna yanıt olarak>değerini bulabilirsiniz. Örnek uç nokta: https://southcentralus.api.cognitive.microsoft.com/
credential Bu değer, Azure portal kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Key1 veya Key2 kullanabilirsiniz. Her zaman iki geçerli anahtara sahip olmak her zaman sıfır kapalı kalma süresiyle güvenli anahtar döndürme için. Alternatif olarak, Language Studio'da>projeyi>dağıtma Tahmin URL'sini alma sorusuna yanıt olarak>değerini bulabilirsiniz. Anahtar değeri örnek isteğin bir parçasıdır.
knowledge_base_project Sorunuzu yanıtlayan projenin adı.
deployment İki olası değer vardır: test, ve production. production, Projeyi dağıtın sorusunu yanıtlamak için Language Studio'dan >projenizi dağıttığınıza>bağlıdır.

Önemli

İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Azure AI hizmetleri güvenlik makalesine bakın.

from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient

endpoint = "https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("{YOUR-LANGUAGE-RESOURCE-KEY}")
knowledge_base_project = "{YOUR-PROJECT-NAME}"
deployment = "production"

def main():
    client = QuestionAnsweringClient(endpoint, credential)
    with client:
        question="How much battery life do I have left?"
        output = client.get_answers(
            question = question,
            project_name=knowledge_base_project,
            deployment_name=deployment
        )
    print("Q: {}".format(question))
    print("A: {}".format(output.answers[0].answer))

if __name__ == '__main__':
    main()

Örneğimizin değişkenlerini kodlarken. Üretim için kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı göz önünde bulundurun. Örneğin, Azure anahtar kasası güvenli anahtar depolama alanı sağlar.

Yukarıdaki kodu çalıştırdığınızda, önkoşullardan veri kaynağını kullanıyorsanız aşağıdaki gibi görünen bir yanıt alırsınız:

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.

Özel soru yanıtlamanın doğru yanıt olduğu konusunda ne kadar güvenli olduğu hakkında bilgi için mevcut yazdırma deyimlerinin altına başka bir yazdırma deyimi ekleyin:

print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
print("Confidence Score: {}".format(output.answers[0].confidence)) # add this line 

Şimdi güvenilirlik puanıyla bir sonuç alırsınız:

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.
Confidence Score: 0.9185

Güvenilirlik puanı 0 ile 1 arasında bir değer döndürür. Bunu yüzde olarak düşünebilirsiniz ve 100 ile çarpabilirsiniz, bu nedenle 0,9185 güvenilirlik puanı, özel soru yanıtlamanın projeye göre sorunun doğru yanıtı olduğundan %91,85 emin olduğu anlamına gelir.

Güvenilirlik puanının belirli bir eşiğin altına düştüğü yanıtları dışlamak istiyorsanız, AnswerOptions'ı değiştirerek parametresini confidence_threshold ekleyebilirsiniz.

        output = client.get_answers(
            confidence_threshold = 0.95, #add this line
            question = question,
            project_name=knowledge_base_project,
            deployment_name=deployment
        )

Kodun önceki yürütmesinden güvenilirlik puanımızın şu olduğunu bildiğimizden: .9185 eşiği varsayılan yanıt döndürülecek şekilde .95ayarlamak.

Q: How much battery life do I have left?
A: No good match found in KB
Confidence Score: 0.0

Proje olmadan metin sorgulama

Ayrıca, get_answers_from_text içeren bir proje olmadan özel soru yanıtlamayı da kullanabilirsiniz. Bu durumda, hem bir soruyu hem de isteğin gönderildiği sırada yanıt aramak istediğiniz ilişkili metin kayıtlarını içeren özel bir soru yanıtlarsınız.

Bu örnekte, yalnızca ve credentialdeğişkenlerini endpoint değiştirmeniz gerekir.

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
from azure.ai.language.questionanswering import models as qna

endpoint = "https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY")

def main():
    client = QuestionAnsweringClient(endpoint, credential)
    with client:
        question="How long does it takes to charge a surface?"
        input = qna.AnswersFromTextOptions(
            question=question,
            text_documents=[
                "Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
                "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.",
                "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
                "The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
            ]
        )


        output = client.get_answers_from_text(input)

    best_answer = [a for a in output.answers if a.confidence > 0.9][0]
    print(u"Q: {}".format(input.question))
    print(u"A: {}".format(best_answer.answer))
    print("Confidence Score: {}".format(output.answers[0].confidence))

if __name__ == '__main__':
    main()

Bu kodu ayrılmış bir .py dosyasına veya Jupyter Notebook/Lab'deki yeni bir hücreye kopyalayabilirsiniz. Bu örnek şunun sonucunu döndürür:

Q: How long does it takes to charge surface?
A: Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.
Confidence Score: 0.9254655838012695

Bu durumda, tüm yanıtları yineler ve yalnızca 0,9'dan büyük en yüksek güvenilirlik puanına sahip yanıtı döndürüriz. get_answers_from_text ile kullanılabilen seçenekler hakkında daha fazla bilgi edinmek için AnswersFromTextOptions parametrelerini gözden geçirin.

Kaynakları temizleme

Azure AI hizmetleri aboneliğini 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.

REST API’yi keşfedin

İşlem hattını yanıtlarken özel sorunuzu otomatikleştirme hakkında bilgi edinmek için REST API belgelerine bakın. Şu anda yazma işlevi yalnızca REST API aracılığıyla kullanılabilir:

Sonraki adımlar