ARTKIT 는 Gen AI 애플리케이션의 프롬프트 기반 테스트 및 평가를 자동화하기 위해 BCG X에서 개발한 Python 프레임워크입니다.
ARTKIT는 Gen AI 애플리케이션을 위한 자동화된 엔드투엔드 테스트 및 평가 파이프라인을 개발하기 위한 Python 프레임워크입니다. 유연한 Gen AI 모델을 활용하여 테스트 및 평가 프로세스의 주요 단계를 자동화함으로써 ARTKIT 파이프라인은 다양한 Gen AI 시스템의 테스트 및 평가 요구 사항을 충족하도록 쉽게 조정됩니다.
ARTKIT는 또한 도전자 봇과 대상 시스템 간의 자동화된 다중 턴 대화를 지원합니다. Gen AI 시스템과의 확장된 상호 작용 후에 문제와 취약성이 발생할 가능성이 높으므로 대화형 애플리케이션에서는 다중 턴 테스트가 중요합니다.
ARTKIT의 핵심 개념과 기능을 알아보려면 사용자 가이드부터 시작하는 것이 좋습니다. 예시를 방문하여 ARTKIT를 사용하여 Gen AI 시스템을 테스트하고 평가하는 방법을 알아보세요.
이는 ARTKIT를 사용하여 Gen AI 시스템의 숙련도, 형평성, 안전 및 보안을 테스트하고 평가하는 데 사용할 수 있는 다양한 방법 중 몇 가지 예일 뿐입니다.
ARTKIT의 장점은 적은 비용으로 많은 일을 할 수 있다는 것입니다. 몇 가지 간단한 기능과 클래스는 Gen AI 시스템을 테스트하고 평가하기 위한 빠르고 유연하며 목적에 맞는 파이프라인 개발을 지원합니다. 주요 기능은 다음과 같습니다:
메모
ARTKIT는 데이터 과학자와 엔지니어가 사용자 정의하여 Human-In-The-Loop 테스트 및 평가를 향상하도록 설계되었습니다. 효과적인 테스트와 평가는 각 Gen AI 사용 사례에 맞게 조정되어야 한다는 경험을 통해 배웠기 때문에 우리는 의도적으로 "푸시 버튼" 솔루션을 제공하지 않습니다. 자동화는 테스트 및 평가를 확장하고 가속화하기 위한 전략이지 사례별 위험 환경 매핑, 도메인 전문 지식 및 비판적 사고를 대체하는 것이 아닙니다.
ARTKIT는 다음 모델 공급자에 대한 기본 지원을 제공합니다.
다른 서비스에 연결하기 위해 사용자는 새로운 모델 클래스를 개발할 수 있습니다.
ARRKIT는 PyPI와 Conda 설치를 모두 지원합니다. 전용 가상 환경에 ARTKIT를 설치하는 것이 좋습니다.
맥OS 및 리눅스:
python -m venv 아트킷 소스 아트킷/빈/활성화 pip 설치 아트킷
윈도우:
python -m venv 아트킷 artkitScriptsactivate.bat pip 설치 아트킷
conda install -c conda-forge 아트킷
파이프라인 흐름 다이어그램의 시각화를 활성화하려면 GraphViz를 설치하고 시스템의 PATH 변수에 있는지 확인하세요.
dot -V
실행하여 설치를 확인하세요. 대부분의 ARTKIT 사용자는 OpenAI 또는 Hugging Face와 같은 외부 모델 제공업체의 서비스에 액세스해야 합니다.
권장되는 접근 방식은 다음과 같습니다.
pip
사용하여 python-dotenv
설치합니다.pip 설치 python-dotenv
또는 conda
:
conda install -c conda-forge python-dotenv
.env
라는 파일을 만듭니다..gitignore
에 .env
추가하세요..env
내부에 환경 변수를 정의합니다(예: API_KEY=your_api_key
from dotenv import load_dotenv
load_dotenv ()
# Verify that the environment variable is loaded
import os
os . getenv ( 'YOUR_API_KEY' )
ARTKIT 저장소에는 지원되는 API에 대한 자리 표시자 자격 증명을 포함하여 환경 변수를 정의하기 위한 템플릿을 제공하는 프로젝트 루트에 .env_example
이라는 예제 파일이 포함되어 있습니다.
자격 증명의 안전한 저장을 장려하기 위해 ARTKIT 모델 클래스는 API 자격 증명을 직접 허용하지 않고 대신 환경 변수를 정의해야 합니다. 예를 들어 OpenAI API 키가 OPENAI_API_KEY
라는 환경 변수에 저장된 경우 다음과 같이 OpenAI 모델 클래스를 초기화할 수 있습니다.
import artkit . api as ak
ak . OpenAIChat (
model_id = "gpt-4o" ,
api_key_env = "OPENAI_API_KEY"
)
api_key_env
변수는 API 키를 매개변수로 직접 받아들이는 대신 환경 변수의 이름을 문자열로 받아들입니다. 이는 키가 인쇄할 수 있는 Python 객체로 저장되지 않기 때문에 코드 저장소에서 API 키가 실수로 노출될 위험을 줄입니다. .
핵심 ARTKIT 기능은 다음과 같습니다:
run
: 하나 이상의 파이프라인 단계를 실행합니다.step
: 사전 또는 반복 가능한 사전을 생성하는 단일 파이프라인 단계chain
: 순차적으로 실행되는 일련의 단계parallel
: 병렬로 실행되는 단계 집합아래에서는 다음 단계에 따라 간단한 예시 파이프라인을 개발합니다.
시작하려면 artkit.api
가져오고 OpenAI GPT-4o 모델로 세션을 설정하세요. 아래 코드에서는 OPENAI_API_KEY
라는 환경 변수에 OpenAI API 키가 저장되어 있고 cache/chat_llm.db
라는 데이터베이스에 응답을 캐시하려고 한다고 가정합니다.
import artkit . api as ak
# Set up a chat system with the OpenAI GPT-4o model
chat_llm = ak . CachedChatModel (
model = ak . OpenAIChat ( model_id = "gpt-4o" ),
database = "cache/chat_llm.db"
)
다음으로 파이프라인 단계로 사용될 몇 가지 함수를 정의합니다. ARRKIT는 비동기 처리를 허용하기 위해 비동기 생성기와 함께 작동하도록 설계되었으므로 아래 함수는 async
, await
및 yield
키워드로 정의됩니다.
# A function that rephrases input prompts to have a specified tone
async def rephrase_tone ( prompt : str , tone : str , llm : ak . ChatModel ):
response = await llm . get_response (
message = (
f"Your job is to rephrase in input question to have a { tone } tone. n "
f"This is the question you must rephrase: n { prompt } "
)
)
yield { "prompt" : response [ 0 ], "tone" : tone }
# A function that behaves as a chatbot named AskChad who mirrors the user's tone
async def ask_chad ( prompt : str , llm : ak . ChatModel ):
response = await llm . get_response (
message = (
"You are AskChad, a chatbot that mirrors the user's tone. "
"For example, if the user is rude, you are rude. "
"Your responses contain no more than 10 words. n "
f"Respond to this user input: n { prompt } "
)
)
yield { "response" : response [ 0 ]}
# A function that evaluates responses according to a specified metric
async def evaluate_metric ( response : str , metric : str , llm : ak . ChatModel ):
score = await llm . get_response (
message = (
f"Your job is to evaluate prompts according to whether they are { metric } . "
f"If the input prompt is { metric } , return 1, otherwise return 0. n "
f"Please evaluate the following prompt: n { response } "
)
)
yield { "evaluation_metric" : metric , "score" : int ( score [ 0 ])}
다음으로, 두 가지 다른 어조(공손함과 냉소적)에 따라 입력 프롬프트를 바꾸고, 바꿔 쓴 프롬프트를 AskChad에 보낸 다음, 마지막으로 반응의 냉소를 평가하는 파이프라인을 정의합니다.
pipeline = (
ak . chain (
ak . parallel (
ak . step ( "tone_rephraser" , rephrase_tone , tone = "POLITE" , llm = chat_llm ),
ak . step ( "tone_rephraser" , rephrase_tone , tone = "SARCASTIC" , llm = chat_llm ),
),
ak . step ( "ask_chad" , ask_chad , llm = chat_llm ),
ak . step ( "evaluation" , evaluate_metric , metric = "SARCASTIC" , llm = chat_llm )
)
)
pipeline . draw ()
마지막으로 입력 프롬프트로 파이프라인을 실행하고 결과를 테이블에 표시합니다.
# Input to run through the pipeline
prompt = { "prompt" : "What is a fun activity to do in Boston?" }
# Run pipeline
result = ak . run ( steps = pipeline , input = prompt )
# Convert results dictionary into a multi-column dataframe
result . to_frame ()
결과 테이블은 왼쪽에서 오른쪽으로 다음과 같이 표시됩니다.
input
: 원래 입력 프롬프트tone_rephraser
: 원래 프롬프트를 지정된 톤으로 바꾸는 문구가 변경된 프롬프트입니다.ask_chad
: 사용자의 어조를 반영하는 AskChad의 응답evaluation
: 냉소적인 반응을 1로 표시하는 SARCASTIC 측정항목의 평가 점수입니다.ARTKIT에 대한 전체 소개를 보려면 사용자 가이드 및 예제를 방문하세요.
ARTKIT에 대한 기여를 환영하며 감사드립니다! 자세한 내용은 기여자 가이드 섹션을 참조하세요.
이 프로젝트는 Apache 2.0에 따라 라이센스가 부여되어 특허 소송에 대한 추가 보호 기능과 함께 무료 사용, 수정 및 배포가 가능합니다. 자세한 내용은 LICENSE 파일을 참조하거나 Apache 2.0을 방문하세요.
BCG X는 Boston Consulting Group의 기술 구축 및 설계 부서입니다.
우리는 항상 우리 팀에 합류할 재능 있는 데이터 과학자와 소프트웨어 엔지니어를 찾고 있습니다! 자세한 내용은 BCG X Careers를 방문하세요.