Konektor jawaban

Konektor pengetahuan melengkapi intent yang ditentukan. API tersebut menguraikan dokumen pengetahuan (misalnya, FAQ atau artikel) untuk menemukan respons otomatis. Untuk mengonfigurasinya, Anda menentukan satu atau beberapa dasar pengetahuan, yang merupakan kumpulan dokumen pengetahuan.

Anda dapat mengaktifkan pusat informasi untuk agen, sehingga semua permintaan intent yang terdeteksi dapat menemukan respons otomatis menggunakan pusat informasi Anda. Atau, Anda dapat menentukan satu atau beberapa pusat informasi dalam setiap permintaan mendeteksi intent.

Sangat umum bagi agen yang menggunakan konektor pengetahuan untuk juga menggunakan intent yang ditentukan. Konektor pengetahuan menawarkan kontrol dan presisi respons yang lebih sedikit dibandingkan intent. Anda harus menentukan intent untuk menangani permintaan pengguna yang kompleks, dan mengizinkan konektor pengetahuan menangani permintaan sederhana.

Untuk mengetahui daftar bahasa yang didukung, lihat kolom Konektor Pengetahuan di referensi bahasa.

Batasan

Fitur konektor info hanya tersedia untuk wilayah global.

Aktifkan fitur beta

Pastikan fitur beta diaktifkan:

  1. Buka Konsol Dialogflow ES.
  2. Pilih agen.
  3. Klik tombol setelan di samping nama agen.
  4. Scroll ke bawah saat berada di tab Umum dan pastikan Fitur Beta diaktifkan.
  5. Jika Anda telah membuat perubahan, klik Simpan.

Membuat pusat informasi dan membuat dokumen

Ikuti petunjuk dalam petunjuk dasar pengetahuan untuk membuat pusat informasi dan dokumen.

Setelan untuk konektor pengetahuan

Anda dapat mengaktifkan atau menonaktifkan basis pengetahuan untuk agen Anda. Basis informasi yang diaktifkan akan dipertimbangkan untuk semua permintaan pencocokan intent yang tidak menentukan basis pengetahuan. Untuk mengaktifkan atau menonaktifkan pusat informasi:

  1. Buka Konsol Dialogflow ES.
  2. Pilih agen.
  3. Klik Pengetahuan di menu sidebar kiri.
  4. Pilih satu atau beberapa pusat informasi dari daftar.
  5. Klik Aktifkan atau Nonaktifkan.

Jika ekspresi pengguna akhir juga cocok dengan intent, Anda dapat menentukan seberapa kuat hasil pengetahuan Anda:

  1. Scroll ke bawah ke bagian Sesuaikan Preferensi Hasil Pengetahuan.
  2. Sesuaikan penggeser dari lebih lemah (preferensi yang diberikan pada intent) ke lebih kuat (preferensi yang diberikan pada pengetahuan). Untuk informasi lebih lanjut, lihat Mendeteksi respons intent di bawah.

Mengonfigurasi respons

Secara default, pusat informasi dikonfigurasi dengan satu respons teks default yang diisi dengan jawaban pengetahuan yang paling cocok. Anda dapat mengubah respons ini dan menambahkan pesan respons kaya. Respons pengetahuan dapat berisi hingga tiga jawaban per pusat informasi, dan Anda dapat merujuk jawaban ini dalam respons yang dikonfigurasi. Untuk menambahkan respons:

  1. Dari halaman Pengetahuan, klik nama pusat informasi Anda.
  2. Scroll ke bawah ke bagian Respons dan tambahkan respons sesuai keinginan:
    1. Saat menentukan respons pertama, gunakan $Knowledge.Question[1] dan $Knowledge.Answer[1] tempat Anda ingin menyediakan pertanyaan dan jawaban.
    2. Indeks untuk $Knowledge.Question dan $Knowledge.Answer dimulai dari 1, jadi tingkatkan indeks ini saat menambahkan lebih banyak respons.
  3. Klik Simpan setelah Anda selesai mengedit.

