작업 비용과 토큰 사용량 이해하기
작업 비용과 토큰 사용량 이해하기
LLM으로 평가(evaluation)와 테스트 셋 생성을 하다 보면 비용이 핵심 고려사항이 돼요. Ragas는 여기에 도움을 주는 몇 가지 도구를 제공하고 있어요. 이번에는 토큰 사용량을 어떻게 측정하고, 이를 근거로 비용을 계산하는지 살펴볼게요.
출처: 문서
본문
TokenUsageParser 이해하기
기본적으로 Ragas는 evaluate() 에서 토큰 사용량을 계산하지 않아요. LangChain의 LLM이 항상 토큰 사용량 정보를 일관된 방식으로 돌려주지 않기 때문이에요. 그래서 사용량 데이터를 얻으려면 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를 정의하거나 이미 정의된 parser를 import해서 쓸 수도 있어요. LLM 프로바이더용 parser를 제안하고 싶거나 직접 기여하고 싶다면 이 이슈를 확인해 보세요 🙂.
평가에 사용하는 방법도 보여줄게요. 여기의 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='')
각 실행의 비용을 계산하려면, 토큰당 비용을 Result.total_cost() 함수에 넘겨주면 돼요.
이 경우 GPT-4o는 입력 토큰 1M 당 $5, 출력 토큰 1M 당 $15 가 들어요.
results.total_cost(cost_per_input_token=5 / 1e6, cost_per_output_token=15 / 1e6)
0.03264