为了完善项目,我们计划新增一个页面,以实现用户输入关键词,从而到数据库中模糊查询。
实现逻辑:用户输入关键词,选择公司,首先根据公司查询该公司的高频考点,(如果用户没有选择公司,则不匹配公司名称,自动匹配关键词即可),查询到高频考点后,进入大模型生成的问题的表llmquestion中,模糊查询问题,从而在前端显示该公司对应于该关键词可能提问的问题,以供用户参考。
更新数据库
首先导入已经保存好的大模型的对于各个公司的面试问题的总结,依次导入,由于保存在了txt文件中,并且只保存了问题,未设置company字段保存company,所以在导入数据库之后需要对company字段进行更新
如图:
最终得到数据库中结果如图:
编写后端函数,返回前端需要的数据
根据前端需要的逻辑,编写代码,代码如下:
def showLLMQuestion():
if request.method == "POST":
company_list = request.json['data']['company']
keyword = request.json['data']['keyword']
sql = Database("xmsx")
try:
# 首如果前端没有选择公司:则默认只匹配关键词
if company_list:
# 如果前端传递了公司名,并且是一个列表
company_conditions = " OR ".join([f"company LIKE '%{company}%'" for company in company_list])
# 从词频表中选择前10个高频关键词
keyword_list = sql.execute(
f"SELECT keyword FROM keyword WHERE {company_conditions} ORDER BY frequence DESC LIMIT 10")
# 模糊匹配高频关键字
keywords = [keyword[0] for keyword in keyword_list]
keyword_conditions = " OR ".join([f"question LIKE '%{keyword}%'" for keyword in keywords])
sql_query = f"SELECT question FROM llmquestion WHERE ({company_conditions}) AND (question LIKE '%{keyword}%' OR {keyword_conditions} ) "
else:
sql_query = f"SELECT question FROM llmquestion WHERE question LIKE '%{keyword}%'"
result = sql.execute(sql_query)
print(result) # 调试信息:打印查询结果
except Exception as e:
print(e) # 调试信息:打印异常信息
return jsonify({'status': "error", 'message': "code error"})
else:
if not len(result) == 0:
return jsonify({'questions': [result[0], result[1],result[2],result[3],result[4],result[5],result[6],result[7],result[8],result[9]]});
else:
return {'status': 'success', 'questions': '无'}
编写前端函数
- 首先编写getDataOut.py,增加代码如下:
export const getLLMQuestion = params =>{
return request.post("/getLLMQuestion",{
data:params
}).then(res=>res)
}
- 其次,在前端vue文件中如下调用函数:
let params = {
company_list = this.currentCompany,
keywords = this.keyword
};
let ret = false;
try {
let res = await getLLMQuestion(params);
console.log(res);
if (res.title !== "无") {
this.currentData = {
result: res.questions,
};
ret = true;
// this.$message("获得面经");
} else {
this.$message("暂时还没有该部分的信息哦");
}
} catch (error) {
console.error(error);
}
return ret;
},
从而可以进行正常通信。
综上,我们就实现了前后端交互的数据可视化页面的展示。