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

Rag操作-Ragas评估

一、Ragas评估指标List of available metrics - Ragas

分类指标名称指标含义适用问题场景解决思路问题指向
检索质量

ContextPrecision

(上下文精确度)

关注的是检索结果的排序质量,好结果是不是在前面。

1.检索器返回大量无关文档

2.向量数据库索引策略有误、相关文档排名低等。

1. 优化检索策略:采用混合检索


2. 重排序:提升Top结果的精确度。


3. 调整索引粒度:优化文档切分策略

检索器

ContextRecall

(上下文召回率)

检索到的上下文是否全面覆盖了参考答案所需的所有关键信息

1.关键文档未能被检索到(如未在Top-K中)

2.检索范围过窄、文档切分策略不当导致信息碎片化。

1. 扩大检索范围:适当增加Top-K检索数量


2. 查询改写:使用LLM对用户问题进行同义词扩展

3.问题分解:拆分为多个子问题进行检索。


4. 改进索引:优化文档的元数据和索引结构,确保关键信息能被有效定位。

检索器
ContextRelevance (上下文相关性)关注的是检索结果的内容质量,每个结果本身是不是精简相关。1.返回的上下文包含大量与问题无关的文本,导致信息冗余,干扰生成模型。

1. 动态上下文压缩:在检索后,使用LLM或提取模型对冗长文档进行总结或关键信息提取,仅保留核心内容。


2. 元数据过滤:在检索时利用文档的标签、章节标题等元数据进行预过滤。

检索器

ContextUtilization

(上下文利用率)

评估生成的答案在多大程度上利用了所提供的上下文信息生成模型“忽视”了提供的上下文,仅依赖自身知识生成通用回答。

1. 强化提示词指令:在系统提示中明确指令,如“请严格仅依据以下提供的上下文来回答问题,如果找不到答案,请说‘不知道’”。


2. 调整上下文格式:使用分隔符清晰标记上下文边界,或采用Few-shot示例引导模型行为。

生成器
生成质量

Faithfulness Groundedness

(忠实度)

评估生成的答案是否严格基于给定的上下文

检测和避免大模型“幻觉”的关键指标。

1.生成模型未严格遵循上下文

2.上下文过长导致信息稀释、模型本身存在幻觉倾向。

1. 更换其它模型


2. 优化提示与模型:使用更倾向于遵循上下文的模型(如经过相关微调的模型),并在提示中强调“禁止引入外部知识”。

生成器
AnswerRelevancy (答案相关性)
衡量生成的答案与原始问题的直接相关程度。生成模型理解了问题但答案偏离主题、答案中包含大量问题未询问的额外信息。1. 指令微调与提示:在提示词末尾重申核心问题。生成器

AnswerCorrectness

(答案正确性)

系统给出的最终答案,与标准答案相比,在事实上和完整性上有多接近。

1.答案在事实、数据、细节上与标准答案有出入。

2.检索或生成环节错误的最终体现。

1. 迭代优化链路:需通过提升前述所有环节(检索精度、召回、忠实度)来综合改善。整体系统
答案对比

AnswerSimilarity

(答案相似度)

衡量生成的答案与参考答案之间的语义相似性。答案在表述方式上与标准答案不同但语义相近,需进行更灵活的评估。1. 改进参考答案:确保参考答案本身具有足够的代表性和多样性,能覆盖合理的表述变体。整体系统
专项与实验性指标FactualCorrectness (事实正确性)专门用于评估答案在事实层面的准确性,可能涉及外部知识验证。需要对答案中声称的事实进行独立验证,而不仅检查是否源自上下文。

1. 外部知识库验证:构建一个关键事实核查流程,将答案中的实体、数据与可信外部知识库进行比对。


2. 多模型交叉验证:使用多个LLM或专门的事实核查模型对同一答案进行评估,综合判断

生成器

AspectCritic

(方面评判)

基于特定方面或标准对答案进行更细粒度的评判。需要根据业务场景对答案质量进行多维度的定制化评估

1. 定制化提示词:为每个评估方面设计专门的评判指令和Few-shot示例,例如:“请从‘专业性’角度评分:”。


2. 集成业务规则:将公司内部的质量标准或合规要求转化为具体的、可被LLM理解的评判规则。

生成器

ToolCallAccuracy/F1

(工具调用)

评估智能体正确调用工具的能力。智能体错误调用工具、参数格式错误、或在该调用工具时未调用。

1. 工具描述优化:为每个工具编写清晰、结构化、包含丰富示例的描述文档

智能体
Multi-modalMetrics (多模态指标)评估包含图像等多模态内容的RAG系统。系统处理图文混合信息时,生成的文本描述与图片内容不符1. 改进跨模态对齐:使用更强的多模态嵌入模型进行检索,确保图文语义对齐。
2. 专用生成模型:采用专门为图文理解优化的生成模型(如GPT-4V, LLaVA等),并在提示中明确要求关联图文信息。
多模态系统

二、评估代码实现

# 一、文档处理操作 # 二、构建ragas评估数据格式 # 三、ragas评估代码
import asyncio import pandas as pd from langchain_community.document_loaders import TextLoader from langchain_openai import ChatOpenAI from openai import OpenAI # 一、文档处理操作 # 转为document对象 loader = TextLoader("./text.txt", encoding="utf-8") document = loader.load() print(document) # 分割 from langchain_text_splitters import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=50) documents = text_splitter.split_documents(document) print(documents) # 向量存储 import os from langchain_community.embeddings import DashScopeEmbeddings from langchain_core.vectorstores import InMemoryVectorStore # 1. 初始化通义千问的 embedding 模型 llm_embeddings = DashScopeEmbeddings( model="text-embedding-v4", # 也可以 text-embedding-v1/v2/v3 dashscope_api_key=os.getenv("ali_api_key") ) # 2. 创建向量存储 vector_store = InMemoryVectorStore(llm_embeddings) # 3. 灌文档(你的 langchain_documents 列表) # _ = vector_store.from_documents(documents,llm_embeddings) # vector_store = InMemoryVectorStore(llm_embeddings) vector_store.add_documents(documents) # 检索器检索 retriever = vector_store.as_retriever(search_kwargs={"k": 2}) from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser api_key = os.getenv("ali_api_key") model = "qwen-plus" base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1" # langchain调用访问大模型 llm_model = ChatOpenAI(api_key=api_key, base_url=base_url, model=model) template = """Answer the question based only on the following context: {context} Question: {query} """ prompt = ChatPromptTemplate.from_template(template) qa_chain = prompt | llm_model | StrOutputParser() res = qa_chain.invoke({"context": retriever.invoke("Who is the CEO of OpenAI?"), "query": "Who is the CEO of OpenAI?"}) print(res) # 二、构建ragas评估数据格式 #---------- # 问题 # 检索器内容 # 模型答案 # 实际内容 # ------------ sample_queries = [ "Which CEO is widely recognized for democratizing AI education through platforms like Coursera?", "Who is Sam Altman?", "Who is Demis Hassabis and how did he gained prominence?", ] expected_responses = [ "Andrew Ng is the CEO of Landing AI and is widely recognized for democratizing AI education through platforms like Coursera.", "Sam Altman is the CEO of OpenAI and has played a key role in advancing AI research and development. He strongly advocates for creating safe and beneficial AI technologies.", "Demis Hassabis is the CEO of DeepMind and is celebrated for his innovative approach to artificial intelligence. He gained prominence for developing systems like AlphaGo that can master complex games.", ] from ragas import EvaluationDataset dataset = [] for query, reference in zip(sample_queries, expected_responses): relevant_docs = retriever.invoke(query) response = qa_chain.invoke({"context": retriever.invoke(query), "query": query}) # 键必须是这四个字段 dataset.append( { "user_input": query, "retrieved_contexts": [rdoc.page_content for rdoc in relevant_docs], "response": response, "reference": reference, } ) print(dataset) # 列表里面是字典 # [ # {'user_input': 'Which CEO is widely recognized for democratizing AI education through platforms like Coursera?', # 'retrieved_contexts': ['He is also widely recognized for democratizing AI education through platforms like Coursera.",'], # 'response': 'The CEO of OpenAI is Sam Altman.', # 'reference': 'Andrew Ng is the CEO of Landing AI and is widely recognized for democratizing AI education through platforms like Coursera.'}, # ] # 字典列表,封装成 Ragas 专用的 EvaluationDataset对象 evaluation_dataset = EvaluationDataset.from_list(dataset) print(evaluation_dataset) # 三、ragas评估过程 # ragas=0.2.0版本 from ragas import evaluate from ragas.metrics import AnswerCorrectness,AnswerRelevancy # 转为ragas可使用的模型实例 from ragas.llms import LangchainLLMWrapper from ragas.embeddings import LangchainEmbeddingsWrapper # 转换为ragas可识别的模型 embeddings = LangchainEmbeddingsWrapper(llm_embeddings) evaluator_llm = LangchainLLMWrapper(llm_model) # 评估 result = evaluate( dataset=evaluation_dataset, metrics=[ AnswerRelevancy(llm=evaluator_llm,embeddings=embeddings), AnswerCorrectness(llm=evaluator_llm,embeddings=embeddings,weights=[0.5,0.5]) ], llm=evaluator_llm, ) df = result.to_pandas() print(df) print(result) # 输出模板 import pandas as pd from openpyxl import Workbook # # 1. 显示所有列(不省略中间的列) pd.set_option('display.max_columns', None) # # 2. 显示每一列的完整内容(不省略长文字,比如 user_input) pd.set_option('display.max_colwidth', None) # # 3. 设置显示宽度为 None,防止终端换行导致看错乱(可选) pd.set_option('display.width', None)
http://www.jsqmd.com/news/1163335/

