Gestione delle knowledge base

Una Knowledge Base rappresenta una raccolta di documenti informativi. che fornisci a Dialogflow. I tuoi documenti informativi contengono informazioni che potrebbero essere utili durante le conversazioni con gli utenti finali. Alcune funzionalità di Dialogflow utilizzano le knowledge base quando si cerca una risposta a un'espressione dell'utente finale. Questa guida descrive come creare e gestire le knowledge base.

Una knowledge base viene applicata a livello di agente.

Prima di iniziare

Prima di leggere questa guida, devi procedere nel seguente modo:

  1. Leggi le nozioni di base su Dialogflow.
  2. Esegui la procedura di configurazione.

Creazione di una knowledge base

Gli esempi di seguito mostrano come utilizzare la console di Dialogflow, l'API REST (compresa la riga di comando), librerie client o librerie per creare una knowledge base. Per utilizzare l'API, chiama il metodo create sul tipo KnowledgeBase.

UI web

Utilizza la console di Dialogflow per creare una knowledge base:

  1. Vai alla console Dialogflow ES.
  2. Select an agent
  3. Fai clic su Conoscenza nel menu della barra laterale sinistra.
  4. Fai clic su Crea knowledge base.
  5. Inserisci un nome per la knowledge base
  6. Fai clic su Salva.

REST

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • KNOWLEDGE_BASE_DISPLAY_NAME: nome desiderato della knowledge base

Metodo HTTP e URL:

POST https://dialogflow.googleapis.com/v2beta1/projects/PROJECT_ID/knowledgeBases

Corpo JSON della richiesta:

{
  "displayName": "KNOWLEDGE_BASE_DISPLAY_NAME"
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_ID/knowledgeBases/NDA4MTM4NzE2MjMwNDUxMjAwMA",
  "displayName": "KNOWLEDGE_BASE_DISPLAY_NAME"
}

Prendi nota del valore del campo name. Questo è il nome della tua nuova knowledge base. Il segmento di percorso dopo knowledgeBases è il tuo nuovo ID della knowledge base. Salva questo ID per le richieste riportate di seguito.

Java

Per eseguire l'autenticazione in Dialogflow, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.


import com.google.api.gax.rpc.ApiException;
import com.google.cloud.dialogflow.v2.KnowledgeBase;
import com.google.cloud.dialogflow.v2.KnowledgeBasesClient;
import com.google.cloud.dialogflow.v2.LocationName;
import java.io.IOException;

public class KnowledgeBaseManagement {

  public static void main(String[] args) throws ApiException, IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "my-project-id";
    String location = "my-location";

    // Set display name of the new knowledge base
    String knowledgeBaseDisplayName = "my-knowledge-base-display-name";

    // Create a knowledge base
    createKnowledgeBase(projectId, location, knowledgeBaseDisplayName);
  }

  // Create a Knowledge base
  public static void createKnowledgeBase(String projectId, String location, String displayName)
      throws ApiException, IOException {
    // Instantiates a client
    try (KnowledgeBasesClient knowledgeBasesClient = KnowledgeBasesClient.create()) {
      KnowledgeBase targetKnowledgeBase =
          KnowledgeBase.newBuilder().setDisplayName(displayName).build();
      LocationName parent = LocationName.of(projectId, location);
      KnowledgeBase createdKnowledgeBase =
          knowledgeBasesClient.createKnowledgeBase(parent, targetKnowledgeBase);
      System.out.println("====================");
      System.out.format("Knowledgebase created:\n");
      System.out.format("Display Name: %s\n", createdKnowledgeBase.getDisplayName());
      System.out.format("Name: %s\n", createdKnowledgeBase.getName());
    }
  }
}

Node.js

Per eseguire l'autenticazione in Dialogflow, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

// Imports the Dialogflow client library
const dialogflow = require('@google-cloud/dialogflow').v2beta1;

