当前位置: 首页 > news >正文

AI-使用DeepEval对构建的RAG系统进行评测结果优化(三)

1.背景

承接文章:AI-使用DeepEval评测自己构建的RAG系统(二),从运行的评测结果来看,存在如下需要优化点:

- 1.检索上下文为空 : actual_output 显示"上下文中没有提供关于'大语言模型LLM是什么,有什么特点'的任何信息。"
- 2.Contextual Relevancy等指标得分为0 :因为检索到的上下文为空

2. 第一轮优化方案:

1)优化提示词模板

prompt = f"""你是一个专业的问答助手,任务是基于提供的上下文回答用户问题。上下文:
{context_str}问题:
{query}要求:
1. 优先基于提供的上下文回答
2. 引用具体的上下文内容支持你的回答
3. 如果上下文有相关信息,请尽可能详细地回答
4. 如果上下文没有相关信息,可以说明哪些方面没有涉及
5.保持回答简洁明了,使用自然、友好的语言 

回答:
"""

  2.优化检索算法,添加了基于词重叠的相似度和基于序列匹配的相似度

---定位检索上下文为空的原因:RAG系统虽然文档加载了(40个文档),但检索结果为空(0个结果),问题出在 similarity_search 方法的实现上,当前的实现只是简单地检查查询词是否在文档中,但可能由于词匹配算法过于简单,导致没有匹配到任何文档。

def similarity_search(self, query: str, k: int = 4) -> list[str]:# 改进的相似度搜索算法import difflibrelevant_docs = []# 将查询分词query_words = query.lower().split()for i, doc in enumerate(self.documents):# 获取文档文本if hasattr(doc, 'text'):doc_text = doc.textelif hasattr(doc, 'page_content'):doc_text = doc.page_contentelse:doc_text = str(doc)doc_lower = doc_text.lower()# 计算基于词重叠的相似度doc_words = doc_lower.split()common_word_count = len(set(query_words) & set(doc_words))# 计算基于序列匹配的相似度seq_similarity = 0for query_word in query_words:if len(query_word) > 2:  # 只考虑长度大于2的词seq_similarity += max([difflib.SequenceMatcher(None, query_word, doc_word).ratio() for doc_word in doc_words if len(doc_word) > 2] or [0])# 综合评分score = common_word_count + seq_similarityif score > 0:relevant_docs.append((doc_text, score, i))# 按分数排序并返回前k个relevant_docs.sort(key=lambda x: x[1], reverse=True)return [doc_tuple[0] for doc_tuple in relevant_docs[:k]]

 

3.优化效果分析

  •  1. 显著改进的指标

- Answer Relevancy : 从接近0提升到0.837(83.7%)
- Faithfulness : 达到0.913(91.3%)
- Pass Rate for Answer Relevancy : 达到75%

  •  2. 仍需改进的指标

- Contextual Relevancy, Precision, Recall : 仍为0,这可能是因为deepeval的评估方式与我们的检索结果不完全匹配
- Latency : 仍有待优化(通过率0%)

  •  3. 总体改进

- 检索功能 :现在能够正确检索相关文档
- 答案生成 :模型能够基于检索到的上下文生成详细、相关的答案
- 幻觉控制 :Faithfulness和Hallucination指标表现良好

  • 4.总结

我们成功解决了RAG系统查询上下文为空的问题,主要通过以下优化:

1.改进检索算法 :实现更有效的相似度匹配算法,使用词重叠和序列匹配相结合的方法

2. 优化提示词 :调整生成答案的提示词,鼓励模型更积极地使用检索到的上下文

4.第二轮优化

优化1:改进检索算法:使用更先进的检索算法

def similarity_search(self, query: str, k: int = 4) -> list[str]:# 使用更先进的相似度算法from sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.metrics.pairwise import cosine_similarityimport numpy as np# 确保向量化器已准备好self._prepare_vectorizer()if not self.doc_texts or self.doc_vectors is None:return []# 向量化查询query_vector = self.vectorizer.transform([query])# 计算查询与所有文档的余弦相似度similarities = cosine_similarity(query_vector, self.doc_vectors).flatten()# 按相似度排序doc_indices = np.argsort(similarities)[::-1]  # 降序排列# 返回最相关的k个文档top_k_indices = doc_indices[:k]top_k_similarities = similarities[top_k_indices]# 只返回相似度高于较低阈值的文档threshold = 0.01  # 降低阈值以允许更多文档filtered_docs = []filtered_similarities = []for idx, sim in zip(top_k_indices, top_k_similarities):if sim > threshold:filtered_docs.append(self.original_docs[idx])filtered_similarities.append(sim)# 如果没有超过阈值的文档,返回前k个中最相似的if not filtered_docs:filtered_docs = [self.original_docs[idx] for idx in top_k_indices[:k]]return filtered_docs[:k]

 优化2: 使用TF-IDF向量化器预计算文档向量,避免重复计算

 

    def _prepare_vectorizer(self):"""准备TF-IDF向量化器,仅在首次需要时初始化"""if self.vectorizer is None and self.doc_texts:from sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.metrics.pairwise import cosine_similarityimport numpy as np# 优化TF-IDF向量化器配置self.vectorizer = TfidfVectorizer(stop_words=None,  # 保留所有词lowercase=True,  # 转为小写ngram_range=(1, 2),  # 考虑单字和双字min_df=1,  # 最小文档频率max_df=0.9,  # 最大文档频率use_idf=True,  # 使用IDFsmooth_idf=True,  # 平滑IDFsublinear_tf=True  # 子线性TF缩放)# 将所有文档向量化self.doc_vectors = self.vectorizer.fit_transform(self.doc_texts)

  

优化方案总结

  •  1. Contextual Relevancy, Precision, Recall 指标优化

这些指标为0的主要原因是deepeval的评估方式与我们的实现不匹配。Contextual Relevancy等指标需要:

- 正确的retrieval_context(检索到的文档)
- 正确的input(查询)
- 适当的上下文相关性

  •  2. 延迟优化

延迟指标为0(通过率为0)表明系统响应时间过长。通过以下方式优化:

- 使用TF-IDF向量化器预计算文档向量,避免重复计算
- 降低模型temperature以获得更一致的输出
- 增加检索数量以提高找到相关文档的概率

  •  3. 实际改进效果

从评测结果看:

- Faithfulness : 已达到较高水平(0.964),表明生成内容与上下文一致性较好
- Answer Relevancy : 有一定改善(0.394),但仍需提升
- Contextual指标 : 仍为0,需要更深入的调整

 

http://www.jsqmd.com/news/532571/

相关文章:

  • Radxa E20C 安装 飞牛 fnOS
  • 好用的石材马赛克抛光机推荐哪家 - myqiye
  • 从“头皮”到“源空间”:脑电情感识别中功能连接(FC)的两种玩法与CR-GCN的启示
  • MAX30102心率血氧传感器与Arduino的完美搭配:从硬件连接到数据分析全流程
  • Metabase漏洞复现实战:从零搭建vulhub环境到RCE利用(CVE-2023-38646)
  • 银川AI营销平台决策指南:2026年初实力服务商深度评测与选择策略 - 2026年企业推荐榜
  • TinyNAS搜索空间揭秘:DAMO-YOLO轻量化背后的神经架构搜索逻辑
  • 别再只刷官方镜像了!手动构建RK3568 Ubuntu22.04根文件系统,深度定制你的开发环境
  • 2026年银川GEO代理服务深度测评:四家优选服务商与本地AI营销专家的选择之道 - 2026年企业推荐榜
  • 从0到1实现多平台直播推流:obs-multi-rtmp高效解决方案
  • 2026年阜康彩钢房选购指南:五大实力服务商深度解析与选型建议 - 2026年企业推荐榜
  • Vue项目内网部署,手把手教你搞定天地图离线瓦片下载与本地化部署(附Java爬虫源码)
  • 2026年亦庄楼盘推荐:改善家庭置业优选湖居洋房与配套兑现力分析 - 品牌推荐
  • 2026年佛山值得推荐的石材马赛克切割装置服务商家 - 工业品牌热点
  • 用DrugBAN搞定药物-靶点预测:从SMILES序列到蛋白,手把手跑通双线性注意力网络
  • 3分钟解锁B站缓存:m4s视频转换工具完全指南
  • 2026年RTC芯片厂家推荐:工业设备与车载系统高精度时钟方案靠谱选择指南 - 品牌推荐
  • 从沙子到芯片:用一张图看懂CMOS制造18步核心工艺(附高清流程图)
  • OpenCompass评测Qwen模型全流程解析:从环境配置到自定义数据集
  • 2026韩愢染发膏真实评价:轻染科技与温和护色体验 - 品牌排行榜
  • 2026精准锆石片抛光机费用多少,这些优质厂家可参考 - 工业设备
  • 别再手动输密码了!手把手教你用飞书IDP实现SAP Fiori单点登录(附SAML配置全流程)
  • Axure9实战:如何用90套高保真模板快速提升你的产品原型设计效率
  • 2026年初,新乡企业如何甄选有实力的百度爱采购服务伙伴? - 2026年企业推荐榜
  • Llama-3.2V-11B-cot部署案例:混合云架构下模型服务弹性扩缩容实践
  • 从零构建VGG16:PyTorch实战CIFAR-10图像分类全流程解析
  • 2026年,如何高效联系可靠的多介质过滤器生产厂家? - 2026年企业推荐榜
  • 2026年度盘点:这三家多介质过滤器生产商为何备受市场青睐? - 2026年企业推荐榜
  • SAP PO接口日志排查实战:从监控入口到错误分析的完整指南
  • 深度优化!GEC6818开发板如何无损替换uboot?巧用sd-fuse_s5p6818工具节省2小时