类功能
功能描述
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