AI语音技能云开发(天猫精灵技能)学习笔记之二

简介: 结营作业

通过5天的学习,基本了解天猫精灵技能开发的流程,先总结一些知识点,然后做一个小demo,作为结营作业


一、名词解释

1、意图

意图(Intent)是自定义技能中提供功能的载体,所以在创建意图时需要明确此意图提供什么样的功能。

测试的时候可以看到意图标识,判断测试效果

2、实体

设置实体是为了告诉平台算法,当从用户语句中解析参数时,参数的取值范围是什么。

一般选择公共实体,阿里这边已经做了很多预先设定,比如时间,城市,数字等等

测试的时候可以看到参数,判断测试效果

3、前置意图

这是用来做参数传递的


二、一些坑

1、后台编辑时,要主要参数名词和平台设置的一致性,有些自动配置的公共变量有括号,括号也要带进来

image.png

2、如果要设置为前置意图的参数,那名词中不能带.不然是不能传递的


三、知识库

技能开发平台——文档中心image.gif      

输入关键字搜索,在下拉菜单中选择即可image.gif

 

demo:购物清单中物品的价格查询

一、登录,进入控制台,创建新技能

image.png

二、利用模板快速开发

点击后端服务,点击创建应用,关联阿里云开发账户

语言选择python,模板选择地理小百科,点击创建

image.png

三、编辑意图

等待一下,来到语言互交模型,发现意图已经自动帮我创建好了

点击左侧的实体,创建一个自定义实体,如图

image.png

回到意图,编辑欢迎意图

image.png

设置好之后,提交

image.gif 在上一条和下一条意图中,增加前置意图,设置好参数

image.png

image.png

四、编辑后台代码

点击代码编辑、前往ide开发

image.png

进入阿里云开发平台


点击右下角的终端,输入pip install requests 安装模块

image.png

代码如下

import logging
import json
import base64
import random
import collections
import requests
USER_MAP = {}
KNOWLEDGE = [
    "大米",
    "餐巾纸",
    "卫生纸",
    "酱油"    
]
KNOWLEDGEJJDid = [
    "4592915",
    "100015114144",
    "1082266",
    "100006624003"    
]
def jdprice(l_index):
  #京东
    URL ='https://p.3.cn/prices/mgets?skuIds='+KNOWLEDGEJJDid[l_index]
    headers = {
        'User-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36',
        'Cookie': '',
        'Connection': 'keep-alive',
        'Accept': '*/*',
        'Accept-Encoding': 'gzip, deflate, sdch',
        'Accept-Language': 'zh-CN,zh;q=0.8',
        'Host': 'p.3.cn',
        'Referer': 'https://book.jd.com/booktop/0-0-0.html?category=1713-0-0-0-10001-1'
    }   
    res = requests.get(URL,headers=headers)
    jdp=json.loads(res.text)
    return jdp[0]['p']
KNOWLEDGEJTB = [
    "55.3",
    "60",
    "56.9",
    "100006624003"    
]
def tbprice(l_index):
    return KNOWLEDGEJTB[l_index]
KNOWLEDGEJPDD = [
    "4592915",
    "100015114144",
    "1082266",
    "100006624003"    
]
def pddprice(l_index):
    return KNOWLEDGEJPDD[l_index]
def pricecx(l_index,maket):
    if maket=='京东':
        return jdprice(l_index)
    if maket=='淘宝':
        return tbprice(l_index)
    if maket=='拼多多':
        return pddprice(l_index) 
#print(pricecx(0,'淘宝'))
def common_reply(reply, result_type):
    response = {
        "isBase64Encoded": "false",
        "statusCode": "200",
        "headers": {"content-type": "application/json"},
        "body": {
            "returnCode": "0",
            "returnErrorSolution": "",
            "returnMessage": "",
            "returnValue": {
                "reply": reply,
                "resultType": result_type,
                "executeCode": "SUCCESS",
                "msgInfo": "",
            }
        }
    }
    return response
# 未指定追问参数,音箱自动开麦,用户的回答可跳转到其它意图
def ask_reply(reply):
    return common_reply(reply, 'ASK_INF')
# 结束对话的回复,回复后音箱闭麦
def result_reply(reply):
    return common_reply(reply, 'RESULT')
