理解操作的成本与用量
在使用 LLM 进行评测和测试集生成时,成本会是一个重要因素。Ragas 提供了一些工具来帮助你处理这一点。
理解 TokenUsageParser
默认情况下,Ragas 不会为 evaluate() 计算 token 用量。这是因为 LangChain 的 LLM 并不总是以统一方式返回 token 用量信息。因此,为了获取用量数据,我们必须实现一个 TokenUsageParser。
TokenUsageParser 是一个函数,它解析 LangChain 模型 generate_prompt() 函数返回的 LLMResult 或 ChatResult,并输出 Ragas 期望的 TokenUsage。
例如,这里是一个使用我们已定义的 parser 来解析 OpenAI 的例子。
import os
os.environ["OPENAI_API_KEY"] = "your-api-key"
from langchain_openai.chat_models import ChatOpenAI
from langchain_core.prompt_values import StringPromptValue
gpt4o = ChatOpenAI(model="gpt-4o")
p = StringPromptValue(text="hai there")
llm_result = gpt4o.generate_prompt([p])
# lets import a parser for OpenAI
from ragas.cost import get_token_usage_for_openai
get_token_usage_for_openai(llm_result)
/opt/homebrew/Caskroom/miniforge/base/envs/ragas/lib/python3.9/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
from .autonotebook import tqdm as notebook_tqdm
TokenUsage(input_tokens=9, output_tokens=9, model='')
你可以定义自己的 parser,或在已有定义时导入它们。如果你想为 LLM 提供商建议 parser 或贡献自己的 parser,请查看这个 issue 🙂。
你可以像这样在评测中使用它。这里使用来自 get started 的示例。
from datasets import load_dataset
from ragas import EvaluationDataset
from ragas.metrics._aspect_critic import AspectCriticWithReference
dataset = load_dataset("vibrantlabsai/amnesty_qa", "english_v3")
eval_dataset = EvaluationDataset.from_hf_dataset(dataset["eval"])
metric = AspectCriticWithReference(
name="answer_correctness",
definition="is the response correct compared to reference",
)
Repo card metadata block was not found. Setting CardData to empty.
from ragas import evaluate
from ragas.cost import get_token_usage_for_openai
results = evaluate(
eval_dataset[:5],
metrics=[metric],
llm=gpt4o,
token_usage_parser=get_token_usage_for_openai,
)
Evaluating: 100%|██████████| 5/5 [00:01<00:00, 2.81it/s]
results.total_tokens()
TokenUsage(input_tokens=5463, output_tokens=355, model='')
你可以通过把每个 token 的成本传入 Result.total_cost() 函数来计算每次运行的成本。
在本例中,GPT-4o 的价格是每 100 万 input tokens $5,每 100 万 output tokens $15。
results.total_cost(cost_per_input_token=5 / 1e6, cost_per_output_token=15 / 1e6)
0.03264