Azure Cognitive Language Service-clientbibliotheek voor vragen beantwoorden voor Python - versie 1.1.0
Vragen beantwoorden is een cloudgebaseerde API-service waarmee u een gesprekslaag voor vragen en antwoorden kunt maken over uw bestaande gegevens. Gebruik het om een Knowledge Base te bouwen door vragen en antwoorden te extraheren uit uw semi-gestructureerde inhoud, inclusief veelgestelde vragen, handleidingen en documenten. Beantwoord de vragen van gebruikers automatisch met de beste antwoorden van de QnA's in uw Knowledge Base. Uw Knowledge Base wordt ook slimmer, omdat het voortdurend leert van het gedrag van gebruikers.
Broncode | Pakket (PyPI) | API-referentiedocumentatie | Productdocumentatie | Monsters
Disclaimer
Ondersteuning voor Azure SDK Python-pakketten voor Python 2.7 is beëindigd op 01 januari 2022. Voor meer informatie en vragen raadpleegt u https://github.com/Azure/azure-sdk-for-python/issues/20691
Aan de slag
Vereisten
- Python 3.7 of hoger is vereist voor het gebruik van dit pakket.
- Een Azure-abonnement
- Een taalserviceresource
Het pakket installeren
Installeer de Azure Question Answering-clientbibliotheek voor Python met pip:
pip install azure-ai-language-questionanswering
Opmerking: deze versie van de clientbibliotheek is standaard ingesteld op de service-API-versie
2021-10-01
.
De client verifiëren
Als u wilt communiceren met de service Vraag beantwoorden, moet u een exemplaar van de klasse QuestionAnsweringClient of een exemplaar van de AuthoringClient maken voor het beheren van projecten binnen uw resource. U hebt een eindpunt en een API-sleutel nodig om een clientobject te instantiëren. Zie Aanvragen verifiëren bij Azure Cognitive Services voor meer informatie over verificatie met Cognitive Services.
Een API-sleutel ophalen
U kunt het eindpunt en een API-sleutel ophalen uit de taalresource in Azure Portal.
U kunt ook de Azure CLI-opdracht gebruiken die hieronder wordt weergegeven om de API-sleutel op te halen uit de taalresource.
az cognitiveservices account keys list --resource-group <resource-group-name> --name <resource-name>
QuestionAnsweringClient maken
Zodra u uw eindpunt en API-sleutel hebt bepaald, kunt u een QuestionAnsweringClient instantiëren:
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
endpoint = "https://{myaccount}.api.cognitive.microsoft.com"
credential = AzureKeyCredential("{api-key}")
client = QuestionAnsweringClient(endpoint, credential)
AuthoringClient maken
Met uw eindpunt en API-sleutel kunt u een AuthoringClient instantiëren:
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering.authoring import AuthoringClient
endpoint = "https://{myaccount}.api.cognitive.microsoft.com"
credential = AzureKeyCredential("{api-key}")
client = AuthoringClient(endpoint, credential)
Een client maken met een Azure Active Directory-referentie
Als u een AAD-tokenreferentie (Azure Active Directory) wilt gebruiken, geeft u een exemplaar op van het gewenste referentietype dat is verkregen uit de azure-identity-bibliotheek . Houd er rekening mee dat regionale eindpunten geen ondersteuning bieden voor AAD-verificatie. Maak een aangepaste subdomeinnaam voor uw resource om dit type verificatie te kunnen gebruiken.
Voor verificatie met AAD is enige initiële installatie vereist:
- Azure-identity installeren
- Een nieuwe AAD-toepassing registreren
- Verleent toegang tot de taalservice door de rol 'Cognitive Services Language Reader' toe te wijzen aan uw service-principal.
Na de installatie kunt u kiezen welk type referentie van azure.identity u wilt gebruiken. Als voorbeeld kan DefaultAzureCredential worden gebruikt om de client te verifiëren:
Stel de waarden van de client-id, tenant-id en clientgeheim van de AAD-toepassing in als omgevingsvariabelen: AZURE_CLIENT_ID
, AZURE_TENANT_ID
, AZURE_CLIENT_SECRET
Gebruik de geretourneerde tokenreferentie om de client te verifiëren:
from azure.ai.language.questionanswering import QuestionAnsweringClient
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
client = QuestionAnsweringClient(endpoint="https://<my-custom-subdomain>.cognitiveservices.azure.com/", credential=credential)
Belangrijkste concepten
QuestionAnsweringClient
De QuestionAnsweringClient is de primaire interface voor het stellen van vragen met behulp van een Knowledge Base met uw eigen informatie of tekstinvoer met behulp van vooraf getrainde modellen.
Voor asynchrone bewerkingen bevindt zich een asynchroon QuestionAnsweringClient
in de azure.ai.language.questionanswering.aio
naamruimte.
AuthoringClient
De AuthoringClient biedt een interface voor het beheren van projecten voor het beantwoorden van vragen. Voorbeelden van de beschikbare bewerkingen zijn het maken en implementeren van projecten, het bijwerken van uw kennisbronnen en het bijwerken van vraag- en antwoordparen. Het biedt zowel synchrone als asynchrone API's.
Voorbeelden
QuestionAnsweringClient
De azure-ai-language-questionanswering
clientbibliotheek biedt zowel synchrone als asynchrone API's.
- Een vraag stellen
- Een vervolgvraag stellen
- Een nieuw project maken
- Een kennisbron toevoegen
- Uw project implementeren
- Asynchrone bewerkingen
Stel een vraag
De enige invoer die nodig is om een vraag te stellen met behulp van een Knowledge Base, is alleen de vraag zelf:
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
endpoint = os.environ["AZURE_QUESTIONANSWERING_ENDPOINT"]
key = os.environ["AZURE_QUESTIONANSWERING_KEY"]
client = QuestionAnsweringClient(endpoint, AzureKeyCredential(key))
output = client.get_answers(
question="How long should my Surface battery last?",
project_name="FAQ",
deployment_name="test"
)
for candidate in output.answers:
print("({}) {}".format(candidate.confidence, candidate.answer))
print("Source: {}".format(candidate.source))
U kunt extra trefwoordopties instellen om het aantal antwoorden te beperken, een minimale betrouwbaarheidsscore op te geven en meer.
Een vervolgvraag stellen
Als uw Knowledge Base is geconfigureerd voor chit-chat, kunnen de antwoorden van de Knowledge Base suggesties voor vervolgvragen bevatten om een gesprek te starten. U kunt een vervolgvraag stellen door de id van het gekozen antwoord op te geven als context voor het vervolggesprek:
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
from azure.ai.language.questionanswering import models
endpoint = os.environ["AZURE_QUESTIONANSWERING_ENDPOINT"]
key = os.environ["AZURE_QUESTIONANSWERING_KEY"]
client = QuestionAnsweringClient(endpoint, AzureKeyCredential(key))
output = client.get_answers(
question="How long should charging take?",
answer_context=models.KnowledgeBaseAnswerContext(
previous_qna_id=previous_answer.qna_id
),
project_name="FAQ",
deployment_name="live"
)
for candidate in output.answers:
print("({}) {}".format(candidate.confidence, candidate.answer))
print("Source: {}".format(candidate.source))
Een nieuw project maken
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering.authoring import AuthoringClient
# get service secrets
endpoint = os.environ["AZURE_QUESTIONANSWERING_ENDPOINT"]
key = os.environ["AZURE_QUESTIONANSWERING_KEY"]
# create client
client = AuthoringClient(endpoint, AzureKeyCredential(key))
with client:
# create project
project_name = "IssacNewton"
project = client.create_project(
project_name=project_name,
options={
"description": "biography of Sir Issac Newton",
"language": "en",
"multilingualResource": True,
"settings": {
"defaultAnswer": "no answer"
}
})
print("view created project info:")
print("\tname: {}".format(project["projectName"]))
print("\tlanguage: {}".format(project["language"]))
print("\tdescription: {}".format(project["description"]))
Een kennisbron toevoegen
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering.authoring import AuthoringClient
# get service secrets
endpoint = os.environ["AZURE_QUESTIONANSWERING_ENDPOINT"]
key = os.environ["AZURE_QUESTIONANSWERING_KEY"]
# create client
client = AuthoringClient(endpoint, AzureKeyCredential(key))
project_name = "IssacNewton"
update_sources_poller = client.begin_update_sources(
project_name=project_name,
sources=[
{
"op": "add",
"value": {
"displayName": "Issac Newton Bio",
"sourceUri": "https://wikipedia.org/wiki/Isaac_Newton",
"sourceKind": "url"
}
}
]
)
update_sources_poller.result()
# list sources
print("list project sources")
sources = client.list_sources(
project_name=project_name
)
for source in sources:
print("project: {}".format(source["displayName"]))
print("\tsource: {}".format(source["source"]))
print("\tsource Uri: {}".format(source["sourceUri"]))
print("\tsource kind: {}".format(source["sourceKind"]))
Uw project implementeren
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering.authoring import AuthoringClient
# get service secrets
endpoint = os.environ["AZURE_QUESTIONANSWERING_ENDPOINT"]
key = os.environ["AZURE_QUESTIONANSWERING_KEY"]
# create client
client = AuthoringClient(endpoint, AzureKeyCredential(key))
project_name = "IssacNewton"
# deploy project
deployment_poller = client.begin_deploy_project(
project_name=project_name,
deployment_name="production"
)
deployment_poller.result()
# list all deployments
deployments = client.list_deployments(
project_name=project_name
)
print("view project deployments")
for d in deployments:
print(d)
Asynchrone bewerkingen
De bovenstaande voorbeelden kunnen ook asynchroon worden uitgevoerd met behulp van de clients in de aio
naamruimte:
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering.aio import QuestionAnsweringClient
endpoint = os.environ["AZURE_QUESTIONANSWERING_ENDPOINT"]
key = os.environ["AZURE_QUESTIONANSWERING_KEY"]
client = QuestionAnsweringClient(endpoint, AzureKeyCredential(key))
output = await client.get_answers(
question="How long should my Surface battery last?",
project_name="FAQ",
deployment_name="production"
)
Optionele configuratie
Optionele trefwoordargumenten kunnen worden doorgegeven op het niveau van de client en per bewerking. In de naslagdocumentatie van Azure Core worden de beschikbare configuraties beschreven voor nieuwe pogingen, logboekregistratie, transportprotocollen en meer.
Problemen oplossen
Algemeen
Azure-vragen beantwoordende clients genereren uitzonderingen die zijn gedefinieerd in Azure Core. Wanneer u communiceert met de clientbibliotheek vragen beantwoorden van de Cognitive Language Service met behulp van de Python SDK, komen fouten die door de service worden geretourneerd, overeen met dezelfde HTTP-statuscodes die worden geretourneerd voor REST API-aanvragen .
Als u bijvoorbeeld een vraag indient naar een niet-bestaande Knowledge Base, wordt er een 400
fout geretourneerd die 'Ongeldige aanvraag' aangeeft.
from azure.core.exceptions import HttpResponseError
try:
client.get_answers(
question="Why?",
project_name="invalid-knowledge-base",
deployment_name="test"
)
except HttpResponseError as error:
print("Query failed: {}".format(error.message))
Logboekregistratie
Deze bibliotheek maakt gebruik van de standaardbibliotheek voor logboekregistratie voor logboekregistratie. Basisinformatie over HTTP-sessies (URL's, headers, enzovoort) wordt geregistreerd op INFO-niveau.
Gedetailleerde logboekregistratie op foutopsporingsniveau, inclusief aanvraag-/antwoordteksten en niet-bewerkte headers, kan worden ingeschakeld op een client met het logging_enable
argument .
Bekijk hier de volledige documentatie voor SDK-logboekregistratie met voorbeelden.
Volgende stappen
- Bekijk onze voorbeelden.
- Lees meer over de verschillende functies van de Service voor het beantwoorden van vragen.
- Probeer onze servicedemo's.
Bijdragen
Zie de CONTRIBUTING.md voor meer informatie over het bouwen, testen en bijdragen aan deze bibliotheek.
Wij verwelkomen bijdragen en suggesties voor dit project. Voor de meeste bijdragen moet u instemmen met een licentieovereenkomst voor bijdragers (CLA: Contributor License Agreement) waarin u verklaart dat u gerechtigd bent ons het recht te geven uw bijdrage te gebruiken, en dat u dit ook doet. Ga naar cla.microsoft.com voor meer informatie.
Wanneer u een pull-aanvraag indient, wordt met een CLA-bot automatisch bepaald of u een CLA moet verschaffen en wordt de pull-aanvraag dienovereenkomstig opgemaakt (bijvoorbeeld met een label of commentaar). Volg gewoon de instructies van de bot. U hoeft dit maar eenmaal te doen voor alle repo's waar gebruik wordt gemaakt van onze CLA.
Op dit project is de Microsoft Open Source Code of Conduct (Microsoft Open Source-gedragscode) van toepassing. Zie de Veelgestelde vragen over de gedragscode voor meer informatie of neem contact op opencode@microsoft.com met eventuele aanvullende vragen of opmerkingen.
Azure SDK for Python