Saat menentukan respons, Anda harus mempertimbangkan poin-poin berikut:

  • Jika jumlah respons yang ditentukan lebih besar dari jumlah N respons konektor pengetahuan yang cocok, hanya N respons yang akan ditampilkan.
  • Mengingat akurasinya mungkin lebih rendah daripada mencocokkan intent yang ditentukan secara eksplisit, sebaiknya tampilkan tiga respons kepada pengguna Anda jika memungkinkan.

Contoh:

Screenshot integrasi konektor pengetahuan

Mendeteksi intent dengan basis pengetahuan

Saat membuat permintaan intent deteksi, Anda dapat menentukan satu atau beberapa basis pengetahuan untuk kemungkinan respons. Menyediakan pusat informasi secara eksplisit dalam permintaan akan mengganti setelan untuk pusat informasi yang diaktifkan dan dinonaktifkan.

Contoh di bawah ini menunjukkan cara menggunakan Konsol Dialogflow, REST API (termasuk command line), atau library klien untuk mendeteksi intent. Untuk menggunakan API, panggil metode detectIntent pada jenis Sessions.

UI Web

Anda dapat berinteraksi dengan agen dan menerima respons konektor pengetahuan melalui simulator Dialogflow:

  1. Ikuti langkah-langkah di atas untuk mengaktifkan pusat informasi.
  2. Ikuti langkah-langkah di atas untuk menentukan respons.
  3. Ketik "Bagaimana cara mendaftar?" di simulator.

REST

Panggil metode detectIntent pada jenis Sessions dan tentukan basis pengetahuan di kolom queryParams.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: project ID GCP Anda
  • KNOWLEDGE_BASE_ID: ID pusat informasi Anda

Metode HTTP dan URL:

POST https://dialogflow.googleapis.com/v2beta1/projects/PROJECT_ID/agent/sessions/123456789:detectIntent

Meminta isi JSON:

{
 "queryInput": {
   "text": {
     "text": "How do I sign up?",
     "languageCode": "en-US"
   }
 },
 "queryParams": {
   "knowledgeBaseNames": ["projects/PROJECT_ID/knowledgeBases/KNOWLEDGE_BASE_ID"]
 }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
  ...
  "queryResult": {
    "queryText": "How do I sign up?",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Sign up for Cloud Storage by turning on the Cloud Storage service in the Google Cloud Platform Console.",
    "intent": {
      "name": "projects/my-gcp-project/agent/intents/487c7242-a769-408a-a339-47b95e10dac4",
      "displayName": "Knowledge.KnowledgeBase.MzkzNTAyMDE3NDQxNDk3MDg4MA"
    },
    "intentDetectionConfidence": 0.99371547,
    "languageCode": "en-us",
    "knowledgeAnswers": {
      "answers": [
        {
          "answer": "Sign up for Cloud Storage by turning on the Cloud Storage service in the Google Cloud Platform Console.",
          "matchConfidenceLevel": "HIGH",
          "matchConfidence": 0.99371547
        },
        {
          "answer": "Certain types of content are not allowed on this service; please refer to the Terms of Services and Platform Policies for details. If you believe a piece of content is in violation of our policies, report it here (select See more products, then Google Cloud Storage and Cloud Bigtable).",
          "matchConfidenceLevel": "LOW",
          "matchConfidence": 0.0012244871
        },
        {
          "answer": "From the Cloud Storage documentation click \"Send feedback\" near the top right of the page. This will open a feedback form. Your comments will be reviewed by the Cloud Storage team.",
          "matchConfidenceLevel": "LOW",
          "matchConfidence": 0.0011537358
        }
      ]
    }
  }
}

Java

Untuk mengautentikasi ke Dialogflow, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


import com.google.api.gax.rpc.ApiException;
import com.google.cloud.dialogflow.v2beta1.DetectIntentRequest;
import com.google.cloud.dialogflow.v2beta1.DetectIntentResponse;
import com.google.cloud.dialogflow.v2beta1.KnowledgeAnswers;
import com.google.cloud.dialogflow.v2beta1.KnowledgeAnswers.Answer;
import com.google.cloud.dialogflow.v2beta1.QueryInput;
import com.google.cloud.dialogflow.v2beta1.QueryParameters;
import com.google.cloud.dialogflow.v2beta1.QueryResult;
import com.google.cloud.dialogflow.v2beta1.SessionName;
import com.google.cloud.dialogflow.v2beta1.SessionsClient;
import com.google.cloud.dialogflow.v2beta1.TextInput;
import com.google.common.collect.Maps;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public class DetectIntentKnowledge {

  // DialogFlow API Detect Intent sample with querying knowledge connector.
  public static Map<String, KnowledgeAnswers> detectIntentKnowledge(
      String projectId,
      String knowledgeBaseName,
      String sessionId,
      String languageCode,
      List<String> texts)
      throws IOException, ApiException {
    // Instantiates a client
    Map<String, KnowledgeAnswers> allKnowledgeAnswers = Maps.newHashMap();
    try (SessionsClient sessionsClient = SessionsClient.create()) {
      // Set the session name using the sessionId (UUID) and projectID (my-project-id)
      SessionName session = SessionName.of(projectId, sessionId);
      System.out.println("Session Path: " + session.toString());

      // Detect intents for each text input
      for (String text : texts) {
        // Set the text and language code (en-US) for the query
        TextInput.Builder textInput =
            TextInput.newBuilder().setText(text).setLanguageCode(languageCode);
        // Build the query with the TextInput
        QueryInput queryInput = QueryInput.newBuilder().setText(textInput).build();

        QueryParameters queryParameters =
            QueryParameters.newBuilder().addKnowledgeBaseNames(knowledgeBaseName).build();

        DetectIntentRequest detectIntentRequest =
            DetectIntentRequest.newBuilder()
                .setSession(session.toString())
                .setQueryInput(queryInput)
                .setQueryParams(queryParameters)
                .build();
        // Performs the detect intent request
        DetectIntentResponse response = sessionsClient.detectIntent(detectIntentRequest);

        // Display the query result
        QueryResult queryResult = response.getQueryResult();

        System.out.format("Knowledge results:\n");
        System.out.format("====================\n");
        System.out.format("Query Text: '%s'\n", queryResult.getQueryText());
        System.out.format(
            "Detected Intent: %s (confidence: %f)\n",
            queryResult.getIntent().getDisplayName(), queryResult.getIntentDetectionConfidence());
        System.out.format(
            "Fulfillment Text: '%s'\n",
            queryResult.getFulfillmentMessagesCount() > 0
                ? queryResult.getFulfillmentMessages(0).getText()
                : "Triggered Default Fallback Intent");
        KnowledgeAnswers knowledgeAnswers = queryResult.getKnowledgeAnswers();
        for (Answer answer : knowledgeAnswers.getAnswersList()) {
          System.out.format(" - Answer: '%s'\n", answer.getAnswer());
          System.out.format(" - Confidence: '%s'\n", answer.getMatchConfidence());
        }

        KnowledgeAnswers answers = queryResult.getKnowledgeAnswers();
        allKnowledgeAnswers.put(text, answers);
      }
    }
    return allKnowledgeAnswers;
  }
}

Node.js

Untuk mengautentikasi ke Dialogflow, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

// Imports the Dialogflow client library
const dialogflow = require('@google-cloud/dialogflow').v2beta1;
// Instantiate a DialogFlow client.
const sessionClient = new dialogflow.SessionsClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = 'ID of GCP project associated with your Dialogflow agent';
// const sessionId = `user specific ID of session, e.g. 12345`;
// const languageCode = 'BCP-47 language code, e.g. en-US';
// const knowledgeBaseId = `the ID of your KnowledgeBase`;
// const query = `phrase(s) to pass to detect, e.g. I'd like to reserve a room for six people`;

// Define session path
const sessionPath = sessionClient.projectAgentSessionPath(
  projectId,
  sessionId
);
const knowledgeBasePath =
  'projects/' + projectId + '/knowledgeBases/' + knowledgeBaseId + '';

// The audio query request
const request = {
  session: sessionPath,
  queryInput: {
    text: {
      text: query,
      languageCode: languageCode,
    },
  },
  queryParams: {
    knowledgeBaseNames: [knowledgeBasePath],
  },
};

const responses = await sessionClient.detectIntent(request);
const result = responses[0].queryResult;
console.log(`Query text: ${result.queryText}`);
console.log(`Detected Intent: ${result.intent.displayName}`);
console.log(`Confidence: ${result.intentDetectionConfidence}`);
console.log(`Query Result: ${result.fulfillmentText}`);
if (result.knowledgeAnswers && result.knowledgeAnswers.answers) {
  const answers = result.knowledgeAnswers.answers;
  console.log(`There are ${answers.length} answer(s);`);
  answers.forEach(a => {
    console.log(`   answer: ${a.answer}`);
    console.log(`   confidence: ${a.matchConfidence}`);
    console.log(`   match confidence level: ${a.matchConfidenceLevel}`);
  });
}

Python

Untuk mengautentikasi ke Dialogflow, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

def detect_intent_knowledge(
    project_id, session_id, language_code, knowledge_base_id, texts
):
    """Returns the result of detect intent with querying Knowledge Connector.

    Args:
    project_id: The GCP project linked with the agent you are going to query.
    session_id: Id of the session, using the same `session_id` between requests
              allows continuation of the conversation.
    language_code: Language of the queries.
    knowledge_base_id: The Knowledge base's id to query against.
    texts: A list of text queries to send.
    """
    from google.cloud import dialogflow_v2beta1 as dialogflow

    session_client = dialogflow.SessionsClient()

    session_path = session_client.session_path(project_id, session_id)
    print("Session path: {}\n".format(session_path))

    for text in texts:
        text_input = dialogflow.TextInput(text=text, language_code=language_code)

        query_input = dialogflow.QueryInput(text=text_input)

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

        query_params = dialogflow.QueryParameters(
            knowledge_base_names=[knowledge_base_path]
        )

        request = dialogflow.DetectIntentRequest(
            session=session_path, query_input=query_input, query_params=query_params
        )
        response = session_client.detect_intent(request=request)

        print("=" * 20)
        print("Query text: {}".format(response.query_result.query_text))
        print(
            "Detected intent: {} (confidence: {})\n".format(
                response.query_result.intent.display_name,
                response.query_result.intent_detection_confidence,
            )
        )
        print("Fulfillment text: {}\n".format(response.query_result.fulfillment_text))
        print("Knowledge results:")
        knowledge_answers = response.query_result.knowledge_answers
        for answers in knowledge_answers.answers:
            print(" - Answer: {}".format(answers.answer))
            print(" - Confidence: {}".format(answers.match_confidence))

Mendeteksi respons intent

Respons untuk metode detectIntent jenis Sessions adalah DetectIntentResponse. Beberapa faktor memengaruhi cara kolom respons diisi.

Jika intent yang ditentukan dan basis pengetahuan sama-sama berpotensi cocok, tingkat kecocokan antara keduanya dan preferensi hasil info (lihat Setelan untuk konektor info) digunakan untuk menentukan kecocokan mana yang merupakan kecocokan yang dipilih. Kecocokan yang dipilih diisi di kolom DetectIntentResponse.queryResult, dan potensi kecocokan lainnya akan diisi di kolom DetectIntentResponse.alternativeQueryResults. Kedua kolom ini berisi pesan QueryResult.

Jika basis pengetahuan memberikan potensi kecocokan:

  • QueryResult.knowledgeAnswers diisi dengan daftar jawaban potensial pengetahuan yang diurutkan dengan menurunkan tingkat keyakinan kecocokan.
  • Jika respons kaya telah ditentukan untuk basis pengetahuan, QueryResult.fulfillmentMessages akan diisi dengan pesan respons lengkap.

Saat melakukan permintaan intent deteksi, ada kemungkinan kueri pengetahuan gagal. Jika hal ini terjadi, intent yang ditentukan akan dipilih, sehingga permintaan intent deteksi secara keseluruhan tidak akan gagal. Anda dapat menemukan informasi error kueri pengetahuan di kolom DetectIntentResponse.alternativeQueryResults[i].diagnosticInfo.

Mengelola pusat informasi

Untuk mempelajari lebih lanjut cara mengelola basis pengetahuan, lihat Mengelola basis pengetahuan.