Ragas 中的缓存
您可以使用缓存来避免冗余计算,从而加快评估和测试集生成的速度。我们使用精确匹配缓存(Exact Match Caching)来缓存来自 LLM 和嵌入模型的响应。
您可以使用 DiskCacheBackend,它使用本地磁盘缓存来存储缓存的响应。您还可以通过实现 CacheInterface 来实现自己的自定义缓存器。
使用 DefaultCacher
让我们看看如何将 DiskCacheBackend 用于 LLM 和嵌入模型。
from ragas.cache import DiskCacheBackend
cacher = DiskCacheBackend()
# check if the cache is empty and clear it
print(len(cacher.cache))
cacher.cache.clear()
print(len(cacher.cache))
DiskCacheBackend(cache_dir=.cache)
创建一个带有缓存器的 LLM 和嵌入模型,这里我以 langchain-openai 中的 ChatOpenAI 为例。
from langchain_openai import ChatOpenAI
from ragas.llms import LangchainLLMWrapper
cached_llm = LangchainLLMWrapper(ChatOpenAI(model="gpt-4o"), cache=cacher)
# if you want to see the cache in action, set the logging level to debug
import logging
from ragas.utils import set_logging_level
set_logging_level("ragas.cache", logging.DEBUG)
现在,我们来运行一个简单的评估。
from ragas import evaluate
from ragas import EvaluationDataset
from ragas.metrics import FactualCorrectness, AspectCritic
from datasets import load_dataset
# Define Answer Correctness with AspectCritic
answer_correctness = AspectCritic(
name="answer_correctness",
definition="Is the answer correct? Does it match the reference answer?",
llm=cached_llm,
)
metrics = [answer_correctness, FactualCorrectness(llm=cached_llm)]
# load the dataset
dataset = load_dataset(
"vibrantlabsai/amnesty_qa", "english_v3", trust_remote_code=True
)
eval_dataset = EvaluationDataset.from_hf_dataset(dataset["eval"])
# evaluate the dataset
results = evaluate(
dataset=eval_dataset,
metrics=metrics,
)
results
在我们的本地机器上,这花费了将近2分钟的时间来运行。现在,让我们再次运行它,看看缓存的效果。
几乎瞬间完成。
您也可以将其用于测试集生成,只需将 generator_llm 替换为其缓存版本即可。更多详情请参阅测试集生成部分。