// Instantiate a DialogFlow client.
const client = new dialogflow.KnowledgeBasesClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = 'ID of GCP project associated with your Dialogflow agent';
// const displayName = `your knowledge base display name, e.g. myKnowledgeBase`;

const formattedParent = 'projects/' + projectId;
const knowledgeBase = {
  displayName: displayName,
};
const request = {
  parent: formattedParent,
  knowledgeBase: knowledgeBase,
};

const [result] = await client.createKnowledgeBase(request);
console.log(`Name: ${result.name}`);
console.log(`displayName: ${result.displayName}`);

Python

Per eseguire l'autenticazione in Dialogflow, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

def create_knowledge_base(project_id, display_name):
    """Creates a Knowledge base.

    Args:
        project_id: The GCP project linked with the agent.
        display_name: The display name of the Knowledge base."""
    from google.cloud import dialogflow_v2beta1 as dialogflow

    client = dialogflow.KnowledgeBasesClient()
    project_path = client.common_project_path(project_id)

    knowledge_base = dialogflow.KnowledgeBase(display_name=display_name)

    response = client.create_knowledge_base(
        parent=project_path, knowledge_base=knowledge_base
    )

    print("Knowledge Base created:\n")
    print("Display Name: {}\n".format(response.display_name))
    print("Name: {}\n".format(response.name))

Aggiungere un documento alla knowledge base

La tua nuova knowledge base al momento non contiene documenti, quindi dovresti aggiungere un documento. Consulta la sezione Contenuti supportati di seguito per una descrizione di tutte le opzioni di contenuti supportate. Puoi utilizzare lo Domande frequenti su Cloud Storage per questo esempio.

Gli esempi di seguito mostrano come utilizzare la console di Dialogflow, l'API REST (compresa la riga di comando), o librerie client per creare un documento informativo. Per utilizzare l'API, chiama il metodo create nella Document di testo.

UI web

Utilizza la console Dialogflow per creare un documento informativo:

  1. Se non prosegui con i passaggi precedenti, vai alle impostazioni della knowledge base:
    1. Vai alla console Dialogflow ES.
    2. Select an agent
    3. Fai clic su Conoscenza nel menu della barra laterale sinistra.
    4. Fai clic sul nome della knowledge base.
  2. Fai clic su Nuovo documento o Crea il primo
  3. Inserisci un nome per il documento
  4. Seleziona text/html per Tipo MIME
  5. Seleziona Domande frequenti per Tipo di conoscenza.
  6. Seleziona URL per Origine dati.
  7. Inserisci https://cloud.google.com/storage/docs/faq nel campo URL
  8. Fai clic su CREA.

REST

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • KNOWLEDGE_BASE_ID: il tuo ID knowledge base restituito dalla richiesta precedente.
  • DOCUMENT_DISPLAY_NAME: nome desiderato del documento informativo

Metodo HTTP e URL:

POST https://dialogflow.googleapis.com/v2beta1/projects/PROJECT_ID/knowledgeBases/KNOWLEDGE_BASE_ID/documents

Corpo JSON della richiesta:

{
  "displayName": "DOCUMENT_DISPLAY_NAME",
  "mimeType": "text/html",
  "knowledgeTypes": "FAQ",
  "contentUri": "https://cloud.google.com/storage/docs/faq"
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_ID/operations/ks-add_document-MzA5NTY2MTc5Mzg2Mzc5NDY4OA"
}

Il segmento di percorso dopo operations è il tuo ID operazione.

Java

Per eseguire l'autenticazione in Dialogflow, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.


import com.google.api.gax.longrunning.OperationFuture;
import com.google.api.gax.rpc.ApiException;
import com.google.cloud.dialogflow.v2.CreateDocumentRequest;
import com.google.cloud.dialogflow.v2.Document;
import com.google.cloud.dialogflow.v2.Document.KnowledgeType;
import com.google.cloud.dialogflow.v2.DocumentsClient;
import com.google.cloud.dialogflow.v2.KnowledgeOperationMetadata;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class DocumentManagement {

  public static void createDocument(
      String knowledgeBaseName,
      String displayName,
      String mimeType,
      String knowledgeType,
      String contentUri)
      throws IOException, ApiException, InterruptedException, ExecutionException, TimeoutException {
    // Instantiates a client
    try (DocumentsClient documentsClient = DocumentsClient.create()) {
      Document document =
          Document.newBuilder()
              .setDisplayName(displayName)
              .setContentUri(contentUri)
              .setMimeType(mimeType)
              .addKnowledgeTypes(KnowledgeType.valueOf(knowledgeType))
              .build();
      CreateDocumentRequest createDocumentRequest =
          CreateDocumentRequest.newBuilder()
              .setDocument(document)
              .setParent(knowledgeBaseName)
              .build();
      OperationFuture<Document, KnowledgeOperationMetadata> response =
          documentsClient.createDocumentAsync(createDocumentRequest);
      Document createdDocument = response.get(300, TimeUnit.SECONDS);
      System.out.format("Created Document:\n");
      System.out.format(" - Display Name: %s\n", createdDocument.getDisplayName());
      System.out.format(" - Document Name: %s\n", createdDocument.getName());
      System.out.format(" - MIME Type: %s\n", createdDocument.getMimeType());
      System.out.format(" - Knowledge Types:\n");
      for (KnowledgeType knowledgeTypeId : document.getKnowledgeTypesList()) {
        System.out.format("  - %s \n", knowledgeTypeId.getValueDescriptor());
      }
      System.out.format(" - Source: %s \n", document.getContentUri());
    }
  }
}

Node.js

Per eseguire l'autenticazione in Dialogflow, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

//   // Imports the Dialogflow client library
//   const dialogflow = require('@google-cloud/dialogflow').v2beta1;

//   // Instantiate a DialogFlow Documents client.
//   const client = new dialogflow.DocumentsClient({
//     projectId: projectId,
//   });

//   /**
//    * TODO(developer): Uncomment the following lines before running the sample.
//    */
//   // const projectId = 'ID of GCP project associated with your Dialogflow agent';
//   // const knowledgeBaseFullName = `the full path of your knowledge base, e.g my-Gcloud-project/myKnowledgeBase`;
//   // const documentPath = `path of the document you'd like to add, e.g. https://dialogflow.com/docs/knowledge-connectors`;
//   // const documentName = `displayed name of your document in knowledge base, e.g. myDoc`;
//   // const knowledgeTypes = `The Knowledge type of the Document. e.g. FAQ`;
//   // const mimeType = `The mime_type of the Document. e.g. text/csv, text/html,text/plain, text/pdf etc.`;

//   const request = {
//     parent: knowledgeBaseFullName,
//     document: {
//       knowledgeTypes: [knowledgeTypes],
//       displayName: documentName,
//       contentUri: documentPath,
//       source: 'contentUri',
//       mimeType: mimeType,
//     },
//   };

//   const [operation] = await client.createDocument(request);
//   const [response] = await operation.promise();

//   console.log('Document created');
//   console.log(`Content URI...${response.contentUri}`);
//   console.log(`displayName...${response.displayName}`);
//   console.log(`mimeType...${response.mimeType}`);
//   console.log(`name...${response.name}`);
//   console.log(`source...${response.source}`);

Python

Per eseguire l'autenticazione in Dialogflow, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

