使用Python SDK开发语录类技能模板
DuerOS-王超 发布于2018-10-09 19:36 浏览:807 回复:4
3
收藏

此技能模板是针对语录类技能设计的模板,如海贼王语录,游戏语录等。本文从技能交互、部署讲述如何快速搭建海贼王语录技能。

语录类技能模板的交互模型

语录类技能跟用户的交互很简单。用户说“来一个”,技能从语录列表中选取一条读给用户,用户可以继续说“来一个”继续听语录,或者说“退出”以结束交互。

使用模板开发技能的流程

新建技能

新建技能详情请参阅自定义技能创建

配置意图

意图配置详情请参阅意图、常用表达和槽位

语录类技能模板需要创建“获取语录”意图。获取语录意图如下图所示:

配置技能服务部署

语录类技能模板使用CFC部署技能服务。使用CFC部署技能服务详情请参阅 百度云CFC

修改CFC函数代码

开发者通过模板创建函数以后,可在线编辑函数。创建修改CFC函数具体流程如下:

  • 登录CFC控制台
  • 通过模板创建函数, 选择Python DuerOS Bot SDK模板
  • 将下面代码内容覆盖在线编辑框中代码
  • 修改 launch_request 方法中的相关内容,如 template.set_background_image(), template.set_title()中的参数
  • 修改 getQuotations 方法中的语录列表
  • 保存

CFC操作说明请参阅函数计算 CFC

#!/usr/bin/env python2
# -*- encoding=utf-8 -*-


import sys
import random
from dueros.Bot import Bot
from dueros.directive.Display.Hint import Hint
from dueros.directive.Display.RenderTemplate import RenderTemplate
from dueros.directive.Display.template.BodyTemplate1 import BodyTemplate1

reload(sys)
sys.setdefaultencoding('utf8')

class Test(Bot):

    def __init__(self, request_data):
        super(Test, self).__init__(request_data)
        self.add_launch_handler(self.launch_request)
        self.add_intent_handler('quotations', self.getQuotations)
        self.add_session_ended_handler(self.endRequest)

    def launch_request(self):
        """
        打开调用名
        """

        self.wait_answer()
        template = BodyTemplate1()
        template.set_title('海贼语录')
        template.set_plain_text_content('欢迎来到海贼语录,这里有大量海贼王热门语录,现在对我说“来一个”吧')
        template.set_background_image('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1532599113479&di=b16ae5e5bc91db7154587e5288c3c4d6&imgtype=0&src=http%3A%2F%2Fimg.ph.126.net%2FbBf1N2ya4JQs7nxKrLPH5g%3D%3D%2F3704210693512429887.jpg')
        template.set_token('0c71de96-15d2-4e79-b97e-e52cec25c254')
        renderTemplate = RenderTemplate(template)
        return {
            'directives': [renderTemplate],
            'outputSpeech': '欢迎来到海贼语录,这里有大量海贼王热门语录,现在对我说“来一个”吧'
        }

    def endRequest(self):
        return {
           'outputSpeech': '再见'
        }

    def getQuotations(self): 
        strs = ('一个人的死,对于这个世界来说不过是多了一座坟墓,但对于相依为命的人来说,却是整个世界都被坟墓掩埋',
            '艾斯:为什么遇到如此强大的敌人你也不愿逃跑?—— 那是因为身后,有至爱之人',
            '索隆:我不管这个世上的人怎么说我,我只想依照我的信念做事,绝不后悔,不管现在将来都一样!',
            '山治:不要随随便便同情失败者,这会伤了他的自尊心',
            '雷利:不知所措,才是人生',
            '索隆:灾难总是接踵而至,这正是世间的常理。你以为只要解释一下,就有谁会来救你吗?要是死了,就只能说明我不过是如此程度的男人',
            '人生充满了起起落落。关键在于,在顶端时好好享受;在低谷时不失勇气',
            '山治:能原谅女人谎言的才是真正的男人',
            '历史虽然会一再重演,但人类却无法回到过去。',
            '路飞:我不是英雄,我只做我想做的事,保护我想要保护的人而已',
            '路飞:你没听过这句伟大的名言么?“肚子饿了就要吃!”',
            '如果一直想着麻烦的事,只会更麻烦',
            '胜利和败北都要品尝、经历过四处逃窜的辛酸、痛苦和悲伤的回忆、这样才能独当一面、就算痛哭流涕也没关系!',
            '按照自己的喜好去做,得不到别人的赞赏也没关系',
            '谁也没有办法把过去发生的事情一笔勾销,要记住教训,勇敢的活下去',
            '艾斯:所有人都知道,自由并不是放纵,那是火一般的梦想',
            '娜美:遇到迷茫时,任何人都会变得软弱。 一旦坚信自己可以帮到别人,他们就会变得很强大',
            '路飞:我不是天生的王者,但我骨子里流动着不让我低头的血液',
            '索隆:人生中有些事你不竭尽所能去做,你永远不知道你自己有多出色',
            '蒂奇:只管把目标定在高峰,人家要笑就让他去笑!',
            '沙克洛克达尔:所谓理想,只是同时拥有实力的人才能说的“现实”。所谓弱就是一种罪',
            '路飞:将过去和羁绊全部丢弃,不要吝惜那为了梦想流下的泪水',
            '罗宾:历史虽然会一再重演,但人类却无法回到过去',
            '索隆:既然已经决定做一件事,那么除了当初决定做这件事的我之外,没人可以叫我傻瓜',
            '布鲁克:让我存活于这世上的力量既不是内脏也不是肌肉,没错,是灵魂',
            '索隆:受尽苦难而不厌,此乃修罗之道',
            '斯摩格:在这片海洋中,若无法向上攀游,就只有往下沉沦,是要前进或是溺死,就得看自己的选择。 既然这么不甘心,就变的更强!')
        quotaRan = random.randint(0,len(strs))
        content = str(strs[quotaRan])

        hintPro = Hint(['再来一个', '换一个', '换个', '再来一个'])
        renderTemplate = self.getTemplate(content)

        reprompt = '海贼语录没有听懂,可以对我说换一个或者退出'

        return {
            'directives': [hintPro, renderTemplate],
            'reprompt': reprompt,
            'outputSpeech': content
        }

    def getTemplate(self, content):
        self.wait_answer()
        template = BodyTemplate1()
        template.set_title('海贼语录')
        template.set_plain_text_content(content)
        template.set_background_image('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1532599113479&di=b16ae5e5bc91db7154587e5288c3c4d6&imgtype=0&src=http%3A%2F%2Fimg.ph.126.net%2FbBf1N2ya4JQs7nxKrLPH5g%3D%3D%2F3704210693512429887.jpg')
        template.set_token('0c71de96-15d2-4e79-b97e-e52cec25c254')

        renderTemplate = RenderTemplate(template)
        return renderTemplate


def handler(event, context):

    bot = Test(event)
    result = bot.run()
    return result

测试技能

至此,语录累技能就开发完成了。开发者可以在技能开放平台的模拟测试页面对技能进行测试。

收藏
点赞
3
个赞
共4条回复 最后由DuerOS-王超回复于2018-12-07 19:02
#2by123421回复于2018-10-10

0
#3背刺金刀juo回复于2018-10-11
该评论已删除
#4chuanmao1988回复于2018-12-07

有nodejs模板吗?

 

0
#5DuerOS-王超回复于2018-12-07
#4 chuanmao1988回复
有nodejs模板吗?
0
TOP