用腾讯云搭建自己专属的私人AI助手

Mrzhou
Mrzhou
Mrzhou
257
文章
1
评论
2020年6月21日14:35:05 评论 952

本文有大量图文,方便学习者可以一步一步进行参考。

这里给大家准备了一个资料包:assistant.zip

下载地址:https://img.yingjoy.cn/qcloud/assistant.zip

用腾讯云搭建自己专属的私人AI助手

一、环境准备

点击即可跳转

1.1腾讯智能对话平台 TBP

现在正在公测申请,可以填写信息进行申请,秒过

1.1.1 申请 TBP

用腾讯云搭建自己专属的私人AI助手

用腾讯云搭建自己专属的私人AI助手

1.2 腾讯云服务器

手动滑稽

二、开始打造

2.1 创建TBP的Bot

Bot 是某一行业或领域(例如:音乐、新闻)相关意图的集合。相当于是一个功能模块。

点击创建:https://console.cloud.tencent.com/tbp/bots

Bot 标识名可以按照规则随意取一个

创建完成后点击配置

2.2 配置你的 Bot

用腾讯云搭建自己专属的私人AI助手

下面我来解释一下各指标的含义:

测试

对你的 Bot 进行测试,会弹出一个对话框。

用腾讯云搭建自己专属的私人AI助手

闲聊

开启后可以进行日常对话,如果不开启会出现只要不匹配意图就会回复兜底,如下面的情况:

用腾讯云搭建自己专属的私人AI助手

问答管理-阈值设置

调整问答命中灵敏度,问题和意图之间可接受的误差,比如下面这句话:

  • 意图: 你吃饭了吗
  • 问题: 你吃了午餐吗 (与意图匹配)
  • 问题: 吃了午餐 (与意图不匹配)

具体想知道意图和问题是否匹配可以使用腾讯云自然语言处理 NLP来测试

用腾讯云搭建自己专属的私人AI助手

如图,Similarity 为匹配相似度,测试结果为 0.95,意味着我们只要将阈值设置在 0.1 即可匹命中。

这里我不是很清楚这个对话平台是否采用了这个 API 来计算相似度,不过原理就是这么个原理,由于该平台还在公测,所以会存在一些不完善的地方,我坚信后面都会逐渐完善的。

兜底(fallback)

当机器人无法回复用户时,

  1. 若当前 Bot 开启了闲聊,则通过闲聊进行兜底;
  2. 若当前 Bot 没有开启闲聊,则返回兜底话术。

猜你想问设置

没有命中意图的时候会推荐相似的问题。

2.3 创建一个意图

点击左边导航菜单的: 语义模型 -> 意图管理

点击新建意图,按照规则创建意图名,这里我创建了一个weather

用腾讯云搭建自己专属的私人AI助手

点击配置,进行配置。

这里我用一个天气查询助手作为示例

这里借助了高德接口,感谢~

这里先看一下我们最终的成果,下面是手机端,PC端也有:

用腾讯云搭建自己专属的私人AI助手

这里只展示天气助手的开发

三、天气助手

3.1 编写接口

这里我采用了Python Flask框架来编写接口。

# -*- coding: utf8 -*-

import requests
import pandas as pd
from flask import Flask, make_response, jsonify, request, render_template

__author__ = 'YingJoy'

app = Flask(__name__)
GD_KEY = '高德地图的Key,可以去申请'


@app.route('/')
def index():
    """助手首页"""
    return render_template('index.html')


