前面我都是使用的传统方法从简历中抽取信息,我转念一想,反正都要使用大模型,我干脆直接用大模型来做信息抽取
在后端编写接口,因为我们的大模型是部署在云服务器上的,所以需要在后端向云服务器发送请求。
整体流程如下:
- 根据前端传来的文件,用前文的方法提取所有的文字。
- 利用文本构建Prompt,让大模型从文本中提取出我们想要的部分(比如这里是建立中的项目经历部分)。
- 然后再用提取到的信息,重新构建Prompt,让大模型针对性提出面试问题。
@app.route('/upload_file', methods=['POST'])
def upload_file():
job = request.form.get('job')
company = request.form.get('company')
interview = request.form.get('interview')
f = request.files.get('file')
# 如果文件不存在
if f is None or f.filename == '':
return jsonify({'code': 400, 'message': 'No file part in the request'}), 400
# 保存文件
fname = secure_filename(f.filename) # 使用secure_filename来避免安全问题
file_path = fname # 这不是一个完整的路径,只是一个文件名
try:
f.save(file_path) # 使用f.save而不是手动打开和写入文件
except Exception as e:
return jsonify({'code': 500, 'message': f'Failed to save file: {str(e)}'}), 500
# 项目经历
text = pyMuPDF_fitz(file_path, './img_tmp')
if interview == "技术面":
prompt = f"这是我的简历{text},请提取出我的软件项目经历"
else:
prompt = f"这是我的简历{text},请提取出我的荣誉奖项,校园经历,个人评价"
extracted = Turing2(prompt)
question = f"你是{company}公司的面试官,我要面试{job}岗位,现在要进行{interview},这是我的简历相关信息{extracted},请你现在问5个面试问题,每个问题以问号结尾,确保每个问题一行"
result = Turing(question)
return jsonify({
'code': 200,
'result': result
})
结果如下:
改进Prompt
上面的Prompt比较粗糙,不够规范,改进如下:
text = pyMuPDF_fitz(file_path, './img_tmp')
if interview == "技术面":
prompt = f"从上文{text}中,提取"信息"(keyword,content),包括:"项目经历"类型的实体,输出json格式内容,字数不超过600字"
else:
prompt = f"从上文{text}中,提取"信息"(keyword,content),包括:"荣誉奖项"、"校园经历"、"个人评价"等类型的实体,输出json格式内容,字数不超过600字"
extracted = Turing2(prompt)
这样改进之后,使用引号明确了需要输出的内容,大模型的输出更加明确,而且限制了输出格式和输出字数,输出结果更加规范工整