Sdílet prostřednictvím


Klientská knihovna odpovědí na otázky služby Azure Cognitive Language Service pro Python – verze 1.1.0

Odpovídání na otázky je cloudová služba rozhraní API, která umožňuje vytvořit konverzační vrstvu otázek a odpovědí nad stávajícími daty. Umožňuje vytvořit znalostní báze extrahováním otázek a odpovědí z částečně strukturovaného obsahu, včetně nejčastějších dotazů, příruček a dokumentů. Odpovědi na otázky uživatelů s nejlepšími odpověďmi z otázek ve vašem znalostní báze – automaticky. Vaše znalostní báze jsou také chytřejší, protože se neustále učí z chování uživatelů.

Zdrojový kód | Balíček (PyPI) | Referenční dokumentace k | rozhraní API Dokumentace k | produktu Vzorky

Právní omezení

Podpora balíčků Azure SDK Python pro Python 2.7 skončila 1. ledna 2022. Další informace a dotazy najdete na https://github.com/Azure/azure-sdk-for-python/issues/20691

Začínáme

Požadavky

Instalace balíčku

Nainstalujte klientskou knihovnu Azure Question Answering pro Python pomocí pip:

pip install azure-ai-language-questionanswering

Poznámka: Tato verze klientské knihovny se ve výchozím nastavení nastaví na verzi 2021-10-01rozhraní API služby .

Ověření klienta

Pokud chcete pracovat se službou Question Answering, budete muset vytvořit instanci třídy QuestionAnsweringClient nebo instanci AuthoringClient pro správu projektů v rámci vašeho prostředku. K vytvoření instance objektu klienta budete potřebovat koncový bod a klíč rozhraní API . Další informace týkající se ověřování ve službách Cognitive Services najdete v tématu Ověřování požadavků na Azure Cognitive Services.

Získání klíče rozhraní API

Koncový bod a klíč rozhraní API můžete získat z prostředku jazyka na webu Azure Portal.

Případně můžete klíč rozhraní API získat z prostředku jazyka pomocí následujícího příkazu Azure CLI .

az cognitiveservices account keys list --resource-group <resource-group-name> --name <resource-name>

Vytvoření třídy QuestionAnsweringClient

Jakmile určíte koncový bod a klíč rozhraní API , můžete vytvořit instanci objektu QuestionAnsweringClient:

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)

Create AuthoringClient

Pomocí koncového bodu a klíče rozhraní API můžete vytvořit instanci AuthoringClient:

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)

Vytvoření klienta s přihlašovacími údaji Azure Active Directory

Pokud chcete použít přihlašovací údaje tokenu Azure Active Directory (AAD), zadejte instanci požadovaného typu přihlašovacích údajů získané z knihovny azure-identity . Upozorňujeme, že regionální koncové body nepodporují ověřování AAD. Vytvořte pro svůj prostředek vlastní název subdomény , abyste mohli tento typ ověřování používat.

Ověřování pomocí AAD vyžaduje určité počáteční nastavení:

Po nastavení můžete zvolit, jaký typ přihlašovacích údajů z azure.identity chcete použít. Například DefaultAzureCredential se dá použít k ověření klienta:

Nastavte hodnoty ID klienta, ID tenanta a tajného klíče klienta aplikace AAD jako proměnné prostředí: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

K ověření klienta použijte vrácené přihlašovací údaje tokenu:

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)

Klíčové koncepty

QuestionAnsweringClient

The QuestionAnsweringClient is the primary interface for asking questions using a znalostní báze with your own information, or text input using pre-trained models. Pro asynchronní operace je azure.ai.language.questionanswering.aio asynchronní QuestionAnsweringClient v oboru názvů .

AuthoringClient

AuthoringClient poskytuje rozhraní pro správu projektů odpovídání na otázky. Mezi dostupné operace patří vytváření a nasazování projektů, aktualizace zdrojů znalostí a aktualizace dvojic otázek a odpovědí. Poskytuje synchronní i asynchronní rozhraní API.

Příklady

QuestionAnsweringClient

Klientská azure-ai-language-questionanswering knihovna poskytuje synchronní i asynchronní rozhraní API.

Zeptejte se

K položení otázky pomocí znalostní báze se vyžaduje pouze samotná otázka:

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))

Můžete nastavit další možnosti klíčových slov, abyste omezili počet odpovědí, určili minimální skóre spolehlivosti a další možnosti.

Položit následnou otázku

Pokud je pro váš znalostní báze nakonfigurovaný chat, odpovědi z znalostní báze můžou obsahovat navrhované výzvy k následným otázkám pro zahájení konverzace. Následnou otázku můžete položit tak, že jako kontext pro pokračování konverzace zadáte ID zvolené odpovědi:

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))

Vytvoření nového projektu

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"]))

Přidání zdroje znalostí

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"]))

Nasazení projektu

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)

Asynchronních operace

Výše uvedené příklady lze také spustit asynchronně pomocí klientů v aio oboru názvů :

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"
)

Volitelná konfigurace

Volitelné argumenty klíčových slov lze předat na úrovni klienta a pro jednotlivé operace. Referenční dokumentace azure-core popisuje dostupné konfigurace pro opakování, protokolování, přenosové protokoly a další.

Poradce při potížích

Obecné

Klienti Azure Question Answering vyvolávají výjimky definované v Azure Core. Při interakci s klientskou knihovnou odpovědí na otázky služby Cognitive Language Service pomocí sady Python SDK chyby vrácené službou odpovídají stejným stavovým kódům HTTP vráceným pro požadavky rozhraní REST API .

Pokud například odešlete dotaz neexistujícímu znalostní báze, vrátí se chyba s oznámením 400 Chybný požadavek.

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))

protokolování

Tato knihovna používá k protokolování standardní knihovnu protokolování . Základní informace o relacích HTTP (adresy URL, hlavičky atd.) se protokolují na úrovni INFO.

Na klientovi logging_enable s argumentem je možné povolit podrobné protokolování úrovně DEBUG, včetně těl požadavků/odpovědí a nezopravovaných hlaviček.

Kompletní dokumentaci k protokolování sady SDK s příklady najdete tady.

Další kroky

  • Prohlédněte si naše ukázky.
  • Přečtěte si o různých funkcích služby Odpovídání na otázky.
  • Vyzkoušejte naše ukázky služeb.

Přispívání

Podrobnosti o vytváření, testování a přispívání do této knihovny najdete v CONTRIBUTING.md .

Tento projekt vítá příspěvky a návrhy. Většina příspěvků vyžaduje souhlas s licenční smlouvou s přispěvatelem (CLA), která stanoví, že máte právo udělit nám práva k používání vašeho příspěvku a skutečně tak činíte. Podrobnosti najdete v cla.microsoft.com.

Při odesílání žádosti o přijetí změn robot CLA automaticky určí, jestli je potřeba poskytnout smlouvu CLA, a příslušným způsobem žádost o přijetí změn upraví (např. přidáním jmenovky nebo komentáře). Stačí postupovat podle pokynů robota. Pro všechna úložiště používající naši smlouvu CLA to stačí udělat jenom jednou.

Tento projekt přijal pravidla chování pro Microsoft Open Source. Další informace najdete v nejčastějších dotazech k pravidlům chování nebo kontaktujte s opencode@microsoft.com případnými dalšími dotazy nebo připomínkami.

Imprese