@app.route('/weather', methods=['POST'])
def weather_assistant():
    """
    天气查询助手,用于【玩转腾讯云】打造你的私人 AI 助手
    """
    request_body = request.json

    # 获取参数,这里为了演示就不做其他校验,直接取数据
    city_name = request_body['SlotInfoList'][0]['SlotValue']
    request_id = request_body['RequestId']

    # 读取城市编号,这是采用了高德地图的接口,详见:https://lbs.amap.com/api/webservice/guide/api/weatherinfo
    df = pd.read_excel('static/AMap_adcode_citycode_2020_4_10.xlsx', encoding='utf8')
    adcode = df[df['中文名'] == city_name]['adcode']
    if adcode.empty:
        # 如果城市不存在,返回错误,TBP会自动进行追问,当然也可以返回TBP支持的Response Body, 在WebHookStatus中指定错误
        return make_response('城市错误', 400)

    resp = requests.get(f'https://restapi.amap.com/v3/weather/weatherInfo?key={GD_KEY}&city={int(adcode)}')
    # 如果高德地图接口调用失败报错
    if resp.json()['status'] != '1':
        return make_response(str(resp.json()), 500)

    # 格式化天气格式
    weather_result = resp.json()['lives'][0]
    query_date = weather_result['reporttime']
    province = weather_result['province']
    weather = weather_result['weather']
    temperature = weather_result['temperature']
    humidity = weather_result['humidity']
    winddirection = weather_result['winddirection']
    windpower = weather_result['windpower']
    response_message = f"截至{query_date},{province} - {city_name}的天气为{weather}," \
                       f"温度:{temperature}°,湿度:{humidity},风向:{winddirection},风力:{windpower}。"

    # 构造返回体
    return jsonify({
        "RequestId": request_id,
        "SessionAttributes": "string",
        "ResponseMessage": {
            "ContentType": "PlainText",
            "Content": response_message
        },
        "WebHookStatus": ""
    })


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=4006, debug=True)

将接口部署到服务器即可。

3.2 接口部署

新用户可以免费体验 https://cloud.tencent.com/act/free 点击试用即可。

这里由于我早已不是新用户,所以我临时购买了一台服务器给大家演示~

我的服务器配置:

用腾讯云搭建自己专属的私人AI助手

3.2.1 安装Python环境

登录服务器编写脚本install.sh,将如下内容复制进去

yum groupinstall "Development Tools" -y
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
yum install libffi-devel -y

wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
tar xvf Python-3.8.1.tgz
cd Python-3.8.1/
./configure --prefix=/opt/python38
make && make install

echo "export PATH=\$PATH:/opt/python38/bin" >> /etc/profile
source /etc/profile

然后执行:

bash install.sh

等待一会服务器的Python环境就安装好了

3.2.2 安装Python库

我们采用pipenv作为服务器的Python虚拟环境,所以执行

pip3 install pipenv

用腾讯云搭建自己专属的私人AI助手

3.2.3 部署接口

注意:这里要修改main.py中的GD_KEY为你的Key才行,否则服务会启动失败

将我们的资料包放到服务器上,并解压

用腾讯云搭建自己专属的私人AI助手

进入assistant目录,执行命令,安装虚拟环境

pipenv install

用腾讯云搭建自己专属的私人AI助手

3.3 创建城市词典

点击 语义模型 -> 词典管理 -> 新建自定义词典

城市词典内置词典里也有,这里为了通用性,直接带大家创建一个自定义词典,内置词典直接点引用即可。

新建词典 city,点击配置

在添加词条处点击批量上传

用腾讯云搭建自己专属的私人AI助手

选择资料包中的static/词条批量上传模板.xlsx

这个文件就是点击下载模板后填入城市名称的表

也可以手动添加你喜欢的城市,用分号隔开

用腾讯云搭建自己专属的私人AI助手

导入成功后你可以得到这个词典。

3.4 配置意图

点击我们刚刚创建的weather意图,进行配置

3.2.1 创建用户说法

用户说法就是内置的问题,这里先介绍一下,这里的用户说法是可以使用{}进行参数申明的(即后面的槽位)。

根据这个槽位我们可以拿到主干信息进行对应的业务响应。

如:我要创建一个查询天气的问题:

用腾讯云搭建自己专属的私人AI助手

别忘了点添加哦

这里的CityName即为一个槽位

3.2.2 创建槽位

创建槽位用于接受参数,创建一个CityName接受之前说法中的城市名

用腾讯云搭建自己专属的私人AI助手

这里填写槽位名称为CityName,词典选择我们创建的city词典,可以选择必填。

追问是指如果没有在词典中找到对应的词系统就会回复该语句继续追问。

用腾讯云搭建自己专属的私人AI助手

别忘了点添加哦

3.2.3 服务实现

这里我们选用外部服务调用 (Web Service),让服务调用我们的接口。

这里我们填写我们上面部署的接口地址

用腾讯云搭建自己专属的私人AI助手

这里填入你的接口地址

这里延申一下接口的参考:

当用户发起提问时,服务器会受到包含JSON主体的POST请求

HTTP 头

POST / HTTP/1.1
Content-Type : application/json;charset=UTF-8
Host : your.application.endpoint
Content-Length :
Accept : application/json
Accept-Charset : utf-8

