类功能
功能描述
RAGEvaluator 类为检索增强生成(RAG)系统评测提供了统一接口,支持自定义评估指标,并可根据不同语言(如英文或中文)对评测提示词进行适配。
函数原型
from mx_rag.evaluate import RAGEvaluator RAGEvaluator(llm: LLM, embeddings: Embeddings)
输入参数说明
参数名 |
数据类型 |
可选/必选 |
说明 |
|---|---|---|---|
llm |
LLM |
必选 |
llm模块主要用于和大模型进行对话。需继承自langchain.llms.base.LLM,参考:Text2TextLLM类 |
embeddings |
Embeddings |
必选 |
词嵌入模块评估时需要对用户问题进行向量化,必须是TextEmbedding或者TEIEmbedding类的实例之一。 |
调用示例
from datasets import Dataset from mx_rag.embedding.service import TEIEmbedding from mx_rag.llm import Text2TextLLM, LLMParameterConfig from mx_rag.utils import ClientParam from mx_rag.evaluate import RAGEvaluator llm = Text2TextLLM( base_url="https://ip:port/v1/chat/completions", model_name="model name", llm_config=LLMParameterConfig(temperature=0.1, top_p=0.8), client_param=ClientParam(ca_file="/path/to/ca.crt"), ) embeddings = TEIEmbedding(url="https://ip:port/embed", client_param=ClientParam(ca_file="/path/to/ca.crt"),) sample_queries = [ "谁提出了相对论?", "谁因对放射性的研究而两次获得诺贝尔奖?", "艾萨克·牛顿对科学有什么贡献?", ] expected_responses = [ "阿尔伯特·爱因斯坦提出了相对论,这一理论改变了我们对时间、空间和引力的理解。", "玛丽·居里是一位物理学家和化学家,她进行了关于放射性的开创性研究,并两次获得诺贝尔奖。", "艾萨克·牛顿阐述了运动定律和万有引力定律,为经典力学奠定了基础。", ] retrieved_contexts = [["阿尔伯特·爱因斯坦的相对论彻底改变了我们对时间、空间和引力的认知。", "相对论由阿尔伯特·爱因斯坦提出,这一理论革新了我们对时间、空间和引力的理解。", "阿尔伯特·爱因斯坦通过提出相对论,重新定义了我们对时间、空间和引力的看法"], ["玛丽·居里是一位杰出的物理学家和化学家,她在放射性研究方面做出了开创性贡献,并两次荣获诺贝尔奖。" "作为物理学家和化学家,玛丽·居里在放射性领域的研究具有开创性意义,并因此两次获得诺贝尔奖。" "玛丽·居里是一位著名的物理学家和化学家,她因在放射性研究中的开创性工作而两次获得诺贝尔奖"], ["艾萨克·牛顿提出了运动定律和万有引力定律,为经典力学的发展奠定了基础。" "艾萨克·牛顿通过阐述运动定律和万有引力定律,为经典力学体系的建立做出了奠基性贡献。" "艾萨克·牛顿的运动定律和万有引力定律为经典力学的形成奠定了基石。"], ] # 大模型回答结果 responses = ["阿尔伯特·爱因斯坦提出了相对论", "玛丽·居里", "阐述了运动定律和万有引力定律,为经典力学奠定了基础。"] dataset = [] for query, contexts, response, reference in zip(sample_queries, retrieved_contexts, responses, expected_responses): dataset.append( { 'user_input': query, 'response': response, 'retrieved_contexts': contexts, 'reference': reference } ) evaluation_dataset = Dataset.from_list(dataset) evaluator = RAGEvaluator(llm=llm, embeddings=embeddings) metrics = ["faithfulness", "answer_relevancy", "context_precision", "context_recall"] result = evaluator.evaluate( metrics=metrics, dataset=evaluation_dataset.to_dict(), language="chinese" ) print(result)
父主题: RAGEvaluator