Hızlı Başlangıç: özel soru yanıtlama
Not
Verilerinizde Azure OpenAI, Ö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 Verilerinizde Azure OpenAI'ye 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
- Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Özel soru yanıtlama özelliğinin etkinleştirildiği bir dil kaynağı. Kaynağı oluştururken seçtiğiniz Microsoft Entra Id, Subscription, language resource name (Microsoft Entra Id, Subscription, language resource name) adını unutmayın.
İlk özel sorunuzu yanıtlama projenizi oluşturma
Aşağı kaydırarak Soruları yanıtla bölümüne gelin ve Özel soru yanıtlamayı aç'ı seçin.
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.
Ö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.
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.
Bu kaynakta oluşturulan tüm projeler için dil ayarlamak istiyorum seçeneğini belirleyin ve İngilizce> İleri'yi seçin.>
Ö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.
Seçimlerinizi gözden geçirin ve Proje oluştur'u seçin
Kaynakları yönet sayfasında Kaynak>URL'leri ekle'yi seçin.
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
Kaynağınızın bağlantısını seçtiğinizde proje düzenleme sayfası açılır.
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:
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.
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.
İ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
Projeyi dağıt simgesini seçerek projeyi dağıt menüsüne girin.
Bir projeyi dağıttığınızda, projenizin içeriği dizinden
test
Azure Search'teki birprod
dizine taşınır.Dağıt'ı> seçin ve sorulduğunda yeniden Dağıt'ı seçin.
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.
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.
- Ortam değişkenini
LANGUAGE_KEY
ayarlamak için değerini kaynağınızın anahtarlarından biriyle değiştirinyour-key
. - Ortam değişkenini
LANGUAGE_ENDPOINT
ayarlamak için değerini kaynağınızın uç noktasıyla değiştirinyour-endpoint
.
Önemli
API anahtarı kullanıyorsanız, bunu Azure Key Vault gibi başka bir yerde güvenli bir şekilde depolayın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin.
Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.
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 setx
ile 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 ENDPOINT
değ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.
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.
- Ortam değişkenini
LANGUAGE_KEY
ayarlamak için değerini kaynağınızın anahtarlarından biriyle değiştirinyour-key
. - Ortam değişkenini
LANGUAGE_ENDPOINT
ayarlamak için değerini kaynağınızın uç noktasıyla değiştirinyour-endpoint
.
Önemli
API anahtarı kullanıyorsanız, bunu Azure Key Vault gibi başka bir yerde güvenli bir şekilde depolayın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin.
Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.
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 setx
ile 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-quickstart
yeni 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 GetAnswersFromText
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 credential
değ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 GetAnswersFromText
sağ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 .95
ayarlamak.
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 credential
değ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: