书接上回,在完成了性能方面的调整之后,接下来的就是对准确率的提升优化了。这次没有犹豫直接选择 RAGChecker 。原因很简单:简单,好使…
废话不多说了,直接上代码。如下图:
...
question_id = 0
class init_data:
def ollama_to_create_standard_data(self):
"""
使用ollama模型将ES中的随机数据处理成问题-答案对,写入到Excel文件中
"""
# 若路径下文件存在则删除文件
file_path = Path(self.excel_data_path)
if file_path.exists():
file_path.unlink()
contents = []
body={
"size": self.pick_size,
"query": {
"match_all": {
}
},
"sort": [
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "Math.random()"
},
"order": "asc"
}
}
]
}
# 遍历所有知识库索引
for index in self.index_arr:
...
rand_array = self.es.find_by_body(index_name,body,None)
contents.extend(row["_source"][text_field_name] for row in rand_array)
if len(contents) > 0:
total_arr = []
# 创建一个新的工作簿,保存问答对数据
wb = Workbook()
ws = wb.active
ws.append(["序号", "问题", "答案", "rag答案"])
# 遍历每一行内容
for content in contents:
# 为每一个问题都加上特定的提示词
you_question = [
{
"role": "user",
"content": f"{
content + self.ask}"
}
]
# 调用 ollama api 接口,使用 chat 模式
response_text,response_code = self.ol.remote_transfor_msg(you_question)
if response_code == 200:
data = json.loads(response_text)
response = data.get('content')
cleaned_string = response.replace('*', '').replace('-', '').replace('#', '').replace('1.', '').replace('2.', '').replace('3.', '').replace('4.', '').replace('5.', '')
qa_list = self._split_questions_and_answers(cleaned_string)
total_arr.extend(qa_list)
if len(total_arr) > 0:
for row in total_arr:
ws.append(row)
wb.save(self.excel_data_path)
def _split_questions_and_answers(self,result_string):
"""
此函数从聊天机器人获取结果字符串并将其拆分为问题和答案。
它假设结果字符串的格式为一系列问题和答案,每个问题以"问题:" 或“问:”每个答案都以“答案:”开头或“答:”。
这个函数返回一个元组列表,每个元组包含问题id、问题本身和答案。
问题id为从1开始递增分配。该函数还记录向日志记录器提问和回答。
"""
global question_id
questions_and_answers = []
current_question =