Ragas Ragas
stable · 中文译文
中文译文 · 原文:https://docs.ragas.io/en/stable/howtos/customizations/metrics/_cost/ · 许可证 Apache-2.0

理解操作的成本与用量

在使用 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