Dialogflow全面解析

发布时间:2023-05-20

一、Dialogflow教程

Dialogflow是Google云平台旗下强大且易于使用的对话式人工智能开发套件。它可以从自然语言理解、自然语言生成等方面对语言进行处理,可以用于构建对话式应用、自动响应客户服务等方面。 在Dialogflow教程中,我们先要了解什么是意向(Intent)、实体(Entities)和上下文(Contexts)。

1、Intent 意向

意向是指用户的目的或意图,是对话中最重要的概念之一。对话中的每个输入都被映射到您创建的意向之一上。 意向由域(Domain)定义,域是对话交互的主题区域。

<intent>
  <patterns>
    <li>I want to create a new account</li>
    <li>I want a new account</li>
    <li>Create new account</li>
    <li>I'd like to create a new account.</li>
  </patterns>
</intent>

2、Entities 实体

实体定义了在用户请求中找到的重要信息。实体是一些事物的名称或是特定的数量等等。图中,实体类型是“flavors”而实体值是由您定义的值。

<entity>
  <value>chocolate</value>
  <value synonyms="Dark chocolate">chocolate</value>
  <synonyms>
    <item>Cocoa</item>
    <item>chocolates</item>
  </synonyms>
</entity>

3、Context 上下文

上下文是指对话中用户的输入请求以及与该请求相关的任何意图和参数。Contexts 在某个时间点传达用户请求中给出的上下文信息。使用上下文代表意图,可简化某些意向或防止滥用某些意向。例如,您可以在需要设置特定交互参数的意向之前,将上下文与特定的意向关联起来。

<context name="plan-for-next-days">
  <parameters>
    <parameter name="travel-date">
    </parameter>
  </parameters>
</context>

二、Dialogflow ES

Dialogflow ES是Dialogflow的第一个版本。ES代表“API版”,是指使用传统的API方式进行对话流程的开发。同时,ES仍然支持V1和V2版API,V1版API已经停用,推荐使用V2版API。 Dialogflow ES相对于其他替代方案来说,具有许多独特的优点。首先,它是完全托管的。这意味着Dialogflow负责运行我们的应用程序,我们不需要处理后端架构和部署。 代码示例:

//Importing the Dialogflow module from node_modules
const dialogflow = require('Dialogflow')
//Creating a new session
const sessionClient = new dialogflow.SessionsClient();
//Setting the API details
const sessionPath = sessionClient.sessionPath(projectId, sessionId);

三、Dialogflow比较

Dialogflow是当前业界最受欢迎和广泛使用的自然语言处理平台之一,但也有一些竞争对手。

1、Amazon Lex

亚马逊的自然语言处理平台Lex是Dialogflow的主要竞争对手之一。这两者的区别在于,如果您使用亚马逊AWS,那么使用Lex可能更方便。此外,Lex使用Amazon获得的先进AI技术支持。

2、Microsoft Bot Framework

Bot Framework是微软推出的平台之一,它正与Dialogflow竞争。由于微软的布局,Bot Framework可能更适合那些使用Azure的人吧。

3、IBM Watson Assistant

Watson Assistant是IBM的AI助理平台。它与Dialogflow相比有很多优点,其中最大的优点是其保持与IBM Cloud集成并支持IBM技术。

四、Dialogflow怎么下载

下载Dialogflow,首先你需要访问Dialogflow官网,官网链接为 https://dialogflow.cloud.google.com/。 然后,可以点击“开始使用”按钮,选择“Dialogflow ES”或“Dialogflow CX”版本进行使用。如果您想要通俗的学习Dialogflow,那么我们建议您先从ES版本开始入手。 最后,按照官方指引进行操作,即可将Dialogflow成功下载到您的电脑上。

五、Dialogflow CX

Dialogflow CX是Dialogflow的第二个版本,即对话流程专用版。在Dialogflow CX中,连接器是对话流程的中心概念。 连接器负责处理当前连接状态中包含的所有信息。 将连接器视为对话的当前状态的容器,因此通过更改连接器状态,整个会话的目标也会发生变化。 代码示例:

const {SessionsClient} = require('@google-cloud/dialogflow-cx');
const sessionClient = new SessionsClient();
async function detectIntent(
  projectId,
  location,
  agentId,
  query,
  sessionId,
  languageCode
) {
  const sessionPath = sessionClient.projectLocationAgentSessionPath(
    projectId,
    location,
    agentId,
    sessionId
  );
  const request = {
    session: sessionPath,
    queryInput: {
      text: {
        text: query,
      },
      languageCode,
    },
    queryParams: {
      timeZone: 'America/Los_Angeles',
    },
  };
  const [response] = await sessionClient.detectIntent(request);
  console.log(`Intent detected: ${response.queryResult.intent.displayName}`);
}

六、Dialogflow接入系统

现在,我们将向您展示如何在自己的系统中集成Dialogflow。

1、创建Dialogflow应用程序

首先,您需要在Dialogflow上创建一个应用程序。然后,进行一些相关的设置,例如添加意向或实体。

2、获取一个API密钥

接下来,您需要在Google云平台中获取一个API密钥。此密钥被用于向Dialogflow发送请求。

3、编写代码以访问Dialogflow API

最后,您需要编写代码以访问Dialogflow API。对应的代码应该能够复用并在其他的项目中使用。 代码示例:

{
  "originalInput": {
    "rawInputs": [
      {
        "query": "hi",
        "inputType": 2
      }
    ],
    "type": 2
  },
  "timestamp": "2022-02-22T23:56:13.077Z",
  "intent": {
    "name": "projects://${PROJECT_ID}/agent/intents/5071f578-a5c4-4855-869d-89b4a5a5da59",
    "displayName": "Greetings"
  },
  "intentDetectionConfidence": 1.0,
  "languageCode": "en"
}

七、Dialogflow为对话提供URL

Dialogflow的URL集成允许您通过将URL转发到您的web应用程序来将Dialogflow与您的应用程序集成在一起。

1、获取URL Endpoint 端点

首先,您需要获取Endpoint端点。Endpoint是Dialogflow代理的Webhook地址。 通过Webhook处理对话时,Endpoint接收处理消息的请求和响应。

2、设置URL Webhook

一旦获得了Endpoint端点后,您可以在自己的Webhook中将其进行设置。对话将由Dialogflow进行处理,并将Webhook消息发送到Endpoint。

3、使用URL Endpoint完成Cookbooks Action

最后,您可以使用URL Endpoint完成Cookbooks Action。例如,可能需要使用URL Endpoint来将用户请求转发到一个数据库,在数据库中查询所需信息,并返回结果。在此过程中,URL Endpoint将起到中心作用。 代码示例:

const http = require('http');
const server = http.createServer((req, res) => {
  let body = '';
  req.on('data', chunk => {
    body += chunk.toString();
  });
  req.on('end', () => {
    console.log(body);
    res.end('OK');
  });
});
//暴露端口
server.listen(8080);