본문으로 건너뛰기

© 2026 Molayo

HN요약2026. 05. 15. 04:46

Show HN: Tonic Validate Metrics – 오픈 소스 RAG 평가 지표 패키지

요약

Tonic Validate는 Retrieval Augmented Generation (RAG) 파이프라인과 같은 LLM 출력을 평가, 추적 및 모니터링할 수 있는 오픈 소스 프레임워크입니다. 이 도구는 답변의 정확성부터 LLM 환각(hallucination)까지 다양한 지표를 제공하여 RAG 애플리케이션의 성능을 종합적으로 측정합니다. 또한, 데이터 전처리 및 증강을 돕는 Tonic Textual과 함께 사용되어 고품질 데이터를 구축하고 시스템 신뢰도를 높이는 데 도움을 줍니다.

핵심 포인트

  • Tonic Validate는 LLM/RAG 출력을 평가하기 위한 포괄적인 오픈 소스 프레임워크를 제공합니다.
  • 다양한 지표(metrics)를 통해 답변 유사도, 검색 정밀도 등 RAG 시스템의 여러 측면을 측정할 수 있습니다.
  • Tonic Textual은 비정형 데이터에서 텍스트 추출, 민감 정보 비식별화, RAG 최적화 파이프라인 구축 등을 자동화합니다.
  • 사용자는 로컬 환경에 설치하고 제공된 코드 스니펫을 통해 쉽게 평가 시스템을 구현할 수 있습니다.

고성능 LLM/RAG 평가 프레임워크

문서 살펴보기 »

RAG를 위한 데이터 강화하기 »

버그 보고
·
기능 요청
·
빠른 시작

목차

Tonic Validate는 Retrieval Augmented Generation (RAG) 파이프라인과 같은 LLM 출력의 평가를 위한 프레임워크입니다. Validate를 사용하면 LLM 및 RAG 애플리케이션을 쉽게 평가, 추적 및 모니터링할 수 있습니다. Validate는 답변의 정확성부터 LLM 환각 (hallucination)까지 모든 것을 측정하는 제공된 지표 (metrics)를 사용하여 LLM 출력을 평가할 수 있게 해줍니다. 또한, Validate는 평가 결과를 시각화하여 쉽게 추적하고 모니터링할 수 있는 선택적인 UI를 제공합니다.

고성능 RAG 시스템의 기반은 품질이 보장되고 안전한 데이터입니다. 고품질 데이터는 검색 및 생성된 정보가 정확하고, 관련성이 있으며, 신뢰할 수 있음을 보장하여 시스템의 전반적인 성능과 사용자 신뢰를 향상시킵니다. 반면, 보안은 이러한 가치 있는 데이터를 침해로부터 보호하여 민감한 정보가 기밀로 유지되고 변조되지 않도록 합니다. 이 두 가지는 함께 강력한 RAG 시스템의 토대를 형성하여 효율적이고 신뢰할 수 있는 검색 및 생성을 촉진합니다.

우리는 RAG 시스템의 성능 향상을 도울 수 있는 Tonic Validate의 강력한 동반자인 Tonic Textual을 소개하게 되어 기쁩니다. 우리는 RAG 시스템을 위한 데이터 전처리 (pre-processing)를 단순화하고 증강하기 위해 Tonic Textual을 만들었습니다. 단 몇 분 만에 비정형 데이터에서 텍스트를 추출하고, 민감한 정보를 탐지 및 비식별화하며, 데이터를 RAG 시스템에 최적화된 형식으로 변환하는 자동화된 비정형 데이터 파이프라인을 구축할 수 있습니다. 또한, 문서 메타데이터 (metadata)와 문맥적 엔티티 태그 (contextual entity tags)로 데이터를 풍부하게 하여, RAG 시스템이 진실에 기반하도록 하는 시맨틱 엔티티 그래프 (semantic entity graphs)를 구축함으로써 환각 (hallucinations)을 방지하고 생성된 출력의 전반적인 품질을 향상시킵니다.

여기에서 더 자세히 알아보고 도구를 완전히 무료로 체험해 볼 수 있습니다. 여러분의 의견을 듣고 싶습니다!

이것은 프로젝트를 로컬(locally)에 설정하는 방법에 대한 지침을 제공하는 예시입니다. 로컬 복사본을 설치하고 실행하려면 다음의 간단한 예시 단계를 따르세요.

Tonic Validate 설치

pip install tonic-validate

시작하려면 다음 코드 스니펫(code snippet)을 사용하세요.

