【从零开始】10. RAGChecker 提升回答准确率(番外篇)

书接上回,在完成了性能方面的调整之后,接下来的就是对准确率的提升优化了。这次没有犹豫直接选择 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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kida 的技术小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值