Python中如何构建一个简单的Google Dialogflow聊天机器人

概述

本教程将向您展示如何构建一个简单的 Dialogflow 聊天机器人,引导您完成 Dialogflow 的最重要功能。 您将学习如何:

  • 创建 Dialogflow 帐户和第一个 Dialogflow 聊天机器人,它允许您定义自然语言理解模型。
  • 使用实体提取参数,您可以使用这些参数定义如何从用户话语中提取数据。 实体允许您对用户话语的重要部分进行分类。 这使您可以提取与类别而不是特定话语匹配的数据,从而为您提供更大的灵活性。
  • 使用上下文管理状态,这使您可以在多轮中保持对话状态。
  • 与 Google 智能助理集成,可让您将 Dialogflow 聊天机器人部署为用户可通过智能调用的操作。

创建 Dialogflow 帐户

本页介绍如何创建和登录 Dialogflow 帐户。

Dialogflow 需要 Google 帐户才能登录。如果您已有帐户,请跳至下一部分。 如果您没有 Google 帐户,可以使用当前的电子邮件在此处获取一个帐户,也可以使用 Gmail 注册 Google 帐户和电子邮件。

创建 Dialogflow 帐户

现在您已登录自己的 Google 帐户,可以按照以下步骤登录 Dialogflow: https://console.dialogflow.com/api-client/#/login

点击 Google 登录按钮: setup-001.png

如果您在浏览器中登录了多个 Google 帐户,请选择要登录的 Google 帐户。

允许 Dialogflow 访问您的 Google 帐户。Dialogflow 使用以下权限:

  • 通过 Google Cloud Platform 服务查看和管理您的数据:此权限允许 Dialogflow 代表您为 Firebase 部署云功能,以(可选)为您的聊天机器人提供支持。 有关详细信息,请参阅 Fulfillment。
  • 查看和管理您的 Google 智能助理语音命令,对话框和语法:此权限允许您在 Google 智能助理上测试您的 Dialogflow 聊天机器人。 有关详情,请参阅 Google 智能助理集成。
  • 查看和管理您在 Google 上的操作:此权限允许您将 Dialogflow 代理部署到 Google 智能助理和 Google 操作系统作为对话操作。 最后,您将了解 Dialogflow 的服务条款,您需要接受这些条款才能使用 Dialogflow。

setup-003.png

创建和查询聊天机器人

本页介绍如何创建和试用您的第一个 Dialogflow 聊天机器人。

创建您的第一个 Dialogflow 聊天机器人 要创建 Dialogflow 聊天机器人:

打开浏览器并登录 Dialogflow。 单击左侧菜单中的“创建聊天机器人”。 输入聊天机器人的名称,默认语言和默认时区,然后单击“创建”按钮。

creating-002.png

Dialogflow 控制台 您现在应该看到左侧的 Dialogflow 控制台和菜单面板。 如果您正在使用较小的屏幕并且菜单已隐藏,请单击左上角的菜单菜单按钮。 设置设置按钮将您带到当前代理的设置。

页面中间将显示代理的意图列表。 默认情况下,Dialogflow 聊天机器人以两个意图开头。 当您的聊天机器人不了解您的用户所说的内容时,您的聊天机器人会与默认后备意图相匹配。 默认欢迎意图向您的用户致意。 可以更改这些以定制体验。

Dialogflow 模拟器位于页面的右侧。 模拟器允许您通过说出或键入消息来试用聊天机器人。

creating-console-ui.png

查询聊天机器人

creating-006.png

聊天机器人最好被描述为 NLU (自然语言理解)模块。 这些可以包含在您的应用,产品或服务中,并将自然用户请求转换为可操作的数据。

是时候尝试你的聊天机器人了! 在右侧的 Dialogflow 模拟器中,单击“立即尝试”,输入任何内容的文本字段,然后按 Enter 键。

您刚刚与 Dialogflow 聊天机器人代理商交谈过! 您可能会注意到您的聊天机器人不了解您。 由于您的输入与任何意图都不匹配,因此匹配默认回退意图,并且您在该意图内收到一个默认回复。

默认回退意图回复提示用户以可匹配的方式重新构建其查询。 您可以更改 Default Fallback Intent 中的响应以提供示例查询,并指导用户发出可以与 intent 相匹配的请求。

创建你的第一意图

Dialogflow 使用意图来分类用户的意图。 意图有训练短语,这是用户可能对您的聊天机器人说的内容的示例。 例如,想要知道代理人姓名的人可能会问:“你的名字是什么?”,“你有名字吗?”,或者只是说“名字”。 所有这些查询都是唯一的,但具有相同的意图:获取聊天机器人的名称。

要覆盖此查询,请按照以下步骤创建意图:

  • 单击左侧菜单中 Intents 旁边的加号。

  • 将名称“ name ”添加到 Intent name 文本字段中。

  • 在 Training Phrases 部分中,单击文本字段并输入以下内容,在每个条目后按 Enter 键:

你叫什么名字? 你有名字吗? 名称

  • 在“响应”部分中,单击文本字段并输入以下响应:

我的名字是 Dialogflow !

  • 单击“保存”按钮。

creating-008.png

现在尝试询问聊天机器人的名称。 在右侧的模拟器中,输入“你叫什么名字?” 然后按 Enter 键。

即使您的查询与训练短语(“您的名字是什么?”与“您的名字是什么?”)略有不同,您的聊天机器人也会正确回复查询。 它能够通过使用机器学习来解决这个问题。

Dialogflow 使用训练短语作为机器学习模型的示例,以将用户的查询与正确的意图相匹配。 机器学习模型根据聊天机器人中的每个意图检查查询,为每个意图提供分数,并匹配得分最高的意图。 如果得分最高的意图得分非常低,则回退意图匹配。

后续还有下篇,内容抽取和上下文状态管理。 英文原文:https://dialogflow.com/docs/getting-started

磐创 AI:http://www.panchuangai.com/

智能客服,聊天机器人:http://www.panchuangai.com/

TensorFlow 教程:http://panchuang.net/


Python中如何构建一个简单的Google Dialogflow聊天机器人

1 回复

要构建一个简单的Google Dialogflow聊天机器人,你需要先安装必要的库,然后通过Dialogflow API与代理交互。这里用dialogflow库(Google Cloud官方SDK)来实现。

首先,确保安装库并设置认证:

pip install dialogflow

然后,你需要一个Google Cloud项目,并在Dialogflow中创建一个代理。获取服务账号的JSON密钥文件,并设置环境变量GOOGLE_APPLICATION_CREDENTIALS指向该文件。

下面是一个完整的示例代码,包含检测意图(用户输入处理)和创建会话实体(动态添加实体)的基本功能:

import dialogflow
from google.api_core.exceptions import InvalidArgument

# 项目配置
PROJECT_ID = 'your-google-cloud-project-id'
SESSION_ID = 'test-session'
LANGUAGE_CODE = 'zh-CN'  # 使用中文

def detect_intent(text):
    """向Dialogflow代理发送文本并获取响应"""
    session_client = dialogflow.SessionsClient()
    session = session_client.session_path(PROJECT_ID, SESSION_ID)
    
    text_input = dialogflow.TextInput(text=text, language_code=LANGUAGE_CODE)
    query_input = dialogflow.QueryInput(text=text_input)
    
    try:
        response = session_client.detect_intent(
            request={"session": session, "query_input": query_input}
        )
        return response.query_result.fulfillment_text
    except InvalidArgument as e:
        return f"调用API时出错: {e}"

def create_session_entity_type(entity_values):
    """动态创建会话级实体(仅在当前会话有效)"""
    session_client = dialogflow.SessionsClient()
    session = session_client.session_path(PROJECT_ID, SESSION_ID)
    
    # 定义实体类型
    entity_type = dialogflow.EntityType(
        name=f"{session}/entityTypes/custom_color",
        entities=[{"value": value, "synonyms": [value]} for value in entity_values],
        entity_override_mode=dialogflow.EntityType.EntityOverrideMode.ENTITY_OVERRIDE_MODE_OVERRIDE
    )
    
    session_entity_type = dialogflow.SessionEntityType(
        name=f"{session}/entityTypes/custom_color",
        entity_override_mode=dialogflow.SessionEntityType.EntityOverrideMode.ENTITY_OVERRIDE_MODE_OVERRIDE,
        entities=[{"value": value, "synonyms": [value]} for value in entity_values]
    )
    
    try:
        session_client.create_session_entity_type(
            parent=session,
            session_entity_type=session_entity_type
        )
        print("会话实体创建成功")
    except Exception as e:
        print(f"创建实体时出错: {e}")

# 使用示例
if __name__ == "__main__":
    # 先动态添加一些实体值
    create_session_entity_type(["深红色", "浅蓝色"])
    
    # 测试对话
    test_phrases = ["你好", "今天的天气怎么样?", "我喜欢深红色"]
    for phrase in test_phrases:
        response = detect_intent(phrase)
        print(f"用户: {phrase}")
        print(f"机器人: {response}\n")

这段代码做了两件事:detect_intent函数处理用户输入并返回机器人的回复;create_session_entity_type函数允许你在当前会话中添加自定义实体(比如颜色)。运行前记得替换PROJECT_ID为你的实际项目ID,并确保认证正确。

要扩展功能,你可以在Dialogflow控制台训练更多意图和实体,然后通过API调用。简单说就是:装好SDK、设好认证、调API处理对话。

回到顶部