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 登录按钮:

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

创建和查询聊天机器人
本页介绍如何创建和试用您的第一个 Dialogflow 聊天机器人。
创建您的第一个 Dialogflow 聊天机器人 要创建 Dialogflow 聊天机器人:
打开浏览器并登录 Dialogflow。 单击左侧菜单中的“创建聊天机器人”。 输入聊天机器人的名称,默认语言和默认时区,然后单击“创建”按钮。

Dialogflow 控制台 您现在应该看到左侧的 Dialogflow 控制台和菜单面板。 如果您正在使用较小的屏幕并且菜单已隐藏,请单击左上角的菜单菜单按钮。 设置设置按钮将您带到当前代理的设置。
页面中间将显示代理的意图列表。 默认情况下,Dialogflow 聊天机器人以两个意图开头。 当您的聊天机器人不了解您的用户所说的内容时,您的聊天机器人会与默认后备意图相匹配。 默认欢迎意图向您的用户致意。 可以更改这些以定制体验。
Dialogflow 模拟器位于页面的右侧。 模拟器允许您通过说出或键入消息来试用聊天机器人。

查询聊天机器人

聊天机器人最好被描述为 NLU (自然语言理解)模块。 这些可以包含在您的应用,产品或服务中,并将自然用户请求转换为可操作的数据。
是时候尝试你的聊天机器人了! 在右侧的 Dialogflow 模拟器中,单击“立即尝试”,输入任何内容的文本字段,然后按 Enter 键。
您刚刚与 Dialogflow 聊天机器人代理商交谈过! 您可能会注意到您的聊天机器人不了解您。 由于您的输入与任何意图都不匹配,因此匹配默认回退意图,并且您在该意图内收到一个默认回复。
默认回退意图回复提示用户以可匹配的方式重新构建其查询。 您可以更改 Default Fallback Intent 中的响应以提供示例查询,并指导用户发出可以与 intent 相匹配的请求。
创建你的第一意图
Dialogflow 使用意图来分类用户的意图。 意图有训练短语,这是用户可能对您的聊天机器人说的内容的示例。 例如,想要知道代理人姓名的人可能会问:“你的名字是什么?”,“你有名字吗?”,或者只是说“名字”。 所有这些查询都是唯一的,但具有相同的意图:获取聊天机器人的名称。
要覆盖此查询,请按照以下步骤创建意图:
-
单击左侧菜单中 Intents 旁边的加号。
-
将名称“ name ”添加到 Intent name 文本字段中。
-
在 Training Phrases 部分中,单击文本字段并输入以下内容,在每个条目后按 Enter 键:
你叫什么名字? 你有名字吗? 名称
- 在“响应”部分中,单击文本字段并输入以下响应:
我的名字是 Dialogflow !
- 单击“保存”按钮。

现在尝试询问聊天机器人的名称。 在右侧的模拟器中,输入“你叫什么名字?” 然后按 Enter 键。
即使您的查询与训练短语(“您的名字是什么?”与“您的名字是什么?”)略有不同,您的聊天机器人也会正确回复查询。 它能够通过使用机器学习来解决这个问题。
Dialogflow 使用训练短语作为机器学习模型的示例,以将用户的查询与正确的意图相匹配。 机器学习模型根据聊天机器人中的每个意图检查查询,为每个意图提供分数,并匹配得分最高的意图。 如果得分最高的意图得分非常低,则回退意图匹配。
后续还有下篇,内容抽取和上下文状态管理。 英文原文:https://dialogflow.com/docs/getting-started
磐创 AI:http://www.panchuangai.com/
智能客服,聊天机器人:http://www.panchuangai.com/
TensorFlow 教程:http://panchuang.net/
Python中如何构建一个简单的Google Dialogflow聊天机器人
要构建一个简单的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处理对话。

