Biblioteca cliente de respuesta a preguntas de Azure Cognitive Language Services para .NET: versión 1.1.0
El servicio de respuesta a preguntas es un servicio de API basado en la nube que le permite crear una capa de preguntas y respuestas conversacionales sobre los datos existentes. Úsela para crear un knowledge base extrayendo preguntas y respuestas del contenido semiestructurado, incluidas las preguntas más frecuentes, los manuales y los documentos. Responda automáticamente a las preguntas de los usuarios con las mejores respuestas de las QnAs de su knowledge base. El knowledge base también es más inteligente, ya que aprende continuamente del comportamiento del usuario.
Código | fuente Paquete (NuGet) | Documentación | de referencia de API | Documentación del productoMuestras | Guía de migración
Introducción
Instalar el paquete
Instale la biblioteca cliente de respuesta a preguntas de Azure Cognitive Language Services para .NET con NuGet:
dotnet add package Azure.AI.Language.QuestionAnswering
Requisitos previos
- Una suscripción de Azure
- Un recurso de respuesta a preguntas existente
Aunque puede usar este SDK para crear e importar proyectos de conversación, Language Studio es el método preferido para crear proyectos.
Autenticar el cliente
Para interactuar con el servicio de respuesta a preguntas, deberá crear una instancia de la QuestionAnsweringClient
clase para consultar proyectos existentes o una instancia de QuestionAnsweringAuthoringClient
para administrar proyectos dentro del recurso. Necesitará un punto de conexión y una clave de API para crear una instancia de un objeto de cliente. Para más información sobre la autenticación con Cognitive Services, consulte Autenticación de solicitudes en Azure Cognitive Services.
Obtención de una clave de API
Puede obtener el punto de conexión y una clave de API del recurso de Cognitive Services o del recurso de respuesta a preguntas en Azure Portal.
Como alternativa, use el comando de la CLI de Azure que se muestra a continuación para obtener la clave de API del recurso De respuesta a preguntas.
az cognitiveservices account keys list --resource-group <resource-group-name> --name <resource-name>
Creación de un elemento QuestionAnsweringClient
Para usar QuestionAnsweringClient
, asegúrese de usar los espacios de nombres adecuados:
using Azure.Core;
using Azure.AI.Language.QuestionAnswering;
Con el punto de conexión y la clave de API, puede crear una instancia de :QuestionAnsweringClient
Uri endpoint = new Uri("https://myaccount.cognitiveservices.azure.com/");
AzureKeyCredential credential = new AzureKeyCredential("{api-key}");
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
Creación de un elemento QuestionAnsweringAuthoringClient
Para usar QuestionAnsweringAuthoringClient
, use el siguiente espacio de nombres además de los anteriores, si es necesario.
using Azure.AI.Language.QuestionAnswering.Authoring;
Con el punto de conexión y la clave de API, puede crear una instancia de :QuestionAnsweringAuthoringClient
Uri endpoint = new Uri("https://myaccount.cognitiveservices.azure.com/");
AzureKeyCredential credential = new AzureKeyCredential("{api-key}");
QuestionAnsweringAuthoringClient client = new QuestionAnsweringAuthoringClient(endpoint, credential);
Creación de un cliente mediante la autenticación de Azure Active Directory
También puede crear o QuestionAnsweringClient
QuestionAnsweringAuthoringClient
mediante la autenticación de Azure Active Directory (AAD). El usuario o la entidad de servicio deben tener asignado el rol "Lector de lenguaje de Cognitive Services".
Con DefaultAzureCredential , puede autenticar un servicio mediante identidad administrada o una entidad de servicio, autenticarse como desarrollador que trabaja en una aplicación y mucho más sin cambiar el código.
Para poder usar , DefaultAzureCredential
o cualquier tipo de credencial de Azure.Identity, primero deberá instalar el paquete Azure.Identity.
Para usar DefaultAzureCredential
con un identificador de cliente y un secreto, deberá establecer las AZURE_TENANT_ID
variables de entorno , AZURE_CLIENT_ID
y AZURE_CLIENT_SECRET
; como alternativa, puede pasar esos valores a ClientSecretCredential
también en Azure.Identity.
Asegúrese de usar el espacio de nombres adecuado para DefaultAzureCredential
en la parte superior del archivo de origen:
using Azure.Identity;
A continuación, puede crear una instancia de DefaultAzureCredential
y pasarla a una nueva instancia del cliente:
Uri endpoint = new Uri("https://myaccount.cognitiveservices.azure.com");
DefaultAzureCredential credential = new DefaultAzureCredential();
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
Tenga en cuenta que los puntos de conexión regionales no admiten la autenticación de AAD. En su lugar, cree un nombre de dominio personalizado para que el recurso use la autenticación de AAD.
Conceptos clave
QuestionAnsweringClient
QuestionAnsweringClient
es la interfaz principal para formular preguntas mediante un knowledge base con su propia información, o la entrada de texto mediante modelos entrenados previamente. Proporciona API sincrónicas y asincrónicas para formular preguntas.
QuestionAnsweringAuthoringClient
QuestionAnsweringAuthoringClient
proporciona una interfaz para administrar proyectos de Respuesta a preguntas. Algunos ejemplos de las operaciones disponibles incluyen la creación e implementación de proyectos, la actualización de los orígenes de conocimiento y la actualización de pares de preguntas y respuestas. Proporciona API sincrónicas y asincrónicas.
Seguridad para subprocesos
Garantizamos que todos los métodos de instancia de cliente son seguros para subprocesos e independientes entre sí (instrucciones). Esto garantiza que la recomendación de reutilizar instancias de cliente siempre es segura, incluso entre subprocesos.
Conceptos adicionales
Opciones | de cliente Acceso a la respuesta | Operaciones | de larga duraciónControl de errores | Diagnóstico | Burla | Duración del cliente
Ejemplos
QuestionAnsweringClient
La biblioteca cliente Azure.AI.Language.QuestionAnswering proporciona API sincrónicas y asincrónicas.
En los ejemplos siguientes se muestran escenarios comunes con el client
creado anteriormente.
Hacer una pregunta
La única entrada necesaria para formular una pregunta mediante una knowledge base existente es solo la pregunta en sí:
string projectName = "{ProjectName}";
string deploymentName = "{DeploymentName}";
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
Response<AnswersResult> response = client.GetAnswers("How long should my Surface battery last?", project);
foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
{
Console.WriteLine($"({answer.Confidence:P2}) {answer.Answer}");
Console.WriteLine($"Source: {answer.Source}");
Console.WriteLine();
}
Puede establecer propiedades adicionales en QuestionAnsweringClientOptions
para limitar el número de respuestas, especificar una puntuación de confianza mínima y mucho más.
Formular una pregunta de seguimiento
Si el knowledge base está configurado para charlar, puede formular una pregunta de seguimiento proporcionada por el identificador de respuesta a preguntas anterior y, opcionalmente, la pregunta exacta que el usuario hizo:
string projectName = "{ProjectName}";
string deploymentName = "{DeploymentName}";
// Answers are ordered by their ConfidenceScore so assume the user choose the first answer below:
KnowledgeBaseAnswer previousAnswer = answers.Answers.First();
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
AnswersOptions options = new AnswersOptions
{
AnswerContext = new KnowledgeBaseAnswerContext(previousAnswer.QnaId.Value)
};
Response<AnswersResult> response = client.GetAnswers("How long should charging take?", project, options);
foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
{
Console.WriteLine($"({answer.Confidence:P2}) {answer.Answer}");
Console.WriteLine($"Source: {answer.Source}");
Console.WriteLine();
}
QuestionAnsweringAuthoringClient
En los ejemplos siguientes se muestran escenarios comunes mediante la QuestionAnsweringAuthoringClient
instancia creada en esta sección.
Creación de un proyecto
Para crear un proyecto, debe especificar el nombre del proyecto y crear una RequestContent
instancia con los parámetros necesarios para configurar el proyecto.
// Set project name and request content parameters
string newProjectName = "{ProjectName}";
RequestContent creationRequestContent = RequestContent.Create(
new {
description = "This is the description for a test project",
language = "en",
multilingualResource = false,
settings = new {
defaultAnswer = "No answer found for your question."
}
}
);
Response creationResponse = client.CreateProject(newProjectName, creationRequestContent);
// Projects can be retrieved as follows
Pageable<BinaryData> projects = client.GetProjects();
Console.WriteLine("Projects: ");
foreach (BinaryData project in projects)
{
Console.WriteLine(project);
}
Implementación del proyecto
Los proyectos se pueden implementar mediante o DeployProjectAsync
la sincrónica DeployProject
. Todo lo que debe especificar es el nombre del proyecto y el nombre de implementación que desea usar. Tenga en cuenta que el servicio no le permitirá implementar proyectos vacíos.
// Set deployment name and start operation
string newDeploymentName = "{DeploymentName}";
Operation<BinaryData> deploymentOperation = client.DeployProject(WaitUntil.Completed, newProjectName, newDeploymentName);
// Deployments can be retrieved as follows
Pageable<BinaryData> deployments = client.GetDeployments(newProjectName);
Console.WriteLine("Deployments: ");
foreach (BinaryData deployment in deployments)
{
Console.WriteLine(deployment);
}
Adición de un origen de conocimiento
Una manera de agregar contenido al proyecto es agregar un origen de conocimiento. En el ejemplo siguiente se muestra cómo puede configurar una RequestContent
instancia para agregar un nuevo origen de conocimiento del tipo "url".
// Set request content parameters for updating our new project's sources
string sourceUri = "{KnowledgeSourceUri}";
RequestContent updateSourcesRequestContent = RequestContent.Create(
new[] {
new {
op = "add",
value = new
{
displayName = "MicrosoftFAQ",
source = sourceUri,
sourceUri = sourceUri,
sourceKind = "url",
contentStructureKind = "unstructured",
refresh = false
}
}
});
Operation<Pageable<BinaryData>> updateSourcesOperation = client.UpdateSources(WaitUntil.Completed, newProjectName, updateSourcesRequestContent);
// Knowledge Sources can be retrieved as follows
Pageable<BinaryData> sources = updateSourcesOperation.Value;
Console.WriteLine("Sources: ");
foreach (BinaryData source in sources)
{
Console.WriteLine(source);
}
Solución de problemas
General
Al interactuar con la biblioteca cliente de respuesta a preguntas de Cognitive Language Services mediante el SDK de .NET, los errores devueltos por el servicio corresponden a los mismos códigos de estado HTTP devueltos para las solicitudes de la API REST .
Por ejemplo, si envía una pregunta a un knowledge base no existente, se devuelve un 400
error que indica "Solicitud incorrecta".
try
{
QuestionAnsweringProject project = new QuestionAnsweringProject("invalid-knowledgebase", "test");
Response<AnswersResult> response = client.GetAnswers("Does this knowledge base exist?", project);
}
catch (RequestFailedException ex)
{
Console.WriteLine(ex.ToString());
}
Observará que se registra información adicional, como el identificador de solicitud de cliente de la operación.
Azure.RequestFailedException: Please verify azure search service is up, restart the WebApp and try again
Status: 400 (Bad Request)
ErrorCode: BadArgument
Content:
{
"error": {
"code": "BadArgument",
"message": "Please verify azure search service is up, restart the WebApp and try again"
}
}
Headers:
x-envoy-upstream-service-time: 23
apim-request-id: 76a83876-22d1-4977-a0b1-559a674f3605
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Content-Type-Options: nosniff
Date: Wed, 30 Jun 2021 00:32:07 GMT
Content-Length: 139
Content-Type: application/json; charset=utf-8
Configuración del registro de la consola
La manera más sencilla de ver los registros es habilitar el registro de la consola. Para crear un agente de escucha de registro del SDK de Azure que genere mensajes en la consola, use el AzureEventSourceListener.CreateConsoleLogger
método .
// Setup a listener to monitor logged events.
using AzureEventSourceListener listener = AzureEventSourceListener.CreateConsoleLogger();
Para más información sobre otros mecanismos de registro, consulte aquí.
Pasos siguientes
- Vea nuestros ejemplos.
- Obtenga información sobre las diferentes características del servicio de respuesta a preguntas.
- Pruebe nuestras demostraciones de servicio.
Contribuir
Consulte la CONTRIBUTING.md para obtener más información sobre la compilación, las pruebas y la contribución a esta biblioteca.
Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para obtener más información, visite cla.microsoft.com.
Cuando se envía una solicitud de incorporación de cambios, un bot de CLA determinará de forma automática si tiene que aportar un CLA y completar la PR adecuadamente (por ejemplo, la etiqueta, el comentario). Solo siga las instrucciones que le dará el bot. Solo será necesario que lo haga una vez en todos los repositorios con nuestro CLA.
Este proyecto ha adoptado el Código de conducta de Microsoft Open Source. Para más información, consulte las preguntas más frecuentes del código de conducta o póngase en contacto con opencode@microsoft.com si tiene cualquier otra pregunta o comentario.
Azure SDK for .NET