基于 Ragas 与通义千问实现 RAG 系统答案正确性自动评估
基于 Ragas 与通义千问实现 RAG 系统答案正确性自动评估本文基于 Ragas 评估框架与通义千问qwen-plus大模型结合 DashScope text-embedding-v3 向量模型构建 RAG检索增强生成系统的自动化评估流水线。通过 answer_correctness 指标量化评估模型生成答案与标准答案的一致性并进一步使用 context_recall 和 context_precision 评估检索质量。一、核心概念RAG 评估是什么RAGRetrieval-Augmented Generation系统将检索与生成结合先从知识库中检索相关文档再让 LLM 基于检索结果生成答案。但如何衡量 RAG 系统的输出质量这就是Ragas要解决的问题。评估维度指标说明答案质量answer_correctness生成答案与标准答案的一致程度检索质量context_recall检索到的文档覆盖标准答案的程度检索精度context_precision检索到的文档中相关内容的占比为什么需要自动评估传统方式依赖人工判断效率低且主观性强。Ragas 通过 LLM Embedding 的组合实现自动化、可量化的评估LLM 判断让大模型对比生成答案与标准答案的语义差异Embedding 相似度通过向量余弦相似度衡量语义接近程度综合评分两者加权得到最终分数二、系统架构评估数据集question answer ground_truthRagas evaluate 入口通义千问 qwen-plusLLM 语义判断DashScope text-embedding-v3向量相似度计算answer_correctness 评分输出评估报告 DataFrame核心组件组件版本/模型职责ragas评估框架定义评估指标与评估流程langchain_community工具库封装 Tongyi LLM 和 DashScope EmbeddingsdatasetsHuggingFace 数据集库构建标准化评估数据集qwen-plus通义千问作为裁判 LLM判断答案语义正确性text-embedding-v3DashScope 向量模型将文本转为向量计算语义相似度三、环境准备3.1 依赖安装pipinstalllangchain_community datasets ragas-ihttps://pypi.tuna.tsinghua.edu.cn/simple3.2 环境变量配置需要配置 DashScope API Key通义千问的 API 密钥DASHSCOPE_API_KEYsk-your-api-key-here说明Tongyi LLM 和 DashScopeEmbeddings 会自动从环境变量中读取DASHSCOPE_API_KEY无需手动传入。四、步骤详解步骤 1构建评估数据集评估数据包含三个核心字段data_samples{question:[杭州最值得去的景点有哪些,去成都旅游的话有哪些特色美食推荐,在西安游览时参观兵马俑需要提前预约吗],answer:[杭州西湖、灵隐寺和千岛湖是比较受欢迎的景点。,成都有很多好吃的比如火锅、串串香和担担面。,参观兵马俑不需要预约现场买票就可以进去。],ground_truth:[杭州必游景点包括西湖、灵隐寺、雷峰塔、千岛湖和宋城其中西湖是国家5A级景区建议清晨游览以避开人流。,成都作为美食之都推荐品尝火锅、串串香、担担面、龙抄手和钟水饺宽窄巷子和锦里是集中体验地道小吃的好去处。,参观秦始皇兵马俑博物馆必须通过官方平台提前实名预约购票旺季时需至少提前3天预约现场不保证有票。]}各字段含义字段说明示例question用户提问“杭州最值得去的景点有哪些”answerRAG 系统生成的答案“杭州西湖、灵隐寺和千岛湖…”ground_truth人工标注的标准答案“杭州必游景点包括西湖、灵隐寺、雷峰塔…”设计要点answer是不完整或有错误的回答ground_truth是完整且准确的标准答案。通过对比两者评估 RAG 系统的生成质量。步骤 2初始化 LLM 与 Embeddingfromlangchain_community.llms.tongyiimportTongyifromlangchain_community.embeddingsimportDashScopeEmbeddings# 裁判 LLM通义千问 qwen-plusllmTongyi(model_nameqwen-plus)# 向量模型DashScope text-embedding-v3embeddingsDashScopeEmbeddings(modeltext-embedding-v3)选型说明组件选型理由裁判 LLMqwen-plus语义理解能力强性价比高向量模型text-embedding-v3DashScope 最新向量模型中文语义表征好步骤 3执行评估fromdatasetsimportDatasetfromragasimportevaluatefromragas.metricsimportanswer_correctness# 构建评估数据集datasetDataset.from_dict(data_samples)# 执行评估scoreevaluate(datasetdataset,metrics[answer_correctness],llmllm,embeddingsembeddings)# 输出评估结果print(score.to_pandas())answer_correctness 的计算原理语义 F1 分数权重 75%LLM 将答案分解为原子陈述对比 TP/FP/FN向量相似度权重 25%通过 Embedding 余弦相似度衡量整体语义接近度步骤 4检索质量评估扩展当评估数据包含contexts检索到的文档片段时可以进一步评估检索质量fromragas.metricsimportcontext_recall,context_precision data_samples_with_context{question:[...],answer:[...],ground_truth:[...],contexts:[[西湖是杭州的核心景区...,灵隐寺是中国著名的佛教古刹...,千岛湖以湖泊和岛屿景观著称...],[成都被誉为美食之都...,串串香起源于四川街头...,担担面是川菜经典面食...],[秦始皇兵马俑位于陕西省...,兵马俑博物馆实行实名制预约购票制度...,旺季参观需至少提前3天预约...]]}scoreevaluate(datasetDataset.from_dict(data_samples_with_context),metrics[context_recall,context_precision],llmTongyi(model_nameqwen-plus),embeddingsDashScopeEmbeddings(modeltext-embedding-v3))检索指标说明指标含义计算方式context_recall检索覆盖度标准答案中的陈述有多少被检索文档覆盖context_precision检索精确度检索到的文档中有多少真正与问题相关五、评估结果分析评估结果结果分析问题预期分数区间分析杭州景点0.6~0.8答案覆盖了部分景点但遗漏了雷峰塔、宋城成都美食0.7~0.9答案基本正确但遗漏了龙抄手、钟水饺等兵马俑预约0.3~0.5答案事实错误说不需要预约与标准答案矛盾关键发现第 3 个问题的 answer 声称不需要预约而 ground_truth 明确指出必须提前预约。answer_correctness 会对这种事实性错误给予严厉扣分。六、核心技术点总结技术点实现方式作用LLM 裁判qwen-plus 判断语义正确性替代人工评估实现自动化Embedding 相似度text-embedding-v3 向量对比补充语义层面的整体相似度衡量原子陈述分解LLM 将答案拆解为独立事实精确计算 TP/FP/FNF1 相似度加权75% F1 25% 向量相似度兼顾事实准确性和整体语义HuggingFace DatasetsDataset.from_dict 构建数据标准化数据格式便于批量评估检索质量评估context_recall context_precision分离评估生成和检索两个环节七、延伸思考更多评估指标Ragas 还支持 faithfulness忠实度、answer_relevancy答案相关性等指标可全面评估 RAG 系统批量评估将评估数据集扩大到数百条统计各指标的平均分和分布自定义指标基于 Ragas 的 Metric API 实现领域特定的评估标准对比实验对比不同 LLMqwen-plus vs qwen-max作为裁判的评分差异检索优化闭环通过 context_recall 定位检索不足的 case针对性补充知识库文档CI/CD 集成将 Ragas 评估集成到 RAG 系统的持续集成流程中每次更新自动回归测试