V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
1722332572
V2EX  ›  Python

Google Dialogflow 聊天机器人:使用 fulfillment 在 Google 上集成操作

  •  
  •   1722332572 · 2019-07-04 19:22:19 +08:00 · 1647 次点击
    这是一个创建于 1730 天前的主题,其中的信息可能已经有所发展或是发生改变。

    此页面介绍了如何通过 Google 上的操作将 Dialogflow 聊天机器人连接到您的服务。Fulfillment 允许您将数据库中的动态数据显示给用户。

    部署和启用 fulfillment

    要启用 fulfillment:

    • 单击左侧菜单中的 Fulfillment。如果看不到导航,请单击左上角的菜单按钮。

    • 单击“内联编辑器”旁边的开关启用内联编辑器。

    • 使用此文件中的代码替换内联编辑器中的代码。 代码

    • 单击页面底部的“部署”。

    您需要为创建第一个聊天机器人程序中创建的“ name ”意图启用 fulfillment:

    • 单击左侧菜单中的 Intents,然后单击“ name ”意图。

    • 向下滚动到 Fulfillment 部分,然后单击开关以启用它。

    注意:启用 fulfillment 会覆盖在意图的“响应”部分中设置的响应。

    • 单击“保存”按钮。

    创建一个处理程序

    处理程序是您可以在整个代码中调用的函数。这些处理程序设置为在匹配特定意图时运行。

    单击左侧菜单中的 Fulfillment 导航回到 Fulfillment 页面,然后查看代码。

    最后一行应如下所示:

    exports.dialogflowFirebaseFulfillment = functions.https.onRequest ( app )
    

    这是一个来自 Dialogflow 的处理 HTTP 请求的函数,它使用 Cloud Functions for Firebase。

    在以 exports.dialogflowFirebaseFulfillment 开头的最后一行上方添加以下代码:

    app.intent('name', conv => {
      conv.ask('My name is Dialogflow!')
    })
    

    当 Dialogflow 与“ name ”意图匹配时,上面的代码会响应用户的查询。

    要测试它,请单击页面底部的“部署”。完成后,输入“你的名字是什么?”来调用“名字”意图。进入右侧的模拟器。你应该看到你的新消息作为回应!

    在 fulfillment 中使用实体和上下文

    注意:本节中的任务需要具有 Dialogflow 实体和上下文的经验。确保您知道如何使用实体提取数据并在继续之前使用上下文管理状态。

    实体

    实体用于从用户的查询中提取参数值。您希望从用户的请求中获取的任何重要数据都必须具有相应的实体。

    在“使用实体提取数据”指南中,您创建了“语言”意图来识别语言和编程语言。意图有参数 language 和 ProgrammingLanguages。

    要访问这些参数:

    • 单击左侧菜单中的 Intents,然后单击“ Languages ”意图。

    • 在 intent 的 Fulfillment 部分下,单击“为此 intent 启用 webhook 调用”选项的开关。

    • 单击意图页面顶部的“保存”按钮。

    • 单击左侧菜单中的 Fulfillment。

    现在,您将编写一些代码来处理 fulfillment 中的“语言”意图。在以 exports.dialogflowFirebaseFulfillment 开头的最后一行上方添加以下代码:

    app.intent('Languages', (conv, {language, ProgrammingLanguage}) => {
      if (language) {
        conv.ask(`Wow! I didn't know you knew ${language}`);
      } else if (ProgrammingLanguage) {
        conv.ask(`${ProgrammingLanguage} is cool.`);
      } else {
        conv.ask(`What language do you know?`)
      }
    });
    

    在此代码中,您将检索参数 language 和 ProgrammingLanguages。当任一参数从 Dialogflow 发送到您的 fulfillment 中时,您构建与我们的 fulfillment 中相同的响应。如果没有发送参数,您可以使用其他响应来询问用户他们所知道的语言。

    要试用它,请单击“部署”并通过说“我知道如何说德语”之类的方式调用“语言”意图。

    上下文

    上下文表示用户请求的当前上下文。这有助于区分可能含糊不清或具有不同含义的短语,具体取决于用户的偏好,用户的地理位置,应用中的当前页面或对话主题。

    在具有上下文的管理状态指南中,您创建了“语言”意图的后续意图。如该页面所述,后续意图通过从父意图设置输出上下文并使用相同的上下文作为子意图的输入来工作。

    为了在您的实现中正确模仿相同的行为,您需要设置与 Dialogflow 相同的输出上下文,具有相同的生命周期(在上下文处于活动状态的会话轮次)和参数。 使用 conv.contexts.set 方法修改处理程序以包含上下文:

    
    app.intent('Languages', (conv, {language, ProgrammingLanguage}) => {
      if (language) {
        conv.ask(`Wow! I didn't know you knew ${language}`);
        conv.contexts.set('Languages-followup', 2, {language: language})
      } else if (ProgrammingLanguage) {
        conv.ask(`${ProgrammingLanguage} is cool.`);
        conv.contexts.set('Languages-followup', 2, {ProgrammingLanguage: ProgrammingLanguage})
      } else {
        conv.ask(`What language do you know?`)
      }
    });
    

    在此代码中,您将在上下文中添加名为“ languages-followup ”的输出上下文,生命周期为 2 轮,以及参数值( language 或 ProgrammingLanguages )以供以后检索。 单击“部署”以试用它。

    要在 fulfillment 中检索上下文,可以使用 conv.contexts.get 方法或使用 app.getContexts 获取所有上下文的列表。 例如,如果要为“ languages-followup ”后续意图创建 fulfillment 处理程序,它将如下所示:

    app.intent('Languages - custom', (conv, {duration}) => {
      const langContext = conv.contexts.get('languages-followup')
      const language = langContext.parameters.language || langContext.parameters.ProgrammingLanguage;
      conv.ask(`I can't believe you've know ${language} for ${duration.amount} ${duration.unit}!`);
    });
    
    

    英文原文: https://dialogflow.com/docs/getting-started/integrate-services-actions-on-google

    聊天机器人: http://www.panchuangai.com

    2 条回复    2019-07-12 10:25:46 +08:00
    loryyang
        1
    loryyang  
       2019-07-04 19:36:00 +08:00
    前司做过 NLP 方面的工作,当时调研感觉这种类似的开放平台挺多的,还有一些是纯图形化操作,不过大部分的感觉还是很简单
    NLP 在聊天方面的应用还是太难,就智能客服,FAQ 可以上。突破感觉还是看 alexa 和小冰吧,他们两个在两个不同的方向都做的挺好的
    1722332572
        2
    1722332572  
    OP
       2019-07-12 10:25:46 +08:00
    @loryyang 现在开放平台使用挺简单的了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2775 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:20 · PVG 20:20 · LAX 05:20 · JFK 08:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.