文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

ContextRelevanceEvaluator

ContextRelevanceEvaluator 使用 LLM 来评估上下文是否与问题相关。它不需要真实标签。

pipeline 中的最常见位置单独使用或在评估管道中使用。应在已生成 Evaluator 输入的单独管道之后使用。
强制运行变量"questions": 问题列表

"contexts": 上下文列表的列表,它们是文档的内容。这相当于每个问题有一个上下文列表。
输出变量一个包含

- score: 一个从 0.0 到 1.0 的数字,表示平均精度均值

- individual_scores: 个别平均精度得分列表,范围从 0.0 到 1.0,对应于检索文档列表和真实文档列表的每个输入对 -results: 字典列表,键为statementsstatement_scores。它们包含 LLM 从每个上下文中提取的陈述以及每个陈述对应的上下文相关性分数,这些分数要么是 0,要么是 1。
API 参考Evaluators (评估器)
GitHub 链接https://github.com/deepset-ai/haystack/blob/main/haystack/components/evaluators/context_relevance.py

概述

您可以使用ContextRelevanceEvaluator 组件用于评估 Haystack 管道(例如 RAG 管道)检索到的文档,而无需真实标签。该组件将上下文分解为多个陈述,并检查每个陈述是否与回答问题相关。上下文相关性的最终分数是一个从 0.0 到 1.0 的数字,表示与提供的问题相关的陈述的比例。

参数

此评估器的默认模型为gpt-4o-mini。您可以在初始化期间使用chat_generator 参数覆盖模型。这需要是一个配置为返回 JSON 对象的聊天生成器实例。例如,在使用 OpenAIChatGenerator 时,您应该在其{"response_format": {"type": "json_object"}} 中传递generation_kwargs.

如果您不是使用 OpenAI 以外的聊天生成器来初始化评估器,则必须将有效的 OpenAI API 密钥设置为OPENAI_API_KEY 环境变量。有关详细信息,请参阅我们关于密钥管理的 文档页面

两个可选的初始化参数是

  • raise_on_failure: 如果为 True,则在 API 调用失败时引发异常。
  • progress_bar: 在评估期间是否显示进度条。

ContextRelevanceEvaluator 有一个可选的examples 参数,可用于传递符合 ContextRelevanceEvaluator 预期输入和输出格式的少量示例。这些示例包含在发送给 LLM 的提示中。因此,示例会增加提示的 token 数量,并使每个请求更加昂贵。如果您想在 token 数量增加的代价下提高评估质量,添加示例会很有帮助。ContextRelevanceEvaluator 组件用于评估基于提供的问题和上下文生成的响应。由于该组件检测到上下文中有一个与问题相关的陈述,因此返回得分为 1.0。

每个示例都必须是一个包含键的字典inputsoutputs.
inputs 必须是一个包含键的字典questionscontexts.
outputs 必须是一个包含statementsstatement_scores.
以下是预期格式

[{
	"inputs": {
		"questions": "What is the capital of Italy?", "contexts": ["Rome is the capital of Italy."],
	},
	"outputs": {
		"statements": ["Rome is the capital of Italy.", "Rome has more than 4 million inhabitants."],
		"statement_scores": [1, 0],
	},
}]

用法

单独使用

下面是一个示例,我们使用ContextRelevanceEvaluator 组件用于评估基于提供的问题和上下文生成的响应。由于该组件检测到上下文中有一个与问题相关的陈述,因此返回得分为 1.0。ContextRelevanceEvaluator 返回得分为 1.0,因为它检测到上下文中有一个与问题相关的陈述。

from haystack.components.evaluators import ContextRelevanceEvaluator

questions = ["Who created the Python language?"]
contexts = [
    [
        "Python, created by Guido van Rossum in the late 1980s, is a high-level general-purpose programming language. Its design philosophy emphasizes code readability, and its language constructs aim to help programmers write clear, logical code for both small and large-scale software projects."
    ],
]

evaluator = ContextRelevanceEvaluator()
result = evaluator.run(questions=questions, contexts=contexts)
print(result["score"])
# 1.0
print(result["individual_scores"])
# [1.0]
print(result["results"])
# [{'statements': ['Python, created by Guido van Rossum in the late 1980s.'], 'statement_scores': [1], 'score': 1.0}]

在 pipeline 中

下面是一个示例,我们使用FaithfulnessEvaluator 和一个ContextRelevanceEvaluator 在管道中用于根据提供的问题评估 RAG 管道收到的响应和上下文(文档的内容)。运行管道而不是单个组件可以简化计算多个指标的操作。

from haystack import Pipeline
from haystack.components.evaluators import ContextRelevanceEvaluator, FaithfulnessEvaluator

pipeline = Pipeline()
context_relevance_evaluator = ContextRelevanceEvaluator()
faithfulness_evaluator = FaithfulnessEvaluator()
pipeline.add_component("context_relevance_evaluator", context_relevance_evaluator)
pipeline.add_component("faithfulness_evaluator", faithfulness_evaluator)

questions = ["Who created the Python language?"]
contexts = [
    [
        "Python, created by Guido van Rossum in the late 1980s, is a high-level general-purpose programming language. Its design philosophy emphasizes code readability, and its language constructs aim to help programmers write clear, logical code for both small and large-scale software projects."
    ],
]
responses = ["Python is a high-level general-purpose programming language that was created by George Lucas."]

result = pipeline.run(
		{
			"context_relevance_evaluator": {"questions": questions, "contexts": contexts},
	    "faithfulness_evaluator": {"questions": questions, "contexts": contexts, "responses": responses}
    }
)

for evaluator in result:
    print(result[evaluator]["individual_scores"])
# [1.0]
# [0.5]
for evaluator in result:
    print(result[evaluator]["score"])
# 1.0
# 0.5

相关链接

在我们的 API 参考中查看参数详情