JSON 格式

{
  "RequestId": "string",
  "AppId": int,
  "BotId": "string",
  "BotName": "string",
  "IntentName": "string",
  "SlotInfoList": [
    {
      "SlotName": "string",
      "SlotValue": "string"
    },
    {
      "SlotName": "string",
      "SlotValue": "string"
    },
    {
      "SlotName": "string",
      "SlotValue": "string"
    },
    {
      "SlotName": "string",
      "SlotValue": "string"
    }
  ],
  "UserId": "string",
  "SessionAttributes": "string"
}

参数具体意思可以见:https://cloud.tencent.com/document/product/1060/37447

我这就不贴出来了,以免本文篇幅过长。

接口返回规范

这里要注意,我们的接口返回也是要遵循规范的

HTTP 头

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length:

响应正文(JSON)

{
  "RequestId": "响应的ID,返回req中的RequestId",
  "SessionAttributes": "string",
  "ResponseMessage": {
    "ContentType": "PlainText",
    "Content": "返回消息内容"
  },
  "WebHookStatus": ""
}

暂时只支持回复文本,很期待后面的图片和视频,结合AI可以有更多玩法,如果可以我后面会持续更新。

注:意图串联就是将多个意图组合成复杂逻辑,归根到底都是一个一个的意图,本文就不展开了

最后点击保存意图。即可。

3.5 修改接口配置

3.3.1 修改main.py中的GD_KEY为你的Key为你的Key

用腾讯云搭建自己专属的私人AI助手

3.3.2 发布你的Bot

点击左边导航的发布管理,点击发布上线,即可发布我们的Bot

用腾讯云搭建自己专属的私人AI助手
3.3.3 修改templates/index.htmliframesrc为你的src

点击应用接入,填写你的API密钥,可以通过API密钥管理创建一个

用腾讯云搭建自己专属的私人AI助手

在点击Web接入-> 接入设置

用腾讯云搭建自己专属的私人AI助手

复制这个src属性,替换服务器上assistant/templates/index.htmliframesrc标签

用腾讯云搭建自己专属的私人AI助手

保存退出后,执行下面的命令启动服务:

bash run.sh

之后用浏览器访问服务器的4003端口,你会得到如下:

用腾讯云搭建自己专属的私人AI助手

注意:如果发现端口无法访问,请检查服务器的防火墙是否关闭!

注意:如果发现端口无法访问,请检查服务器的防火墙是否关闭!

注意:如果发现端口无法访问,请检查服务器的防火墙是否关闭!

重要的事情说三遍

四、 成果

重新打开我们的首页

http://111.230.206.33:4003/

注:如果失效了,请自行部署一个,我的服务器是试用的临时机器 :(

五、结尾

这里只演示了一个很简单的示例,有了这个示例,我相信大家一定能够开发出更好玩的东西~

这里也非常期望未来腾讯智能对话平台 TBP的全新版本,比如图片交互,语音交互等等,这样结合更多AI组件,我们的私人AI助手能够越来越智能!

继续阅读
Mrzhou
  • 本文由 发表于 2020年6月21日14:35:05
  • 转载请务必保留本文链接:https://zhouxiaosong.com/1990.html
腾讯云所有云产品0元试用企业专区 资源分享

腾讯云所有云产品0元试用企业专区

活动时间 本活动为永久活动,订单型产品每天9:00开放领取,其余产品每天0点开放领取。 活动对象 活动入口 1. 通过大陆地区企业实名认证的用户; 2. 已购买、体验过对应腾讯云产品(包括包年包月和按...
腾讯云TRTC快速搭建在线教育互动课堂 脚本编程

腾讯云TRTC快速搭建在线教育互动课堂

受疫情影响,今年以来学生由线下涌至线上,在线教育互动课堂迎来了一个大的爆发。但是自己开发一个互动课堂的门槛还是相当高的,本文主要介绍了使用腾讯云实时音视频TRTC + 即时通信IM的能力快速搭建一个在...
腾讯云AI人脸识别服务免费领取 资源分享

腾讯云AI人脸识别服务免费领取

活动时间 即日起至2020年06月30日; 活动对象 腾讯云官网已注册且完成实名认证的国内站用户均可参与(协作者与子用户账户除外); 腾讯云AI 活动说明 1、活动优惠不能与其他优惠叠加,不能使用代金...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: