Konektor jawaban

Konektor jawaban melengkapi maksud yang ditentukan. Mereka 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 Anda, sehingga semua permintaan deteksi niat dapat menemukan respons otomatis menggunakan pusat informasi Anda. Atau, Anda dapat menentukan satu atau beberapa basis pengetahuan dalam permintaan deteksi niat individu.

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

Untuk mengetahui daftar bahasa yang didukung, lihat kolom Knowledge Connector di referensi bahasa.

Batasan

Fitur penghubung pengetahuan hanya tersedia untuk global wilayah.

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

Membuat pusat informasi dan dokumen

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

Setelan untuk konektor jawaban

Anda dapat mengaktifkan atau menonaktifkan basis pengetahuan untuk agen Anda. Pusat informasi yang diaktifkan akan dipertimbangkan untuk semua permintaan pencocokan maksud 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 Aktifkan atau Nonaktifkan.

Jika ekspresi pengguna akhir juga cocok dengan maksud (intent), Anda dapat menentukan seberapa kuat preferensi Anda terhadap hasil pengetahuan:

  1. Scroll ke bawah ke bagian Sesuaikan Preferensi Hasil Info.
  2. Sesuaikan penggeser dari lebih lemah (preferensi diberikan pada maksud) ke lebih kuat (preferensi diberikan pada pengetahuan). Untuk mengetahui informasi selengkapnya, lihat Respons deteksi maksud 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 Knowledge, 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] di 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 Anda selesai mengedit.

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

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

Contoh:

Screenshot integrasi konektor jawaban

Mendeteksi intent dengan pusat informasi

Saat membuat permintaan deteksi maksud, Anda dapat menentukan satu atau beberapa basis pengetahuan untuk kemungkinan respons. Menyediakan pusat informasi secara eksplisit dalam permintaan akan menggantikan 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 maksud. 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 knowledge base di kolom queryParams.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: project ID GCP Anda
  • KNOWLEDGE_BASE_ID: ID knowledge base 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, lihat 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, lihat 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, lihat 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))

Respons deteksi maksud

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

Jika maksud yang ditentukan dan basis pengetahuan berpotensi cocok, keyakinan kecocokan masing-masing dan preferensi hasil pengetahuan (lihat Setelan untuk konektor pengetahuan) digunakan untuk menentukan kecocokan mana yang dipilih. Kecocokan yang dipilih akan diisi di kolom DetectIntentResponse.queryResult, dan kecocokan potensial lainnya akan diisi di kolom DetectIntentResponse.alternativeQueryResults. Kedua kolom ini berisi pesan QueryResult.

Jika pusat informasi memberikan kecocokan yang potensial:

  • QueryResult.knowledgeAnswers diisi dengan daftar jawaban pengetahuan potensial yang diurutkan berdasarkan tingkat keyakinan kecocokan yang menurun.
  • Jika respons lengkap telah ditentukan untuk pusat informasi, QueryResult.fulfillmentMessages diisi dengan pesan respons lengkap.

Saat melakukan permintaan deteksi maksud, kueri pengetahuan dapat gagal. Jika hal ini terjadi, intent yang ditentukan akan dipilih, sehingga permintaan deteksi intent 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.