from tonic_validate import ValidateScorer, Benchmark
import os

os.environ["OPENAI_API_KEY"] = "your-openai-key" 

# LLM으로부터 응답과 컨텍스트를 가져오는 것을 시뮬레이션하는 함수
# 실제 함수 호출로 교체하세요
def get_llm_response(question):
    return {
        "llm_answer": "Paris",
        "llm_context_list": ["Paris is the capital of France."]
    }

benchmark = Benchmark(questions=["What is the capital of France?"], answers=["Paris"])

# 각 질문과 답변 쌍에 대해 응답 점수를 매깁니다
scorer = ValidateScorer()
run = scorer.score(benchmark, get_llm_response)

이 코드 스니펫은 하나의 질문과 참조 답변(reference answer)으로 벤치마크(benchmark)를 생성한 다음 답변의 점수를 매깁니다. 대부분의 지표(metrics)에서는 참조 답변을 제공할 필요가 없습니다(아래 지표 테이블 참조).

많은 사용자가 코드 리뷰/풀 리퀘스트(pull request) 과정 중에 평가를 실행하는 것에서 가치를 발견합니다. 위 스니펫과 당사의 문서 및 이 README에서 찾은 지식을 사용하여 직접 자동화를 구축할 수 있습니다. 또는 Github Marketplace에 있는 당사의 완전 무료 Github Action을 활용할 수도 있습니다. 해당 목록은 여기에서 확인할 수 있습니다. 설정은 쉽지만, 질문이 있는 경우 해당 저장소(repository)에 이슈(issue)를 생성해 주세요.

지표(Metrics)는 LLM의 성능을 점수화하는 데 사용됩니다. Validate는 대부분의 RAG 시스템에 적용 가능한 다양한 지표를 함께 제공합니다. 또한 metric.py를 직접 구현하여 자신만의 지표를 만들 수도 있습니다. 지표를 계산하려면 RAG 애플리케이션의 데이터를 제공해야 합니다. 아래 표는 Tonic Validate에서 제공하는 수많은 지표 중 몇 가지를 보여줍니다. 지표에 대한 더 자세한 설명은 당사의 문서를 참조하십시오.

지표 이름 (Metric Name)입력값 (Inputs)점수 범위 (Score Range)측정 내용 (What does it measure?)
답변 유사도 점수 (Answer similarity score)Question Reference answer LLM answer0 ~ 5참조 답변 (Reference answer)이 LLM 답변 (LLM answer)과 얼마나 잘 일치하는지 측정합니다.
검색 정밀도 (Retrieval precision)Question Retrieved Context0 ~ 1검색된 컨텍스트 (Retrieved Context)가 주어진 질문에 답변하기에 관련이 있는지 측정합니다.
증강 정밀도 (Augmentation precision)Question Retrieved Context LLM answer0 ~ 1관련 컨텍스트가 LLM 답변에 포함되어 있는지 측정합니다.
증강 정확도 (Augmentation accuracy)Retrieved Context LLM answer0 ~ 1모든 컨텍스트가 LLM 답변에 포함되어 있는지 측정합니다.
답변 일관성 (Answer consistency)Retrieved Context LLM answer0 ~ 1LLM 답변에 컨텍스트로부터 오지 않은 정보가 포함되어 있는지 측정합니다.
지연 시간 (Latency)Run Time0 또는 1LLM이 요청을 완료하는 데 걸리는 시간을 측정합니다.
텍스트 포함 여부 (Contains Text)LLM Answer0 또는 1응답에 주어진 텍스트가 포함되어 있는지 여부를 확인합니다.

Tonic Validate의 지표 입력값은 성능을 계산하는 데 필요한 정보를 지표에 제공하기 위해 사용됩니다. 아래에서는 각 입력 유형과 이를 Tonic Validate의 SDK에 전달하는 방법을 설명합니다.

정의 (What is it): 질문된 내용 (The question asked)

사용법 (How to use): Benchmarkquestions 인자를 통해 질문을 전달하여 제공할 수 있습니다.