相关文章:

  • 客流统计如何赋能实体店员工配置优化:技术逻辑与落地实践
  • Eclipse Theia云原生IDE框架深度解析:架构设计与性能优化策略
  • Handy语音转文本模型量化技术解析与性能优化实践
  • Anthropic官方提示工程交互式教程:从入门到精通的完整学习体系
  • 3分钟快速分层:Layerdivider终极PSD分层工具完整指南
  • Graphviz Java终极指南:5个简单步骤在Java中创建专业图表
  • 智能设备售后服务升级:从被动响应到主动预防的全流程策略
  • AI 编程催生新商机:Slopfix 每周 1 万美元删 AI 生成代码引争议
  • 石油化工与新能源关键设备金相检测:蠕变、腐蚀性能微观分析应用
  • 2026 年爆火的 Harness Engineering 到底是什么?从原理到实战一文讲透
  • P1457 城堡 The Castle【洛谷算法习题】
  • 从代码到对话:3步让你的React应用听懂人话
  • 索尼DPT-RP1电子纸的终极Python管理方案:告别官方应用束缚
  • 2026跨省建筑资质代办怎么选?全国覆盖平台优选+异地办证避坑指南 - 信息热点
  • Python 函数使用举例:从基础到进阶
  • 东莞礼盒包装都求专业,为何有人却不选常规之选?
  • 基于TPA3128D2与STM32F756ZG的高效D类音频放大器设计
  • 500亿融资加持下DeepSeek大规模扩招,面试问题频出暴露人才筛选矛盾
  • 移动端的AI助手不应该只是客服窗口:更应该借助AI能力如何把小程序服务变成可调用能力
  • Techan.js技术指标库深度解析:构建专业金融图表的核心架构与性能优化
  • 如何轻松获取国家中小学智慧教育平台的电子课本:完整下载解决方案
  • 定制特殊工艺PCB:成本攀升环节与优化路径
  • 通信系统AI原生设计:面向6G的Agentic Native架构与工程实践
  • DeepFilterNet终极指南:3步掌握实时语音增强与跨平台部署
  • 客服岗简历总被刷?STAR-C模型把“接电话“写成“项目管理“——附真实案例与AI工具实测
  • Suno vs Udio:AI音乐生成工具的路线之争
  • 【专题09】监控体系面试题
  • 国产大模型双雄“同命不同价”:智谱赢麻,MiniMax会重走商汤老路吗?
  • 社会保障卡的密钥管理与安全机制完整研究
  • 内存价格反弹,存储芯片行情催生百亿富豪,深圳宏芯宇二次赴港上市