昇腾社区首页
中文
注册
开发者
下载

类功能

功能描述

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)