from tonic_validate import Benchmark
benchmark = Benchmark(
    questions=["What is the capital of France?", "What is the capital of Germany?"]
    ...

정의 (What is it): RAG 애플리케이션이 질문에 어떻게 답변해야 하는지에 대한 정답(Ground truth) 역할을 하는 미리 작성된 답변입니다.

사용법 (How to use): Benchmarkanswers 인자를 통해 참조 답변 (Reference answers)을 전달하여 제공할 수 있습니다. 각 참조 답변은 주어진 질문에 대응해야 합니다. 따라서 만약 참조 답변이 questions 리스트의 세 번째 질문에 대한 것이라면, 해당 참조 답변은 answers 리스트에서도 반드시 세 번째 항목이어야 합니다. 참조 답변을 필요로 하는 유일한 지표는 답변 유사도 점수 (Answer Similarity Score)입니다.

from tonic_validate import Benchmark
benchmark = Benchmark(
questions=["What is the capital of France?", "What is the capital of Germany?"]
...

정의 (What is it): RAG 애플리케이션 / LLM이 질문에 대해 제공하는 답변입니다.

사용 방법 (How to use): Validate scorer에 제공하는 콜백(callback)을 통해 LLM 답변을 제공할 수 있습니다. 답변은 튜플(tuple) response의 첫 번째 항목입니다.

# LLM으로부터 응답과 컨텍스트(context)를 가져오는 것을 시뮬레이션하는 함수
# 이 부분을 실제 함수 호출로 교체하세요
def get_rag_response(question):
...

콜백을 사용하지 않고 수동으로 답변을 기록하는 경우, LLMResponse를 생성할 때 llm_answer를 통해 LLM 답변을 제공할 수 있습니다.

from tonic_validate import LLMResponse
# 점수 산출을 위해 응답들을 배열(array)에 저장
responses = []
...

정의 (What is it): 주어진 질문에 답변할 때 RAG 애플리케이션이 검색(retrieve)하는 컨텍스트(context)입니다. 이 컨텍스트는 RAG 애플리케이션이 LLM이 질문에 답변하는 것을 돕기 위해 프롬프트(prompt)에 삽입하는 내용입니다.

사용 방법 (How to use): Validate scorer에 제공하는 콜백을 통해 LLM의 검색된 컨텍스트 리스트(retrieved context list)를 제공할 수 있습니다. 답변은 튜플(tuple) response의 두 번째 항목입니다. 검색된 컨텍스트는 항상 리스트(list) 형태입니다.

# LLM으로부터 응답과 컨텍스트(context)를 가져오는 것을 시뮬레이션하는 함수
# 이 부분을 실제 함수 호출로 교체하세요
def get_rag_response(question):
...

답변을 수동으로 기록하는 경우, LLMResponse를 생성할 때 llm_context_list를 통해 LLM 컨텍스트를 제공할 수 있습니다.

from tonic_validate import LLMResponse
# 점수 산출을 위해 응답들을 배열(array)에 저장
responses = []
...

정의 (What is it): LLM이 응답하는 데 걸린 시간을 측정하는 지연 시간(latency) 지표에 사용됩니다.

사용 방법 (How to use): Validate scorer 콜백을 사용하는 경우, 이 지표는 자동으로 계산됩니다. LLM 응답을 수동으로 생성하는 경우, run_time 인자를 통해 LLM이 소요한 시간을 직접 제공해야 합니다.

from tonic_validate import LLMResponse
# 점수 산정을 위해 응답을 배열에 저장합니다
responses = []
...

대부분의 지표 (metrics)는 LLM의 도움을 받아 점수가 산정됩니다. Validate는 OpenAI 및 Azure OpenAI를 지원하지만, 다른 LLM들도 쉽게 통합할 수 있습니다 (이 저장소에 GitHub issue를 제출해 주세요).

OpenAI를 사용하려면 OpenAI API Key를 제공해야 합니다.

import os
os.environ["OPENAI_API_KEY"] = "put-your-openai-api-key-here"

이미 시스템 환경 변수에 OPENAI_API_KEY가 설정되어 있다면 이 단계를 건너뛸 수 있습니다. 그렇지 않다면, 진행하기 전에 환경 변수를 설정해 주세요.

Azure를 사용하는 경우, OPENAI_API_KEY 환경 변수를 설정하는 대신 AZURE_OPENAI_API_KEYAZURE_OPENAI_ENDPOINT를 설정해야 합니다. AZURE_OPENAI_ENDPOINT는 Azure OpenAI 배포를 위한 엔드포인트 URL이며, AZURE_OPENAI_API_KEY는 API 키입니다.

import os
os.environ["AZURE_OPENAI_API_KEY"] = "put-your-azure-openai-api-key-here"
os.environ["AZURE_OPENAI_ENDPOINT"] = "put-your-azure-endpoint-here"

이미 시스템 환경 변수에 GEMINI_API_KEY가 설정되어 있다면 이 단계를 건너뛸 수 있습니다. 그렇지 않다면, 진행하기 전에 환경 변수를 설정해 주세요.

import os
os.environ["GEMINI_API_KEY"] = "put-your-gemini-api-key-here"

Gemini를 사용하려면 Python 버전이 3.9 이상이어야 함에 유의하세요.

이미 시스템 환경 변수에 ANTHROPIC_API_KEY가 설정되어 있다면 이 단계를 건너뛸 수 있습니다. 그렇지 않다면, 진행하기 전에 환경 변수를 설정해 주세요.

import os
os.environ["ANTHROPIC_API_KEY"] = "put-your-anthropic-api-key-here"

이미 시스템 환경 변수에 MISTRAL_API_KEY가 설정되어 있다면 이 단계를 건너뛸 수 있습니다. 그렇지 않다면, 진행하기 전에 환경 변수를 설정해 주세요.

import os
os.environ["MISTRAL_API_KEY"] = "put-your-mistral-api-key-here"

이미 COHERE_API_KEY

시스템 환경 변수 (environment variables)에 이미 설정되어 있다면 이 단계를 건너뛸 수 있습니다. 그렇지 않다면, 진행하기 전에 환경 변수를 설정해 주세요.

import os
os.environ["COHERE_API_KEY"] = "put-your-cohere-api-key-here"

이미 TOGETHERAI_API_KEY가 시스템 환경 변수에 설정되어 있다면 이 단계를 건너뛸 수 있습니다. 그렇지 않다면, 진행하기 전에 환경 변수를 설정해 주세요.

import os
os.environ["TOGETHERAI_API_KEY"] = "put-your-togetherai-api-key-here"

이미 AWS_SECRET_ACCESS_KEY, AWS_ACCESS_KEY_ID, 그리고 AWS_REGION_NAME이 시스템 환경 변수에 설정되어 있다면 이 단계를 건너뛸 수 있습니다. 그렇지 않다면, 진행하기 전에 환경 변수를 설정해 주세요.

import os
os.environ["AWS_ACCESS_KEY_ID"]="put-your-aws-access-key-id-here"
os.environ["AWS_SECRET_ACCESS_KEY"]="put-your-aws-secret-access-key-here"
...

지표 (metrics)를 사용하려면, ValidateScorer의 인스턴스를 생성하세요.

from tonic_validate import ValidateScorer
scorer = ValidateScorer()

지표 점수를 매기는 데 사용되는 기본 모델은 GPT 4 Turbo입니다. OpenAI 모델을 변경하려면, ValidateScorermodel_evaluator 인자 (argument)에 OpenAI 모델 이름을 전달하세요. 또한 지표 배열 (array of metrics)을 통해 커스텀 지표를 전달할 수도 있습니다.

from tonic_validate import ValidateScorer
from tonic_validate.metrics import AnswerConsistencyMetric, AnswerSimilarityMetric
scorer = ValidateScorer([
...

또한 model_evaluator 인자를 다음과 같이 모델 이름으로 설정함으로써 Google Gemini, Claude, Mistral, Cohere, Together AI, 그리고 AWS Bedrock와 같은 다른 모델들을 전달할 수 있습니다.

scorer = ValidateScorer(model_evaluator="gemini/gemini-1.5-pro-latest")

scorer = ValidateScorer(model_evaluator="claude-3")

scorer = ValidateScorer(model_evaluator="mistral/mistral-tiny")

scorer = ValidateScorer(model_evaluator="command-r")

scorer = ValidateScorer(model_evaluator="together_ai/togethercomputer/Llama-2-7B-32K-Instruct")

scorer = ValidateScorer(model_evaluator="bedrock/your-bedrock-model")

항목의 지표(metric)를 점수화하는 동안 오류가 발생하면, 해당 지표의 점수는 None으로 설정됩니다.

만약 점수화 중 오류가 발생했을 때 Tonic Validate가 예외(exception)를 발생시키기를 원한다면, 생성자(constructor)에서 fail_on_errorTrue로 설정하세요.

scorer = ValidateScorer(fail_on_error=True)

Azure를 사용하는 경우, model_evaluator 인자를 다음과 같이 사용자의 배포 이름(deployment name)으로 반드시 설정해야 합니다.

scorer = ValidateScorer(model_evaluator="your-deployment-name")

AWS Bedrock을 사용하는 경우, model_evaluator 인자를 엔드포인트 이름(endpoint name)으로, model_id 인자를 모델 이름(model name)으로 다음과 같이 반드시 설정해야 합니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 HN AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0