Upstage Groundedness Check(RGC)는 모델이 생성한 응답이 주어진 컨텍스트와 얼마나 잘 일치하는지를 평가하는 기능이다. 이 기능은 정보의 정확성과 신뢰성을 높이는 데 중요한 역할을 한다. 특히 AI 챗봇이나 질의응답 시스템에서 정보의 기반을 확인하는 데 유용하다.
Upstage는 인공지능(AI) 기술, 특히 대규모 언어 모델(LLM)과 문서 AI 분야에 특화된 국내 스타트업이다.
1. Groundedness Check란?
Upstage 문서 내용
https://developers.upstage.ai/docs/apis/groundedness-check
대형 언어 모델(LLMs)은 복잡하고 정보가 풍부한 텍스트를 생성할 수 있지만, 사실적으로 부정확한(즉, 비기반된) 응답을 생성할 수 있는 오류, 즉 "환각"을 일으킬 가능성이 있습니다. LLMs의 이러한 한계를 극복하는 인기 있는 방법 중 하나는 "컨텍스트"라고 불리는 텍스트의 일부를 제공하여 LLMs가 이를 참조하여 사실적으로 올바른 출력을 생성하게 하는 것입니다. 이 접근법은 Retrieval-Augmented Generation 또는 RAG라고 불립니다.
그러나 RAG 방식도 항상 LLMs가 진실된 답변을 제공한다는 보장을 하지는 않습니다. 따라서 모델이 생성한 출력이 주어진 컨텍스트에 기반을 두고 있는지 여부를 확인하는 추가 단계가 필요합니다. Groundedness Check API는 이러한 목적을 위해 설계된 도구로, 사용자가 제공한 컨텍스트에 대한 AI 어시스턴트의 응답이 실제로 그 컨텍스트에 기반하고 있는지 여부를 확인합니다. 이 API는 두 개의 메시지(사용자가 제공한 컨텍스트와 모델의 응답)를 받아 응답이 기반되었는지, 기반되지 않았는지, 또는 응답의 기반 여부를 확실히 알 수 없는지를 반환합니다.
1. Upstage api key 발급
api를 사용하려면 우선 Api key를 발급받아야 한다. key는 Upstage Console에서 발급 가능하다.
https://console.upstage.ai/api-keys
가격: $1 / 1M tokens
2. API 사용방법
Request
POST https://api.upstage.ai/v1/solar/chat/completions
Parameter
messages
파라미터는 두 가지 요소를 포함한 메시지 객체들의 리스트여야 한다.
1) 사용자가 제공한 컨텍스트와
2) 확인할 어시스턴트의 응답.
3) 각 메시지 객체는 role
속성을 사용하여 메시지 유형을 사용자(컨텍스트) 또는 어시스턴트(응답)로 지정하고, content
속성에 해당하는 텍스트 문자열을 설정해야 한다.
API 응답은 문자열로 반환되며, 값은 grounded
, notGrounded
, notSure
중 하나이다. notSure
응답은 어시스턴트의 응답이 주어진 컨텍스트에 기반한 것인지 명확히 판단할 수 없을 때 반환된다.
Request Body
messages 리스트 (필수)
사용자가 제공한 컨텍스트와 어시스턴트의 기반 여부를 확인할 응답, 총 두 개의 메시지 객체로 구성된 리스트이다.
messages[].role 문자열 (필수)
메시지 객체의 role
속성은 "user" 또는 "assistant"로 설정해야 합니다. "user"는 사용자가 제공한 컨텍스트를 나타내며, "assistant"는 어시스턴트의 응답을 나타낸다.
messages[].content 문자열 (필수)role
이 "user"인 메시지 객체의 content
속성은 사용자가 제공한 소스 컨텍스트를 포함해야 한다. 마찬가지로, role
이 "assistant"인 메시지 객체의 content
속성에는 기반 여부를 확인해야 하는 어시스턴트의 응답이 포함되어야 하며, 내용은 빈 문자열("")이 될 수 없다.
model 문자열 (필수)
기반 여부를 확인할 때 사용되는 모델의 이름이다. 현재 사용할 수 있는 모델은 "solar-1-mini-groundedness-check"이다.
temperature 부동 소수점 (선택)
출력의 무작위성을 제어하는 파라미터로, 0에서 2 사이의 값이어야 한다. 값이 클수록(예: 0.8) 출력이 더 무작위성이 커지며, 값이 작을수록(예: 0.2) 더 집중적이고 결정론적이 된다. 제공되지 않으면 기본값은 0.7이다.
langchain에서 사용방법
langchain_upstage 설치
pip install langchain_upstage
Langchain 코드
from dotenv import load_dotenv
from langchain_upstage import UpstageGroundednessCheck
load_dotenv()
groundedness_check = UpstageGroundednessCheck()
request_input = {
"context": "삼성전자는 연결 기준으로 매출 74.07조원, 영업이익 10.44조원의 2024년 2분기 실적을 발표했다. 전사 매출은 전분기 대비 3% 증가한 74.07조원을 기록했다. DS부문은 메모리 업황 회복으로 전분기 대비 23% 증가하고, SDC는 OLED 판매 호조로 증가했다.",
"answer": "삼성SDS의 2024년 2분기 매출은 약 74.07조원이다.",
}
response = groundedness_check.invoke(request_input)
print(response) # notGrounded
삼성전자의 매출을 이야기하고 있는데 삼성SDS 매출에 대한 응답이 표시되어 있다. 이를 체크하면 notGrounded라고 나온다.