Python2调用UNIT2.0的代码示例
tiancorn 发布于2018-08 浏览:6431 回复:16
2
收藏
最后编辑于2019-08

下面是Python2调用UNIT2.0的代码示例

其中client_id要写自己的BOT对应的API key,client_secret要替换成自己的Secret Key

bot_id也要替换成自己的。

# encoding:utf-8

import urllib, urllib2
import sys
import json
#print sys.getdefaultencoding()
reload(sys)
sys.setdefaultencoding('utf-8')
#print sys.getdefaultencoding()
# client_id 为从UNIT的【发布上线】模块进入百度云创建应用后获取的API Key
client_id='XXXXXXXX'
#client_secret 为从UNIT的【发布上线】模块进入百度云创建应用后获取的Secret Key
client_secret='YYYYYYYY'
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+client_id+'&client_secret='+client_secret
#上面的XXXXXXX 要替换成自己的API Key,YYYYYY要换成自己的Secret Key
request = urllib2.Request(host)
request.add_header('Content-Type', 'application/Json_test; charset=UTF-8')
response = urllib2.urlopen(request)
access_token = json.load(response)["access_token"]
#真实业务中要把access_token 存到redis里,不能频繁的创建access_token(频繁创建会影响性能,导致一些对话失败),access_token默认有效期为30天,要自己写定时任务在30天到期前自动更新
#print access_token

url = 'https://aip.baidubce.com/rpc/2.0/unit/bot/chat?access_token=' + access_token
query = "帮我定明天北京到深圳的高铁票"
#下面的log_id在真实应用中要自己生成,可是递增的数字
log_id ='7758521'
#下面的user_id在真实应用中要是自己业务中的真实用户id、设备号、ip地址等,方便在日志分析中分析定位问题
user_id='222333'
#下面要替换成自己的bot_id
bot_id='ZZZZ'
post_data = '{\"bot_session\":\"\",\"log_id\":\"'+log_id+'\",\"request\":{\"bernard_level\":1,\"client_session\":\"{\\\"client_results\\\":\\\"\\\", \\\"candidate_options\\\":[]}\",\"query\":\"' + query + '\",\"query_info\":{\"asr_candidates\":[],\"source\":\"KEYBOARD\",\"type\":\"TEXT\"},\"updates\":\"\",\"user_id\":\"'+user_id+'\"},\"bot_id\":'+bot_id+',\"version\":\"2.0\"}'
request = urllib2.Request(url, post_data)

request.add_header('Content-Type', 'application/Json_test;charset=UTF-8')
response = urllib2.urlopen(request)
content = response.read()
#if content:
#    print content
data = json.loads(content)
print '用户问: '+ query
print 'BOT答复: ' + data['result']['response']['action_list'][0]['say']
print '意图: ' + data['result']['response']['schema']['intent']
slots = data['result']['response']['schema']['slots']
#print '词槽: ' + slot[0]['name'] + " = " +slot[0]['original_word']
for slot in slots:
    print '词槽: ' + slot['name'] + " = " +slot['original_word']

获取access_token需要先获取BOT的API Key和Secret Key:

需要先在BOT的【发布上线】模块下进入百度云创建应用

如果你的对话BOT将来集成到自己的业务中是需要同时使用语音输入和语音回复,可以在创建百度云应用 选择接口时选上语音识别、语音合成,如上图。

 

 

 

 

 

 

收藏
点赞
2
个赞
共16条回复 最后由1小杨肖回复于2019-08
#191小杨肖回复于2019-08
#18 半醉半醒半疯Z回复
282008,The request content type is illegal.,非法请求内容类型。 可能是请求数据的编码有问题,所有参数都使用 UTF8 编码。 另外可以参考下面的链接理解传入参数的具体形式是怎样的,然后再操作代码。 https://ai.baidu.com/forum/topic/show/944007 https://ai.baidu.com/forum/topic/show/870075
展开

好的。谢谢。我先看看

0
#18半醉半醒半疯Z回复于2019-08
#17 1小杨肖回复
你好,请问一下,我在使用代码API调用 多轮对话获取结果的时候,会出现282008错误。可是我使用代码中生成的post_data 在postman工具里面调用的话,会正常反馈结果。请问一下,这个是什么原因呢?
展开

282008,The request content type is illegal.,非法请求内容类型。

可能是请求数据的编码有问题,所有参数都使用 UTF8 编码。

另外可以参考下面的链接理解传入参数的具体形式是怎样的,然后再操作代码。

https://ai.baidu.com/forum/topic/show/944007

https://ai.baidu.com/forum/topic/show/870075

0
#171小杨肖回复于2019-08

你好,请问一下,我在使用代码API调用 多轮对话获取结果的时候,会出现282008错误。可是我使用代码中生成的post_data 在postman工具里面调用的话,会正常反馈结果。请问一下,这个是什么原因呢?

0
#16wangwei8638回复于2019-06
#15 zxcvbnm123a123回复
没有

现在有了

0
#15zxcvbnm123a123回复于2019-05
#9 y_leconte回复
有python3 调用unit2.0 的代码吗。。

没有

0
#14tiancorn回复于2019-01
#13 cbjxjy回复
有php 调用unit2.0 的代码吗。

https://ai.baidu.com/docs#/UNIT-v2-API/41351cb4  这个文档里有

0
#13cbjxjy回复于2019-01

有php 调用unit2.0 的代码吗。

0
#12伊茨米可回复于2018-12
#11 天空丶微笑灬回复
有没有java的

http://ai.baidu.com/docs#/UNIT-v2-API/top

0
#11天空丶微笑灬回复于2018-12

有没有java的

0
#10伊茨米可回复于2018-11
#9 y_leconte回复
有python3 调用unit2.0 的代码吗。。

https://ai.baidu.com/forum/topic/show/869881

0
#9y_leconte回复于2018-11

有python3 调用unit2.0 的代码吗。。

1
#6伊茨米可回复于2018-09
#5 文风少羽回复
C#,多轮请求代码示例,谢谢

http://ai.baidu.com/docs#/UNIT-v2-API/top

0
#5文风少羽回复于2018-09
#2 伊茨米可回复
如果大家有其他计算机语言的示例代码需要,欢迎留言~

C#,多轮请求代码示例,谢谢

0
#4tiancorn回复于2018-09
#3 星空下hh回复
问一下,进行多轮对话的时候传入session_id为啥不行啊,下一轮对话话上次对话并没有关联,想问一下有没有多轮对话的代码呢
展开

把你传session_id的代码贴出来看看

0
#3星空下hh回复于2018-09
#2 伊茨米可回复
如果大家有其他计算机语言的示例代码需要,欢迎留言~

问一下,进行多轮对话的时候传入session_id为啥不行啊,下一轮对话话上次对话并没有关联,想问一下有没有多轮对话的代码呢

0
#2伊茨米可回复于2018-08

如果大家有其他计算机语言的示例代码需要,欢迎留言~

0
TOP
切换版块