好友
阅读权限30
听众
最后登录1970-1-1
|
本帖最后由 xhtdtk 于 2022-7-13 12:40 编辑
为什么我想做这个
————————————————
现在作为一个机器人老师,在暑期课程的时候想给孩子们领略一下AI的魅力,于是用百度UNIT做了一个聊天机器人。
效果图
————————————————
实现的界面功能
————————————————
1、添加滚动条跟随显示最新消息
2、绑定组合键ctrl+enter发送消息
3、弄两个小头像
申请闲聊机器人流程
————————————————
1、有自己的百度账号
2、打开百度UNIT后,选择“云端版”的“免费试用”,然后填写身份信息,手机验证
3、大概看一下新手教程,然后添加自己的机器人
4、取名字,对话流程控制选择第一个
5、进入刚刚创建的机器人,选择“技能管理”,选择“添加技能”
6、在弹出的页面那里选择“技能管理页”
7、选择“添加预设技能”
8、找到“闲聊”后,选择“添加预设技能”,也有很多别的技能可以选择
9、返回刚刚弹出的页面,选择技能,添加到机器人
10、可以进行测试了
11、先查看”API接口3.0“,然后再获取API的AK和SK(等会获取access_token用)
12、获取Python代码示例
[Python] 纯文本查看 复制代码
# encoding:utf-8
import requests
access_token = '#####调用鉴权接口获取的token#####'
url = 'https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat?access_token=' + access_token
post_data = "{"version":"3.0","service_id":"S10000","session_id":"","log_id":"7758521","request":{"terminal_id":"88888","query":"你好"}}"
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(url, data=post_data, headers=headers)
if response:
print (response.json())
代码写的不够漂亮对不对,而且文字要转化为UTF8编码,使用他的代码会报错,建议使用我的代码
[Asm] 纯文本查看 复制代码
# encoding:utf-8
import requests
import json
access_token = '#####调用鉴权接口获取的token#####'
url = 'https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat?access_token=' + access_token
post_data = {
"version":"3.0",
"service_id":"不是技能ID,是你的机器人ID",
"session_id":"",
"log_id":"日志ID随便填字母+数字",
"request":{
"terminal_id":"UNIT_DEV_+后缀随便填",
"query":”聊天内容,比如你好“,
}
}
post_data = json.dumps(post_data)
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(url, data=post_data, headers=headers)
lst=[]
if response:
for eachRes in response.json()['result']['responses']:
for eachActions in eachRes['actions']:
lst.append(eachActions['say'])
print(lst)
13、获取API的AK和SK(获取access_token用)
14、找到获取access_token的示例代码,获取access_token
[Python] 纯文本查看 复制代码
# encoding:utf-8
import requests
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
response = requests.get(host)
if response:
print(response.json())
15、尝试一下
这是我自己设置的干预规则,讲完界面后我再说一下怎么设置{:17_1068:}
界面设置流程
————————————————
1、设置界面大小,界面名称
[Python] 纯文本查看 复制代码 from tkinter import *
top=Tk()
top.title('闲聊机器人')
top.geometry('800x600')
top.mainloop()
2、添加静态图片
[Python] 纯文本查看 复制代码 from tkinter import *
from PIL import Image, ImageTk
top=Tk()
top.title('闲聊机器人')
top.geometry('800x600')
img1=ImageTk.PhotoImage(file='xxxxxxx.png')#建议写绝对路径,图片像素我是宽230x高255
label_img1=Label(top,image=img1)
label_img1.place(x=543,y=10)
img2=ImageTk.PhotoImage(file='xxxxxxx.png')#建议写绝对路径,图片像素我是宽230x高255
label_img2=Label(top,image=img2)
label_img2.place(x=543,y=277)
top.mainloop()
3、设置聊天框(Listbox)和滚动条(Scrollbar),因为滚动条可以帮助我们跟随最新消息
[Python] 纯文本查看 复制代码 from tkinter import *
from PIL import Image, ImageTk
top=Tk()
top.title('闲聊机器人')
top.geometry('800x600')
img1=ImageTk.PhotoImage(file='xxxxxxx.png')#建议写绝对路径,图片像素我是宽230x高255
label_img1=Label(top,image=img1)
label_img1.place(x=543,y=10)
img2=ImageTk.PhotoImage(file='xxxxxxx.png')#建议写绝对路径,图片像素我是宽230x高255
label_img2=Label(top,image=img2)
label_img2.place(x=543,y=277)
sb=Scrollbar(top)
sb.pack(side=RIGHT,fill=Y)
chatBox=Listbox(top,width=75,height=20,selectmode=EXTENDED,yscrollcommand=sb.set)
chatBox.place(x=10,y=10)
sb.config(command=chatBox.yview)
top.mainloop()
4、设置消息框(Text)
[Python] 纯文本查看 复制代码 from tkinter import *
from PIL import Image, ImageTk
top=Tk()
top.title('闲聊机器人')
top.geometry('800x600')
img1=ImageTk.PhotoImage(file='xxxxxxx.png')#建议写绝对路径,图片像素我是宽230x高255
label_img1=Label(top,image=img1)
label_img1.place(x=543,y=10)
img2=ImageTk.PhotoImage(file='xxxxxxx.png')#建议写绝对路径,图片像素我是宽230x高255
label_img2=Label(top,image=img2)
label_img2.place(x=543,y=277)
sb=Scrollbar(top)
sb.pack(side=RIGHT,fill=Y)
chatBox=Listbox(top,width=75,height=20,selectmode=EXTENDED,yscrollcommand=sb.set)
chatBox.place(x=10,y=10)
sb.config(command=chatBox.yview)
postBox=Text(top,width=75,height=10,wrap=WORD)
postBox.place(x=10,y=400)
top.mainloop()
5、设置发送按钮(Button)
[Python] 纯文本查看 复制代码 from tkinter import *
from PIL import Image, ImageTk
top=Tk()
top.title('闲聊机器人')
top.geometry('800x600')
img1=ImageTk.PhotoImage(file='xxxxxxx.png')#建议写绝对路径,图片像素我是宽230x高255
label_img1=Label(top,image=img1)
label_img1.place(x=543,y=10)
img2=ImageTk.PhotoImage(file='xxxxxxx.png')#建议写绝对路径,图片像素我是宽230x高255
label_img2=Label(top,image=img2)
label_img2.place(x=543,y=277)
sb=Scrollbar(top)
sb.pack(side=RIGHT,fill=Y)
chatBox=Listbox(top,width=75,height=20,selectmode=EXTENDED,yscrollcommand=sb.set)
chatBox.place(x=10,y=10)
sb.config(command=chatBox.yview)
postBox=Text(top,width=75,height=10,wrap=WORD)
postBox.place(x=10,y=400)
postButton=Button(top,bd=3,text=' 发 送 ')
postButton.place(x=485,y=540)
top.mainloop()
6、封装闲聊机器人示例代码
[Python] 纯文本查看 复制代码 from tkinter import *
from PIL import Image, ImageTk
import random
import requests
import json
def postMessage(newMessage):
access_token = '24.6ba370dea2b0a0adb18feceb9fbc366e.2592000.1659929073.282335-26663451'
url = 'https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat?access_token=' + access_token
post_data = {
"version":"3.0",
"service_id":"S72063",
"session_id":"",
"log_id":"xht13724033518",
"request":{
"terminal_id":"UNIT_DEV_XHT",
"query":newMessage,
}
}
post_data = json.dumps(post_data)
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(url, data=post_data, headers=headers)
lst=[]
if response:
for eachRes in response.json()['result']['responses']:
for eachActions in eachRes['actions']:
lst.append(eachActions['say'])
return random.choice(lst)
top=Tk()
top.title('闲聊机器人')
top.geometry('800x600')
img1=ImageTk.PhotoImage(file='机器人1.png')
label_img1=Label(top,image=img1)
label_img1.place(x=543,y=10)
img2=ImageTk.PhotoImage(file='零橙教育1.png')
label_img2=Label(top,image=img2)
label_img2.place(x=543,y=277)
sb=Scrollbar(top)
sb.pack(side=RIGHT,fill=Y)
chatBox=Listbox(top,width=75,height=20,selectmode=EXTENDED,yscrollcommand=sb.set)
chatBox.place(x=10,y=10)
sb.config(command=chatBox.yview)
postBox=Text(top,width=75,height=10,wrap=WORD)
postBox.place(x=10,y=400)
postButton=Button(top,bd=3,text=' 发 送 ')
postButton.place(x=485,y=540)
top.mainloop()
7、按钮(Button)绑定事件
[Python] 纯文本查看 复制代码 from tkinter import *
from PIL import Image, ImageTk
import random
import requests
import json
def postMessage(newMessage):
access_token = '#####调用鉴权接口获取的token#####'
url = 'https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat?access_token=' + access_token
post_data = {
"version":"3.0",
"service_id":"不是技能ID,是你的机器人ID",
"session_id":"",
"log_id":"日志ID随便填字母+数字",
"request":{
"terminal_id":"UNIT_DEV_+后缀随便填",
"query":”聊天内容,比如你好“,
}
}
post_data = json.dumps(post_data)
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(url, data=post_data, headers=headers)
lst=[]
if response:
for eachRes in response.json()['result']['responses']:
for eachActions in eachRes['actions']:
lst.append(eachActions['say'])
return random.choice(lst)
def getMessage():
newMessage=postBox.get('1.0','end')#获取消息框(Text)信息
chatBox.insert('end','老师:'+newMessage)#聊天框(Listbox)加入我发送的信息,并放在聊天框最下面
repMessage=postMessage(newMessage)#获取聊天机器人的说话内容(刚刚我封装的代码)
chatBox.insert('end','机器人:'+repMessage)#聊天框(Listbox)加入机器人发送的信息,并放在聊天框最下面
chatBox.yview("moveto",1.0)#聊天框(Listbox)通过滚动条的功能跟随并显示最新消息
postBox.delete('1.0','end')#清除消息框(Text)的内容
top=Tk()
top.title('闲聊机器人')
top.geometry('800x600')
img1=ImageTk.PhotoImage(file='机器人1.png')
label_img1=Label(top,image=img1)
label_img1.place(x=543,y=10)
img2=ImageTk.PhotoImage(file='零橙教育1.png')
label_img2=Label(top,image=img2)
label_img2.place(x=543,y=277)
sb=Scrollbar(top)
sb.pack(side=RIGHT,fill=Y)
chatBox=Listbox(top,width=75,height=20,selectmode=EXTENDED,yscrollcommand=sb.set)
chatBox.place(x=10,y=10)
sb.config(command=chatBox.yview)
postBox=Text(top,width=75,height=10,wrap=WORD)
postBox.place(x=10,y=400)
postButton=Button(top,bd=3,text=' 发 送 ',command=getMessage)#绑定按钮事件
postButton.place(x=485,y=540)
top.mainloop()
8、绑定快捷建(ctrl+enter)
[Python] 纯文本查看 复制代码 from tkinter import *
from PIL import Image, ImageTk
import random
import requests
import json
def postMessage(newMessage):
access_token = '#####调用鉴权接口获取的token#####'
url = 'https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat?access_token=' + access_token
post_data = {
"version":"3.0",
"service_id":"机器人ID",
"session_id":"",
"log_id":"随便填写",
"request":{
"terminal_id":"UNIT_DEV_XHT",
"query":newMessage,
}
}
post_data = json.dumps(post_data)
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(url, data=post_data, headers=headers)
lst=[]
if response:
for eachRes in response.json()['result']['responses']:
for eachActions in eachRes['actions']:
lst.append(eachActions['say'])
return random.choice(lst)
def getMessage():
newMessage=postBox.get('1.0','end')#获取消息框(Text)信息
chatBox.insert('end','老师:'+newMessage)#聊天框(Listbox)加入我发送的信息,并放在聊天框最下面
repMessage=postMessage(newMessage)#获取聊天机器人的说话内容(刚刚我封装的代码)
chatBox.insert('end','机器人:'+repMessage)#聊天框(Listbox)加入机器人发送的信息,并放在聊天框最下面
chatBox.yview("moveto",1.0)#聊天框(Listbox)通过滚动条的功能跟随并显示最新消息
postBox.delete('1.0','end')#清除消息框(Text)的内容
def getMessageBindCE(Nothing):#绑定快捷键需要加一个可能没有用的参数
newMessage=postBox.get('1.0','end')#获取消息框(Text)信息
chatBox.insert('end','老师:'+newMessage)#聊天框(Listbox)加入我发送的信息,并放在聊天框最下面
repMessage=postMessage(newMessage)#获取聊天机器人的说话内容(刚刚我封装的代码)
chatBox.insert('end','机器人:'+repMessage)#聊天框(Listbox)加入机器人发送的信息,并放在聊天框最下面
chatBox.yview("moveto",1.0)#聊天框(Listbox)通过滚动条的功能跟随并显示最新消息
postBox.delete('1.0','end')#清除消息框(Text)的内容
top=Tk()
top.title('闲聊机器人')
top.geometry('800x600')
img1=ImageTk.PhotoImage(file='机器人1.png')
label_img1=Label(top,image=img1)
label_img1.place(x=543,y=10)
img2=ImageTk.PhotoImage(file='零橙教育1.png')
label_img2=Label(top,image=img2)
label_img2.place(x=543,y=277)
sb=Scrollbar(top)
sb.pack(side=RIGHT,fill=Y)
chatBox=Listbox(top,width=75,height=20,selectmode=EXTENDED,yscrollcommand=sb.set)
chatBox.place(x=10,y=10)
sb.config(command=chatBox.yview)
postBox=Text(top,width=75,height=10,wrap=WORD)
postBox.place(x=10,y=400)
postButton=Button(top,bd=3,text=' 发 送 ',command=getMessage)
postButton.place(x=485,y=540)
top.bind("<Control-Return>",getMessageBindCE)#绑定快捷键
top.mainloop()
设置干预规则
————————————————
1、在”我的闲聊“选择自己的技能
2、设置干预规则
3、重新上线发布
4、效果
最后的话
————————————————
一分学习,一分经验,换来一份总结
我越来越觉得Python是一个存放工具的大箱子,各种库是给我们使用的工具,我越来越敬仰制作箱子和工具的人
我也只是站在他们的肩膀上
————————————
好像后面会自动添加重复的图片,我也不知道
###请自动忽略后面没用的图片###
|
免费评分
-
查看全部评分
|