def create_document(
    project_id, knowledge_base_id, display_name, mime_type, knowledge_type, content_uri
):
    """Creates a Document.

    Args:
        project_id: The GCP project linked with the agent.
        knowledge_base_id: Id of the Knowledge base.
        display_name: The display name of the Document.
        mime_type: The mime_type of the Document. e.g. text/csv, text/html,
            text/plain, text/pdf etc.
        knowledge_type: The Knowledge type of the Document. e.g. FAQ,
            EXTRACTIVE_QA.
        content_uri: Uri of the document, e.g. gs://path/mydoc.csv,
            http://mypage.com/faq.html."""
    from google.cloud import dialogflow_v2beta1 as dialogflow

    client = dialogflow.DocumentsClient()
    knowledge_base_path = dialogflow.KnowledgeBasesClient.knowledge_base_path(
        project_id, knowledge_base_id
    )

    document = dialogflow.Document(
        display_name=display_name, mime_type=mime_type, content_uri=content_uri
    )

    document.knowledge_types.append(
        getattr(dialogflow.Document.KnowledgeType, knowledge_type)
    )

    response = client.create_document(parent=knowledge_base_path, document=document)
    print("Waiting for results...")
    document = response.result(timeout=120)
    print("Created Document:")
    print(" - Display Name: {}".format(document.display_name))
    print(" - Knowledge ID: {}".format(document.name))
    print(" - MIME Type: {}".format(document.mime_type))
    print(" - Knowledge Types:")
    for knowledge_type in document.knowledge_types:
        print("    - {}".format(KNOWLEDGE_TYPES[knowledge_type]))
    print(" - Source: {}\n".format(document.content_uri))

La creazione di un documento è un'operazione a lunga esecuzione, quindi il completamento potrebbe richiedere molto tempo. Puoi verificare lo stato di questa operazione per verificare se è stata completata. Al termine, l'operazione conterrà l'ID documento appena creato. Salva questo ID per elaborazioni future. Per ulteriori informazioni, vedi Operazioni a lunga esecuzione.

Gestisci i documenti informativi

Aggiornare i contenuti del documento informativo

Se aggiorni i contenuti a cui fa riferimento un documento informativo, il documento informativo potrebbe non aggiornarsi automaticamente. I tuoi contenuti vengono aggiornati solo automaticamente se fornito come URL pubblico e hai selezionato l'opzione Abilita ricaricamento automatico per il documento.

Per aggiornare manualmente i contenuti dei documenti di Cloud Storage o dell'URL pubblico, chiama il metodo reload nella Document di testo.

Per aggiornare manualmente i contenuti non elaborati caricati, usa i metodi delete e create nella Document per ricreare il documento.

Elenca documenti informativi

Puoi elencare tutti i documenti informativi relativi alla tua knowledge base. Per utilizzare l'API, chiama il metodo list nella Document di testo.

Elimina i documenti informativi

Puoi eliminare i documenti informativi per la tua knowledge base. Per utilizzare l'API, chiama il metodo delete nella Document di testo. Se non disponi dell'ID documento, puoi elencare i documenti come descritto sopra.

Contenuti supportati

Sono supportati i seguenti tipi di documenti informativi:

  • Domande frequenti: il contenuto del documento contiene coppie di domanda e risposta. in formato HTML o CSV. I tipici formati HTML delle domande frequenti vengono analizzati in modo accurato, ma potrebbe non essere possibile analizzare formati insoliti. Il file CSV deve contenere domande nella prima colonna e risposte nella seconda, senza intestazione. A causa di questo formato esplicito, vengono sempre analizzati in modo accurato.
  • QA estrattivo: documenti per i quali viene estratto il testo non strutturato. e vengono utilizzati per la risposta alle domande.

La seguente tabella mostra i tipi MIME supportati per Tipo di conoscenza e Origine.

Conoscenza Digita \ Origine File caricato (Document.content) (NON consigliato) File caricato (Document.raw_content) (consigliato) File da Cloud Storage (Document.contentUri) File da URL pubblico (Document.contentUri)
Domande frequenti testo/csv testo/csv testo/csv testo/html
Estrazione QA testo/normale, testo/html testo/normale, testo/html, applicazione/pdf testo/normale, testo/html, applicazione/pdf N/D

I contenuti dei documenti presentano i seguenti problemi noti, limitazioni e best practice:

Informazioni generali:

  • I file di URL pubblici devono essere stati sottoposti a scansione dall'indicizzatore della Ricerca Google. in modo che esistano nell'indice di ricerca. Puoi verificarlo con Google Search Console. Tieni presente che l'indicizzatore non mantiene aggiornati i tuoi contenuti. Devi aggiornare esplicitamente il documento informativo quando cambiano i contenuti di origine.
  • I file CSV devono utilizzare le virgole come delimitatori.
  • I punteggi di affidabilità non sono ancora calibrati tra le domande frequenti e gli articoli della knowledge base, Pertanto, se utilizzi sia articoli della sezione Domande frequenti sia articoli della knowledge base, il risultato migliore potrebbe non essere sempre il più alto.
  • Dialogflow rimuove i tag HTML dai contenuti durante la creazione delle risposte. Per questo motivo è meglio evitare i tag HTML e, se possibile, utilizza testo normale.
  • Le risposte dell'Assistente Google hanno un limite di 640 caratteri per fumetto della chat. le risposte lunghe vengono troncate durante l'integrazione con l'Assistente Google.
  • La dimensione massima dei documenti è 50 MB.
  • Quando utilizzi i file Cloud Storage, devi utilizzare URI pubblici oppure URI privati a cui ha accesso il tuo account utente o il tuo account di servizio.

Specifica per le domande frequenti:

  • Il file CSV deve contenere domande nella prima colonna e risposte nella seconda, senza intestazione.
  • Utilizza il formato CSV quando possibile, perché il file CSV viene analizzato in modo più accurato.
  • I contenuti HTML pubblici con una singola coppia di QA non sono supportati.
  • Il numero di coppie di QA in un documento non deve superare 2000.
  • Non sono supportate domande duplicate con risposte diverse.
  • Puoi utilizzare qualsiasi documento sulle domande frequenti; l'analizzatore sintattico delle domande frequenti è in grado di gestire la maggior parte dei formati delle domande frequenti.

Specifico per il QA estrattivo:

  • Il QA estrattivo è attualmente in fase sperimentale. Si basa su tecnologie simili provate e testati da Google in prodotti quali la Ricerca e l'assistente. Inviaci il tuo feedback sul funzionamento di Dialogflow.
  • I contenuti con testo ad alta densità sono quelli più adatti. Evita contenuti con molti paragrafi di una sola frase.
  • Tabelle ed elenchi non sono supportati.
  • Il numero di paragrafi in un documento non deve essere superiore a 2000.
  • Se un articolo è lungo (più di 1000 parole), prova a suddividerlo in più articoli di dimensioni inferiori. Se l'articolo tratta più problemi, può essere suddiviso in articoli più brevi che trattano i singoli problemi. Se l'articolo tratta un solo problema, quindi concentrati sull'articolo sulla descrizione del problema, e fai in modo che la risoluzione del problema sia breve.
  • Idealmente, dovrebbero essere forniti solo i contenuti principali di un articolo (descrizione e risoluzione del problema). Contenuti aggiuntivi come nome dell'autore, cronologia delle modifiche, link correlati, e gli annunci non sono importanti.
  • Prova a includere una descrizione dei problemi per i quali un articolo può essere d'aiuto e/o query di esempio a cui questo articolo può rispondere.

Utilizzo di Cloud Storage

Se i contenuti non sono pubblici, archiviando i contenuti in Cloud Storage è l'opzione consigliata. Quando crei documenti informativi, fornisci gli URL per gli oggetti Cloud Storage.

Creazione di bucket e oggetti Cloud Storage

Quando crei il bucket Cloud Storage:

Segui la guida rapida di Cloud Storage. istruzioni per creare un bucket e caricare i file.

Fornire un oggetto Cloud Storage a un documento della knowledge base

Per fornire i tuoi contenuti:

  • Crea una knowledge base come descritto sopra.
  • Crea un documento informativo come descritto sopra. Quando chiami il metodo create sulla Document, imposta il campo contentUri sull'URL del tuo documento Cloud Storage. Il formato di questo URL è gs://bucket-name/object-name.