基于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机器人对接自己的公众号,目前正常使用。公众号:“骑马采花花”,可关注发消息与机器人聊天。