基于torch聊天机器人的API

基于torch聊天机器人的API

机器人模型地址:机器人

1.在项目根目录创建api.py文件

在这里插入图片描述

2.代码:

import flask,json,os
from flask import request

import train_eval
import sqlite3
import jieba
import logging
from config import Config

#创建一个服务,把当前这个python文件当做一个服务
server = flask.Flask(__name__)

#server.route()可以将普通函数转变为服务 登录接口的路径、请求方式
@server.route('/query',methods=['get','post'])
def query():
    opt = Config()
    # for k, v in kwargs.items(): #设置参数
    #     setattr(opt, k, v)   

    searcher, sos, eos, unknown, word2ix, ix2word = train_eval.test(opt)

    if os.path.isfile(opt.corpus_data_path) == False:
        preprocess()
    #获取通过url请求传参的数据
    input_question = request.json.get('word')
    query_res = metch(input_question)
    if(query_res == tuple()):
        output_words = train_eval.output_answer(input_question, searcher, sos, eos, unknown, opt, word2ix, ix2word)
    else:
        output_words = "您是不是要找以下问题: " + query_res[1] + ',您可以尝试这样: ' + query_res[2]
    # print('BOT > ',output_words)
    return json.dumps(output_words, ensure_ascii=False, indent=4)

def metch(input_question):
    jieba.setLogLevel(logging.INFO) #设置不输出信息
    conn = sqlite3.connect('./QA_data/QA.db')
    cursor = conn.cursor()
    stop_words = []
    with open('./QA_data/stop_words.txt', encoding='gbk') as f:
        for line in f.readlines():
            stop_words.append(line.strip('\n'))
    
    res = []
    cnt = {}
    question = list(jieba.cut(input_question, cut_all=False)) #对查询字符串进行分词
    for word in reversed(question):  #去除停用词
        if word in stop_words:
            question.remove(word)
    for tag in question: #按照每个tag,循环构造查询语句
        keyword = "'%" + tag + "%'"
        result = cursor.execute("select * from QA where tag like " + keyword)
        for row in result:
            if row[0] not in cnt.keys():
                cnt[row[0]]  = 0
            cnt[row[0]] += 1 #统计记录出现的次数
    try:
        res_id = sorted(cnt.items(), key=lambda d:d[1],reverse=True)[0][0] #返回出现次数最高的记录的id
    except:
        conn.close()
        return tuple() #若查询不出则返回空
    cursor.execute("select * from QA where id= " + str(res_id))
    res = cursor.fetchone()
    conn.close()
    if type(res) == type(tuple()):
        return res #返回元组类型(id, question, answer, tag)
    else:
        return tuple() #若查询不出则返回空



if __name__== '__main__':
    server.run(debug=True,port = 8888,host='0.0.0.0')#指定端口,host,0.0.0.0代表不管几个网卡,任何ip都可访问

运行

python api.py

这样端口为8888的机器人创建完成

3.尝试使用如图:

在这里插入图片描述
脚本需要的库参照项目说明,本文章目的是创建api机器人对接自己的公众号,目前正常使用。公众号:“骑马采花花”,可关注发消息与机器人聊天。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值