ניהול מאגרי ידע

מאגר ידע מייצג אוסף של מסמכי ידע שאתם מספקים ל-Dialogflow. מסמכי הידע מכילים מידע שיכול להיות שימושי במהלך שיחות עם משתמשי קצה. חלק מהתכונות של Dialogflow משתמשות במאגרי ידע כשמחפשים תשובה לביטוי של משתמש קצה. במדריך הזה מוסבר איך ליצור ולנהל מאגרי ידע.

מאגר ידע מוחל ברמת הנציג.

לפני שמתחילים

לפני שתקראו את המדריך הזה:

  1. מידע בסיסי על Dialogflow
  2. לבצע את השלבים להגדרה.

יצירת מאגר ידע

הדוגמאות הבאות מראות איך להשתמש במסוף Dialogflow, ב-API בארכיטקטורת REST (כולל שורת הפקודה) או בספריות הלקוח כדי ליצור מאגר ידע. כדי להשתמש ב-API, צריך להפעיל את ה-method‏ create בסוג KnowledgeBase.

ממשק משתמש באינטרנט

כדי ליצור מאגר ידע, משתמשים במסוף Dialogflow:

  1. נכנסים למסוף Dialogflow ES.
  2. בחירת סוכן
  3. בתפריט סרגל הצד הימני, לוחצים על ידע.
  4. לוחצים על Create Knowledge Base.
  5. צריך להזין שם למאגר הידע
  6. לוחצים על שמירה.

REST

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב-GCP
  • ‫KNOWLEDGE_BASE_DISPLAY_NAME: השם הרצוי של מאגר הידע

ה-method של ה-HTTP וכתובת ה-URL:

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

תוכן בקשת JSON:

{
  "displayName": "KNOWLEDGE_BASE_DISPLAY_NAME"
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

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

שימו לב לערך של השדה name. זה השם של מאגר הידע החדש. החלק בנתיב שאחרי knowledgeBases הוא המזהה החדש של מאגר הידע. שמרו את המזהה הזה לבקשות הבאות.

Java

כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.


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

כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.

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

כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.

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

הוספת מסמך למאגר הידע

במאגר הידע החדש אין כרגע מסמכים, אז צריך להוסיף לו מסמך. בקטע תוכן נתמך שבהמשך מפורטות כל אפשרויות התוכן הנתמכות. בדוגמה הזו אפשר להשתמש במסמך שאלות נפוצות על Cloud Storage.

הדוגמאות הבאות מראות איך להשתמש במסוף Dialogflow, ב-API בארכיטקטורת REST (כולל שורת הפקודה) או בספריות הלקוח כדי ליצור מסמך ידע. כדי להשתמש ב-API, מפעילים את ה-method‏ create בסוג Document.

ממשק משתמש באינטרנט

כדי ליצור מסמך ידע, משתמשים במסוף Dialogflow:

  1. אם אתם לא ממשיכים מהשלבים שלמעלה, עברו להגדרות של מאגר הידע:
    1. נכנסים למסוף Dialogflow ES.
    2. בחירת סוכן
    3. בתפריט סרגל הצד הימני, לוחצים על ידע.
    4. לוחצים על השם של מאגר הידע.
  2. לוחצים על מסמך חדש או על יצירת המסמך הראשון.
  3. צריך לכתוב את שם המסמך
  4. בוחרים באפשרות text/html בשדה סוג MIME.
  5. בוחרים באפשרות שאלות נפוצות בשדה סוג הידע.
  6. בוחרים באפשרות כתובת URL בתור מקור הנתונים.
  7. בשדה URL מזינים את הכתובת https://cloud.google.com/storage/docs/faq.
  8. לוחצים על יצירה.

REST

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב-GCP
  • ‫KNOWLEDGE_BASE_ID: המזהה של מאגר הידע שהוחזר מהבקשה הקודמת
  • ‫DOCUMENT_DISPLAY_NAME: השם הרצוי של מסמך הידע

ה-method של ה-HTTP וכתובת ה-URL:

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

תוכן בקשת JSON:

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

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

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

החלק בנתיב שאחרי operations הוא מזהה הפעולה.

Java

כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.


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

כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.

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

כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.

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

יצירת מסמך היא פעולה ממושכת, ולכן יכול להיות שייקח זמן רב עד שהיא תסתיים. אפשר לדגום את הסטטוס של הפעולה הזו כדי לראות אם היא הושלמה. בסיום, הפעולה מכילה את מזהה המסמך החדש שנוצר. שמרו את המזהה הזה לעיבוד עתידי. מידע נוסף זמין במאמר פעולות ממושכות.

ניהול מסמכי הידע

עדכון התוכן של מסמך הידע

אם תעדכנו את התוכן שמסמך הידע מפנה אליו, יכול להיות שמסמך הידע לא יתעדכן באופן אוטומטי. התוכן מתרענן באופן אוטומטי רק אם הוא מסופק ככתובת URL ציבורית ואם סימנתם את האפשרות הפעלת טעינה מחדש אוטומטית במסמך.

כדי לרענן באופן ידני את התוכן של מסמך ב-Cloud Storage או בכתובת URL ציבורית, מפעילים את השיטה reload בסוג Document.

כדי לרענן באופן ידני תוכן גולמי שהועלה, משתמשים ב-methods‏ delete ו-create בסוג Document כדי ליצור מחדש את המסמך.

הצגת רשימה של מסמכי ידע

אתם יכולים להציג את כל מסמכי הידע במאגר הידע שלכם. כדי להשתמש ב-API, מפעילים את ה-method‏ list בסוג Document.

מחיקת מסמכי ידע

אתם יכולים למחוק מסמכי ידע ממאגר הידע שלכם. כדי להשתמש ב-API, מפעילים את ה-method‏ delete בסוג Document. אם אין לכם את מזהה המסמך, אתם יכולים לרשום את המסמכים כמו שמתואר למעלה.

תוכן נתמך

אלה סוגי מסמכי הידע שנתמכים:

  • שאלות נפוצות: תוכן המסמך מכיל זוגות של שאלות ותשובות בפורמט HTML או CSV. המערכת מנתחת במדויק פורמטים אופייניים של HTML לשאלות נפוצות, אבל יכול להיות שהיא לא תצליח לנתח פורמטים חריגים. בקובץ CSV השאלות צריכות להיות בעמודה הראשונה והתשובות בעמודה השנייה, ללא כותרת. בגלל הפורמט המפורש הזה, הם תמיד מנותחים בצורה מדויקת.
  • שאלות ותשובות מחולצות: מסמכים שמהם מחולץ טקסט לא מובנה, שמשמש למענה על שאלות.

בטבלה הבאה מוצגים סוגי ה-MIME הנתמכים לפי סוג הידע והמקור.

ידע סוג \ מקור קובץ שהועלה (Document.content) (לא מומלץ) קובץ שהועלה (Document.raw_content) (מומלץ) קובץ מ-Cloud Storage‏ (Document.contentUri) קובץ מכתובת URL ציבורית (Document.contentUri)
שאלות נפוצות text/csv text/csv text/csv text/html
שאלות ותשובות מבוססות-חילוץ text/plain, text/html text/plain, text/html, application/pdf text/plain, text/html, application/pdf לא רלוונטי

אלה הבעיות הידועות, המגבלות והשיטות המומלצות שקשורות לתוכן המסמך:

כללי:

  • קבצים מכתובות URL ציבוריות חייבים להיסרק על ידי הסורק של אינדקס החיפוש של חיפוש Google, כדי שהם יהיו קיימים באינדקס החיפוש. אפשר לבדוק את זה באמצעות Google Search Console. חשוב לזכור שהמערכת לא מעדכנת את התוכן שלכם. אם התוכן של המקור משתנה, צריך לעדכן את מסמך הידע באופן מפורש.
  • בקובצי CSV, צריך להשתמש בפסיקים כתווי הפרדה.
  • ציוני המהימנות עדיין לא מכוילים בין שאלות נפוצות לבין מאמרים במאגר הידע, כך שאם משתמשים גם בשאלות נפוצות וגם במאמרים במאגר הידע, יכול להיות שהתוצאה הטובה ביותר לא תמיד תהיה הגבוהה ביותר.
  • ‫Dialogflow מסיר תגי HTML מהתוכן כשהוא יוצר תשובות. לכן, מומלץ להימנע מתגי HTML ולהשתמש בטקסט פשוט כשאפשר.
  • התשובות של Google Assistant מוגבלות ל-640 תווים לכל בועת צ'אט, ולכן תשובות ארוכות נחתכות כשמשלבים אותן עם Google Assistant.
  • גודל המסמך המקסימלי הוא 50MB.
  • כשמשתמשים בקבצים של Cloud Storage, צריך להשתמש בכתובות URI ציבוריות או בכתובות URI פרטיות שלחשבון המשתמש או לחשבון השירות שלכם יש גישה אליהן.

ספציפית לשאלות נפוצות:

  • בקובץ CSV השאלות צריכות להיות בעמודה הראשונה והתשובות בעמודה השנייה, ללא כותרת.
  • מומלץ להשתמש ב-CSV כשאפשר, כי הניתוח של קובצי CSV הוא הכי מדויק.
  • אין תמיכה בתוכן HTML ציבורי עם זוג אחד של שאלות ותשובות.
  • מספר צמדי השאלות והתשובות במסמך אחד לא יכול להיות גדול מ-2,000.
  • אי אפשר להוסיף שאלות כפולות עם תשובות שונות.
  • אפשר להשתמש בכל מסמך של שאלות נפוצות. מנתח השאלות הנפוצות יכול לטפל ברוב הפורמטים של שאלות נפוצות.

ספציפית ל-Extractive QA:

  • התכונה "שאלות ותשובות עם שליפת מידע" היא ניסיונית כרגע. הוא מבוסס על טכנולוגיות דומות שנבדקו ב-Google במוצרים כמו חיפוש ו-Assistant. נשמח לקבל מכם משוב על השימוש ב-Dialogflow.
  • התכונה פועלת הכי טוב עם תוכן שיש בו הרבה טקסט. הימנעו מתוכן עם הרבה פסקאות של משפט אחד.
  • אין תמיכה בטבלאות וברשימות.
  • מספר הפסקאות במסמך אחד לא יכול להיות יותר מ-2,000.
  • אם המאמר ארוך (יותר מ-1,000 מילים), כדאי לנסות לפצל אותו לכמה מאמרים קצרים יותר. אם המאמר עוסק בכמה נושאים, אפשר לפצל אותו למאמרים קצרים יותר שעוסקים בנושאים נפרדים. אם המאמר עוסק רק בבעיה אחת, צריך להתמקד בתיאור הבעיה ולקצר את הפתרון.
  • רצוי לספק רק את התוכן העיקרי של המאמר (תיאור הבעיה והפתרון). תוכן נוסף כמו שם המחבר, היסטוריית השינויים, קישורים קשורים ומודעות לא חשוב.
  • כדאי לכלול תיאור של הבעיות שהמאמר יכול לעזור לפתור, או שאילתות לדוגמה שהמאמר יכול לענות עליהן.

שימוש ב-Cloud Storage

אם התוכן שלכם לא ציבורי, מומלץ לאחסן אותו ב-Cloud Storage. כשיוצרים מסמכי ידע, צריך לספק את כתובות ה-URL של האובייקטים ב-Cloud Storage.

יצירת קטגוריות של Cloud Storage ואובייקטים

כשיוצרים את הקטגוריה של Cloud Storage:

  • חשוב לוודא שבחרתם את הפרויקט ב-GCP שאתם משתמשים בו ל-Dialogflow.
  • מוודאים שלחשבון המשתמש או לחשבון השירות שאתם משתמשים בו בדרך כלל כדי לגשת ל-Dialogflow API יש הרשאות קריאה לאובייקטים בקטגוריה.
  • משתמשים בסוג האחסון Standard.
  • מגדירים את מיקום הקטגוריה למיקום הקרוב ביותר אליכם. תצטרכו את מזהה המיקום (לדוגמה, us-west1) לחלק מהקריאות ל-API, אז שימו לב לבחירה שלכם.

פועלים לפי ההוראות במדריך למתחילים של Cloud Storage כדי ליצור קטגוריה ולהעלות קבצים.

הוספת אובייקט של Cloud Storage למסמך של מאגר ידע

כדי לספק את התוכן:

  • יוצרים מאגר ידע כמו שמתואר למעלה.
  • יוצרים מסמך ידע כמו שמתואר למעלה. כשמפעילים את ה-method‏ create בסוג Document, מגדירים בשדה contentUri את כתובת ה-URL של המסמך ב-Cloud Storage. הפורמט של כתובת ה-URL הזו הוא gs://bucket-name/object-name.