80 LlamaIndex 响应评估全攻略

LlamaIndex 响应评估全攻略

在大型语言模型(LLM)的应用开发中,评估生成的响应质量是提升应用性能的关键步骤。LlamaIndex 提供了丰富的评估模块,帮助开发者有效地衡量和优化 LLM 的输出。本文将详细介绍如何使用 LlamaIndex 进行响应评估。

使用 BaseEvaluator

LlamaIndex 中的所有评估模块都继承自 BaseEvaluator 类,该类包含两个主要方法:

  1. evaluate 方法:接受查询、上下文、响应和额外关键字参数。

    def evaluate(
        self,
        query: Optional[str] = None,
        contexts: Optional[Sequence[str]] = None,
        response: Optional[str] = None,
        **kwargs: Any,
    ) -> EvaluationResult:
    
  2. evaluate_response 方法:提供一个替代接口,接受一个 LlamaIndex 的 Response 对象(包含响应字符串和源节点),而不是单独的上下文和响应。

    def evaluate_response(
        self,
        query: Optional[str] = None,
        response: Optional[Response] = None,
        **kwargs: Any,
    ) -> EvaluationResult:
    

这两个方法功能相同,但在直接使用 LlamaIndex 对象时更简单。

使用 EvaluationResult

每个评估器在执行时会输出一个 EvaluationResult

eval_result = evaluator.evaluate(query=..., contexts=..., response=...)
eval_result.passing  # 二进制通过/失败
eval_result.score  # 数值分数
eval_result.feedback  # 字符串反馈

不同的评估器可能会填充结果字段的一个子集。

评估响应的忠实度(即幻觉)

FaithfulnessEvaluator 评估答案是否忠实于检索到的上下文(即是否存在幻觉)。

from llama_index.core import VectorStoreIndex
from llama_index.llms.openai import OpenAI
from llama_index.core.evaluation import FaithfulnessEvaluator

# 创建 LLM
llm = OpenAI(model="gpt-4", temperature=0.0)

# 构建索引
...

# 定义评估器
evaluator = FaithfulnessEvaluator(llm=llm)

# 查询索引
query_engine = vector_index.as_query_engine()
response = query_engine.query(
    "What battles took place in New York City in the American Revolution?"
)
eval_result = evaluator.evaluate_response(response=response)
print(str(eval_result.passing))

你也可以选择单独评估每个源上下文:

from llama_index.core import VectorStoreIndex
from llama_index.llms.openai import OpenAI
from llama_index.core.evaluation import FaithfulnessEvaluator

# 创建 LLM
llm = OpenAI(model="gpt-4", temperature=0.0)

# 构建索引
...

# 定义评估器
evaluator = FaithfulnessEvaluator(llm=llm)

# 查询索引
query_engine = vector_index.as_query_engine()
response = query_engine.query(
    "What battles took place in New York City in the American Revolution?"
)
response_str = response.response
for source_node in response.source_nodes:
    eval_result = evaluator.evaluate(
        response=response_str, contexts=[source_node.get_content()]
    )
    print(str(eval_result.passing))

你将得到一个结果列表,对应 response.source_nodes 中的每个源节点。

评估查询 + 响应的相关性

RelevancyEvaluator 评估检索到的上下文和答案是否与给定的查询相关且一致。

注意,这个评估器需要传入查询,除了 Response 对象。

from llama_index.core import VectorStoreIndex
from llama_index.llms.openai import OpenAI
from llama_index.core.evaluation import RelevancyEvaluator

# 创建 LLM
llm = OpenAI(model="gpt-4", temperature=0.0)

# 构建索引
...

# 定义评估器
evaluator = RelevancyEvaluator(llm=llm)

# 查询索引
query_engine = vector_index.as_query_engine()
query = "What battles took place in New York City in the American Revolution?"
response = query_engine.query(query)
eval_result = evaluator.evaluate_response(query=query, response=response)
print(str(eval_result))

同样,你也可以在特定源节点上进行评估:

from llama_index.core import VectorStoreIndex
from llama_index.llms.openai import OpenAI
from llama_index.core.evaluation import RelevancyEvaluator

# 创建 LLM
llm = OpenAI(model="gpt-4", temperature=0.0)

# 构建索引
...

# 定义评估器
evaluator = RelevancyEvaluator(llm=llm)

# 查询索引
query_engine = vector_index.as_query_engine()
query = "What battles took place in New York City in the American Revolution?"
response = query_engine.query(query)
response_str = response.response
for source_node in response.source_nodes:
    eval_result = evaluator.evaluate(
        query=query,
        response=response_str,
        contexts=[source_node.get_content()],
    )
    print(str(eval_result.passing))

问题生成

LlamaIndex 还可以使用你的数据生成问题进行回答。结合上述评估器,你可以创建一个完全自动化的评估流程:

from llama_index.core import SimpleDirectoryReader
from llama_index.llms.openai import OpenAI
from llama_index.core.llama_dataset.generator import RagDatasetGenerator

# 创建 LLM
llm = OpenAI(model="gpt-4", temperature=0.0)

# 构建文档
documents = SimpleDirectoryReader("./data").load_data()

# 定义生成器,生成问题
dataset_generator = RagDatasetGenerator.from_documents(
    documents=documents,
    llm=llm,
    num_questions_per_chunk=10,  # 设置每个节点的数量
	rag_dataset = dataset_generator.generate_questions_from_nodes()
	questions = [e.query for e in rag_dataset.examples]

批量评估

我们还提供了一个批量评估运行器,用于在多个问题上运行一组评估器。

from llama_index.core.evaluation import BatchEvalRunner

runner = BatchEvalRunner(
    {"faithfulness": faithfulness_evaluator, "relevancy": relevancy_evaluator},
    workers=8,
)

eval_results = await runner.aevaluate_queries(
    vector_index.as_query_engine(), queries=questions
)

总结

通过 LlamaIndex 的评估模块,开发者可以轻松地对 LLM 生成的响应进行多方面的评估,包括忠实度、相关性等。这些评估工具不仅帮助开发者了解模型的性能,还能指导模型的进一步优化。希望本文能帮助你更好地理解和应用 LlamaIndex 的评估功能。如果你有任何问题或需要进一步的帮助,请随时联系我们。祝你在 LLM 开发的道路上取得成功!

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Llamaindex是一个开源的搜索引擎,可以用于快速搜索和索引大型数据集。为了在本地部署Llamaindex,您需要按照以下步骤进行操作。 首先,您需要从Llamaindex的官方GitHub页面上下载源代码。确保您的计算机已安装了Git系统,然后使用命令行工具输入以下命令来克隆代码库: ``` git clone https://github.com/llama-lab/llamaindex.git ``` 下载完成后,进入项目文件夹并创建一个Python虚拟环境。使用以下命令可以创建一个虚拟环境: ``` python3 -m venv llama-env ``` 然后需要激活虚拟环境。在Mac和Linux系统下,使用以下命令: ``` source llama-env/bin/activate ``` 在Windows系统下,使用以下命令: ``` llama-env\Scripts\activate ``` 接下来,安装Llamaindex的依赖项。在虚拟环境中运行以下命令: ``` pip install -r requirements.txt ``` 等待依赖项安装完成后,可以开始配置Llamaindex。编辑`config.yaml`文件,根据您的需求进行相应的修改。您可以设置数据集的路径、索引文件的位置和其他相关参数。 完成配置后,运行以下命令来创建索引: ``` python3 llama.py -f path/to/dataset ``` 上述命令中的`path/to/dataset`应替换为实际的数据集路径。运行该命令后,Llamaindex会开始索引数据集。 当索引完成后,您可以使用以下命令来搜索索引中的数据: ``` python3 llama.py -s "your search query" ``` 您可以将`"your search query"`替换为实际的搜索关键字。Llamaindex将返回与关键字匹配的结果。 以上就是在本地部署Llamaindex的步骤。祝您在使用Llamaindex时取得成功!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值