def handler(event, context):
    request = json.loads(event)
    logger = logging.getLogger()
    body = base64.b64decode(request['body']).decode()
    data = json.loads(body)
    maket=data['slotEntities'][0]['originalValue']
    logger.info('request body:' + body)
    # 从请求中获取意图参数以及参数值
    intent_name = data['intentName']
    user_id = getattr(data['requestData'], 'userOpenId', 'testUser')
    global USER_MAP
    linked_list = USER_MAP.get(user_id)
    # 欢迎意图 或 用户缓存数据为空
    if intent_name == "welcome" or linked_list is None:
        linked_list = collections.deque()
        random_index = random.randint(0, len(KNOWLEDGE) - 1)
        linked_list.append(random_index)
        USER_MAP[user_id] = linked_list
        return ask_reply(KNOWLEDGE[random_index]+'在'+maket+'平台的价格是'+pricecx(random_index,maket))
    # 下一个意图,随机选择一个内容回复,并将index追加到用户数据的List集合最后
    elif intent_name == "next":
        random_index = random.randint(0, len(KNOWLEDGE) - 1)
        linked_list.append(random_index)
        USER_MAP[user_id] = linked_list
        return ask_reply(KNOWLEDGE[random_index]+'在'+maket+'平台的价格是'+pricecx(random_index,maket))
    # 上一个意图,将用户数据的List集合中最后一个index移除,并返回该index的内容。首先要判断集合内是否有元素,没有则不需要移除
    elif intent_name == "prev":
        if len(linked_list) > 0:
            linked_list.pop()
        if len(linked_list) == 0:
            return ask_reply("这已经是第一个了。")
        return ask_reply(KNOWLEDGE[linked_list[len(linked_list) - 1]] +'在'+maket+'平台的价格是'+pricecx(linked_list[len(linked_list) - 1],maket))
    # 退出意图,清除用户缓存
    elif intent_name == "exit":
        USER_MAP.pop(user_id)
        return result_reply("已为您退出,再见。")
    return result_reply("请检查意图名称是否正确,或者新增的意图没有在代码里添加对应的处理分支。")

image.gif

代码还有许多需要优化修改的地方,主要是学习掌握,意图之间的参数传递等知识点。

目录
相关文章
|
2月前
|
人工智能 JavaScript 数据可视化
重磅发布:VTJ.PRO 赋能若依(RuoYi)「AI + 低代码」能力,企业级开发效率跃升 300%
VTJ.PRO 与若依(RuoYi)深度集成,融合双向代码穿梭、AI智能引擎及多模态渲染技术,打造“设计即生产”新体验。支持可视化开发、AI生成代码、旧组件重构,提升企业开发效率,助力数字化转型。
251 29
|
2月前
|
存储 关系型数据库 数据库
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
|
22天前
|
人工智能 自然语言处理 算法
提升LangChain开发效率:10个被忽视的高效组件,让AI应用性能翻倍
LangChain作为主流大语言模型应用框架,其高级组件常被忽视。本文详解10个高价值但低使用率的核心组件,如语义检索、多模板路由、智能查询转换等,结合技术原理与实践案例,助开发者构建更高效、智能、适应性强的AI系统,提升应用性能与业务价值。
130 0
|
13天前
|
人工智能 前端开发 Java
不用复杂开发!轻松实现博客 AI 摘要
本文介绍如何通过火山方舟与Deepseek-V3轻松实现博客AI摘要功能,涵盖智能总结、关键词提取、开发流程、流式输出优化及生产部署要点,助力提升阅读体验与用户留存。
60 0
|
18天前
|
存储 人工智能 运维
|
2月前
|
人工智能 数据可视化 开发工具
开发效率提升5倍!聚AI的LangFlow可视化全栈指南
LangFlow 是一个强大的可视化流程开发工具,支持全平台部署与多模型集成。通过 Docker 快速启动、本地开发或云服务部署,用户可灵活配置环境。其核心功能包括四大对象管理、可视化编程、自定义组件开发及与 LangChain 的深度整合,适用于客户服务、金融、医疗等多领域自动化流程构建。结合性能优化与版本管理,助力开发者高效实现企业级 AI 应用。
207 4
|
2月前
|
人工智能 文字识别 供应链
高校实验实训课程开发:基于现有的硬件基础和开源能力研发最前沿的AI实验课程
更多基于学校现有硬件基础:企业需求场景的开发和发展,更加注重上层数据和应用,各类工具软件的出现,极大提升了各类硬件的应用价值。我们看到各类硬件厂商,想方设法把硬件卖给学校,但是很多硬件不是在那里尘封,就是寥寥无几的使用场景,我们希望基于学校现有的硬件基础去开发更多面向不同行业或专业的实验实训课程,物尽其用。基于学校现有的硬件,集约开发,极大降低硬件投入成本。
92 7

热门文章

最新文章