ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

040-腾讯智能闲聊

2019-09-03 17:02:50  阅读:429  来源: 互联网

标签:str app question params key 腾讯 self 闲聊 040


腾讯智能闲聊

智能闲聊

官方地址:https://ai.qq.com/doc/nlpchat.shtml

import hashlib
import json
import time
import urllib
import urllib.request


class AIChatCls():
    def __init__(self, app_id='***', app_key='***',
                 url='https://api.ai.qq.com/fcgi-bin/nlp/nlp_textchat'):
        self.app_id = app_id
        self.app_key = app_key
        self.url = url

    def getReqSign(self, params):
        ''' 获取签名信息 '''

        # 1. 字典升序排序 (按 key 升序排列)
        params = dict(sorted(params.items(), key=lambda x: x[0]))

        # 2. 生成签名信息
        url_str = ''
        for k, v in params.items():
            if k != 'app_key':
                url_str += f"{k}={urllib.parse.quote(str(v), safe='')}&"
        else:
            url_str += f"app_key={urllib.parse.quote(str(params['app_key']), safe='')}"
            hash_md5 = hashlib.md5(url_str.encode("utf8"))
            sign = hash_md5.hexdigest().upper()
        return sign

    def getReqParams(self, question):
        '''
        向请求参数中添加签名信息和 question,并返回请求参数
        :param question: 聊天发起的问话或回答
        :return: 返回请求参数
        '''
        params = {
            'app_id': self.app_id,
            'app_key': self.app_key,
            'time_stamp': int(time.time()),
            'nonce_str': int(time.time()),
            'session': int(time.time() * 10000)
        }
        params['question'] = question
        params['sign'] = self.getReqSign(params)
        return params

    def doPost(self, question='你好,你叫什么名字?'):
        '''
        发起聊天请求
        :param question:
        :return:
        '''
        params = self.getReqParams(question=question)
        req_data = urllib.parse.urlencode(params).encode(encoding='utf-8')
        req = urllib.request.Request(self.url, data=req_data)
        rsp = urllib.request.urlopen(req)
        rsp_str = rsp.read().decode('utf-8')
        rsp_dict = json.loads(rsp_str)
        if rsp_dict.get('ret', '') == 0:
            return rsp_dict['data']['answer']
        else:
            print(rsp_dict)
        return None


if __name__ == '__main__':
    # 1】获取回复内容
    ac = AIChatCls()
    # reply = ac.doPost()
    # reply = ac.doPost('你多大了')
    reply = ac.doPost(question='你工作了吗?')
    print(reply)

    # 2】模拟聊天
    # ac = AIChatCls()
    # reply = ac.doPost(question='你工作了吗?')
    # while 1:
    #     print('机器人:',reply,'\n')
    #     print('我:')
    #     question = input()
    #     reply = ac.doPost(question=question)

参考:
[1]: https://blog.csdn.net/Rayn_Zhu/article/details/81093989

标签:str,app,question,params,key,腾讯,self,闲聊,040
来源: https://blog.csdn.net/weixin_42725107/article/details/92124513

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有