Konektor jawaban

Konektor jawaban melengkapi intent yang ditentukan. Model ini mengurai dokumen pengetahuan (misalnya, FAQ atau artikel) untuk menemukan respons otomatis. Untuk mengonfigurasinya, Anda menentukan satu atau beberapa basis pengetahuan, yang merupakan kumpulan dokumen pengetahuan.

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

Agen yang menggunakan konektor pengetahuan biasanya juga menggunakan intent yang ditentukan. Konektor pengetahuan menawarkan presisi dan kontrol respons yang lebih rendah daripada intent. Anda harus menentukan intent untuk menangani permintaan pengguna yang kompleks, dan membiarkan konektor pengetahuan menangani permintaan sederhana.

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

Batasan

Fitur konektor pengetahuan hanya tersedia untuk wilayah global.

Mengaktifkan 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 General dan pastikan Beta Features diaktifkan.
  5. Jika Anda telah melakukan perubahan, klik Simpan.

Membuat pusat informasi dan dokumen

Ikuti petunjuk dalam cara membuat pusat informasi untuk membuat pusat informasi dan dokumen.

Setelan untuk konektor jawaban

Anda dapat mengaktifkan atau menonaktifkan basis pengetahuan untuk agen. Pusat informasi yang diaktifkan akan dipertimbangkan untuk semua permintaan pencocokan intent yang tidak menentukan pusat informasi. 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 basis pengetahuan dari daftar.
  5. Klik Enable atau Disable.

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

  1. Scroll ke bawah ke bagian Sesuaikan Preferensi Hasil Pengetahuan.
  2. Sesuaikan penggeser dari lebih lemah (preferensi diberikan ke intent) ke lebih kuat (preferensi diberikan ke pengetahuan). Untuk informasi selengkapnya, 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 lengkap. Respons pengetahuan dapat berisi hingga tiga jawaban per pusat informasi, dan Anda dapat mereferensikan jawaban ini dalam respons yang dikonfigurasi. Untuk menambahkan respons:

  1. Dari halaman Pengetahuan, klik nama pustaka pengetahuan 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 pertanyaan dan jawaban diberikan.
    2. Indeks untuk $Knowledge.Question dan $Knowledge.Answer dimulai dari 1, jadi tingkatkan indeks ini saat menambahkan lebih banyak respons.
  3. Klik Simpan setelah selesai mengedit.

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

  • Jika jumlah respons yang ditentukan lebih besar dari jumlah N kecocokan respons konektor pengetahuan, hanya respons N yang akan ditampilkan.
  • Mengingat akurasi dapat lebih rendah daripada pencocokan intent yang ditentukan secara eksplisit, sebaiknya tampilkan tiga respons kepada pengguna jika memungkinkan.

Contoh:

Screenshot integrasi konektor jawaban

Mendeteksi intent dengan pusat informasi

Saat membuat permintaan deteksi intent, 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 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 pustaka pengetahuan.
  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 pustaka pengetahuan 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 melakukan autentikasi 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 melakukan autentikasi 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 melakukan autentikasi 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. Ada beberapa faktor yang memengaruhi cara pengisian kolom respons.

Jika intent yang ditentukan dan basis pengetahuan adalah potensi kecocokan, keyakinan kecocokan masing-masing dan preferensi hasil pengetahuan (lihat Setelan untuk konektor pengetahuan) digunakan untuk menentukan kecocokan mana yang dipilih. Pencocokan yang dipilih diisi di kolom DetectIntentResponse.queryResult, dan potensi pencocokan lainnya diisi di kolom DetectIntentResponse.alternativeQueryResults. Kedua kolom ini berisi pesan QueryResult.

Jika pusat informasi memberikan potensi kecocokan:

  • QueryResult.knowledgeAnswers diisi dengan daftar potensi jawaban pengetahuan yang diurutkan dengan menurunkan keyakinan kecocokan.
  • Jika respons lengkap telah ditentukan untuk pusat informasi, QueryResult.fulfillmentMessages akan diisi dengan pesan respons lengkap.

Saat melakukan permintaan deteksi intent, kueri pengetahuan mungkin 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 pusat informasi, lihat Mengelola pusat informasi.