在本篇文章中,我将介绍如何使用LlamaIndex、GPT-4和中专API进行批量评估。我们将探讨如何设置环境、生成问题、运行批量评估并检验输出结果。本文将以Python代码为例,详细描述每一阶段的具体步骤。
环境设置
首先,我们需要安装所需的依赖包。确保你已经安装了llama-index-llms-openai
和llama-index-embeddings-openai
。
%pip install llama-index-llms-openai llama-index-embeddings-openai
接下来,我们需要附加到同一个事件循环,并设置API key。
import nest_asyncio
nest_asyncio.apply()
import os
import openai
os.environ["OPENAI_API_KEY"] = "你的API密钥"
# openai.api_key = os.environ["OPENAI_API_KEY"]
数据加载和索引创建
我们将使用SimpleDirectoryReader
来加载文档数据,并创建一个向量索引。
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Response
from llama_index.llms.openai import OpenAI
from llama_index.core.node_parser import SentenceSplitter
# 加载数据
documents = SimpleDirectoryReader("./test_wiki_data/").load_data()
# 创建向量索引
llm = OpenAI(temperature=0.3, model="gpt-3.5-turbo")
splitter = SentenceSplitter(chunk_size=512)
vector_index = VectorStoreIndex.from_documents(
documents, transformations=[splitter]
)
问题生成
为了运行批量评估,我们需要生成一些问题。可以使用DatasetGenerator
来生成问题集。
%pip install spacy datasets span-marker scikit-learn
from llama_index.core.evaluation import DatasetGenerator
dataset_generator = DatasetGenerator.from_documents(documents, llm=llm)
qas = dataset_generator.generate_dataset_from_nodes(num=3)
运行批量评估
定义批量评估运行器,并运行评估。
from llama_index.core.evaluation import BatchEvalRunner, FaithfulnessEvaluator, RelevancyEvaluator
# 使用GPT-4评价
gpt4 = OpenAI(temperature=0, model="gpt-4")
faithfulness_gpt4 = FaithfulnessEvaluator(llm=gpt4)
relevancy_gpt4 = RelevancyEvaluator(llm=gpt4)
runner = BatchEvalRunner(
{"faithfulness": faithfulness_gpt4, "relevancy": relevancy_gpt4},
workers=8,
)
eval_results = await runner.aevaluate_queries(
vector_index.as_query_engine(llm=llm), queries=qas.questions
)
检查输出结果
我们可以检查评估结果的详细信息,并报告总得分。
# 检查评估结果的键值
print(eval_results.keys())
# 打印具体的评价结果
print(eval_results["faithfulness"][0].dict().keys())
print(eval_results["faithfulness"][0].passing)
print(eval_results["faithfulness"][0].response)
print(eval_results["faithfulness"][0].contexts)
# 计算评估得分
def get_eval_results(key, eval_results):
results = eval_results[key]
correct = 0
for result in results:
if result.passing:
correct += 1
score = correct / len(results)
print(f"{key} Score: {score}")
return score
# 获取评估得分
score = get_eval_results("faithfulness", eval_results)
faithfulness Score: 1.0
score = get_eval_results("relevancy", eval_results)
relevancy Score: 1.0
可能遇到的错误
- API调用限制: 在使用中专API时,务必确认你有足够的调用额度。如果遇到频率限制,可以联系中专API提供方解决。
- 数据加载问题: 确保数据目录存在且文件格式正确,否则可能会导致加载失败。
- Evaluation失败: 如果评估过程中发生错误,建议检查API调用参数及传入的数据是否符合预期格式。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料