CLOVA Studio 운영자 Posted August 9 공유하기 Posted August 9 대규모 언어 모델(LLM)의 발전과 함께 프롬프트 엔지니어링의 중요성이 부각되고 있습니다. 프롬프트 구성 방식에 따라 AI 모델의 성능이 크게 영향을 받기 때문입니다. 다양한 프롬프트 엔지니어링 기법이 있지만, 이를 효과적으로 활용하기 위해서는 체계적인 평가 과정이 필요합니다. 개별 프롬프트를 입력하고 결과를 판단하는 방식은 신뢰성이 낮고 정확한 성능 평가가 어렵습니다. 따라서 프롬프트의 효과를 정확히 측정하기 위해서는 다양한 입력값을 사용한 반복적 테스트, 결과 분석, 비교 평가가 필요합니다. 이번 포스팅에서는 엑셀 형식의 대량 입력 데이터를 준비하고, 이를 프롬프트에 일괄 적용하여 결과를 효율적으로 출력하는 방법을 소개합니다. 또한 이 결과를 바탕으로 프롬프트를 개선하고 모델의 성능을 지속적으로 향상시키는 체계적인 접근 방법에 대해 설명하겠습니다. 초보자도 Visual Studio Code만 설치되어 있다면 쉽게 따라 할 수 있습니다. ① 엑셀로 입력 데이터셋 준비 ② 파이썬 코드 실행 ③ 출력 결과 엑셀 파일 확인 입력 데이터셋 준비 검증하고자 하는 테스트 데이터셋을 준비합니다. 엑셀 파일에 다음과 같은 열을 포함시킵니다. 입력값의 유형을 다양하게 포함하여 모델의 성능을 폭넓게 평가할 수 있도록 합니다. System: 시스템 프롬프트 User: 사용자 입력 Completion: 모델의 출력 (결과 저장용) 입력 데이터셋 준비가 완료되면, 파일을 저장 후 '성능평가'라는 이름의 폴더에 넣어둡니다. 환경 설정 먼저 Visual Studio Code를 실행하고, 데이터 처리를 위한 pandas 라이브러리를 설치합니다. 이 명령어를 실행하면 Python 패키지 관리자인 pip를 사용하여 pandas를 다운로드하고 설치합니다. pandas는 데이터 분석과 조작을 위한 Python 라이브러리로, 엑셀 형식의 데이터를 쉽게 처리할 수 있게 해줍니다. pip3 install pandas 파이썬 실행 ChatCompletionExecutor 클래스는 클로바 스튜디오 인증 토큰을 갱신하고, API URL을 실행하는 기능을 수행합니다. # -*- coding: utf-8 -*- import requests import pandas as pd import json class CompletionExecutor: def __init__(self, host, api_key, api_key_primary_val, request_id): self._host = host self._api_key = api_key self._api_key_primary_val = api_key_primary_val self._request_id = request_id def execute(self, completion_request): headers = { 'X-NCP-CLOVASTUDIO-API-KEY': self._api_key, 'X-NCP-APIGW-API-KEY': self._api_key_primary_val, 'X-NCP-CLOVASTUDIO-REQUEST-ID': self._request_id, 'Content-Type': 'application/json; charset=utf-8', 'Accept': 'application/json' } response = requests.post(self._host + '/testapp/v1/chat-completions/HCX-003', headers=headers, json=completion_request) if response.status_code == 200: return response.json()['result']['message']['content'] else: return 'Error: ' + response.text 아래 코드의 process_excel 함수는 입력 엑셀 파일을 읽어 API 요청을 수행하고 결과를 출력 엑셀 파일에 저장하는 기능을 수행합니다. 먼저 pandas를 사용하여 입력 파일을 DataFrame으로 읽어옵니다. 'completion' 열이 없다면 새로 생성하고 이미 존재한다면 문자열 타입으로 변환합니다. 함수는 DataFrame의 각 행을 순회하며 'system'과 'user' 열의 내용을 API 요청 데이터로 구성합니다. 이때 Chat Completions API의 파라미터로 세부 값을 설정할 수 있습니다. ChatCompletionExecutor 인스턴스를 통해 API 요청을 실행하고 응답을 'completion' 열에 저장합니다. 이 과정을 통해 대량의 입력 데이터에 대해 일괄적으로 AI 모델의 응답을 얻을 수 있으며 결과는 원본 데이터와 함께 새로운 엑셀 파일로 저장됩니다. def process_excel(input_file, output_file, completion_executor): df = pd.read_excel(input_file) if 'completion' not in df.columns: df['completion'] = '' else: df['completion'] = df['completion'].astype(str) for index, row in df.iterrows(): system_content = row['system'] if 'system' in df.columns else "" user_content = row['user'] if 'user' in df.columns else "" preset_text = [ {"role": "system", "content": system_content}, {"role": "user", "content": user_content} ] request_data = { 'messages': preset_text, 'topP': 0.8, 'topK': 0, 'maxTokens': 256, 'temperature': 0.8, 'repeatPenalty': 5.0, 'stopBefore': [], 'includeAiFilters': True, 'seed': 0 } response = completion_executor.execute(request_data) df.at[index, 'completion'] = response df.to_excel(output_file, index=False) 이용량 제어 정책에 따라 설정된 최대 이용량을 초과하여 사용할 수 없으며 CLOVA Studio 이용량 제어 정책 가이드를 참고해 주시기 바랍니다. 요청량이 과다할 경우 클로바 스튜디오 서비스 이용 정책에 따라 429 응답을 받을 수 있으며 이를 해결하기 위해서는 다시 시도하는 조치가 필요합니다. 에러 발생 시 자체적으로 재시도 로직을 구현하고 싶다면 Exponential backoff를 활용해 보시기 바랍니다. 마지막으로 스크립트의 실행 지점으로, API 인증 정보(CLIENT_KEY, CLIENT_SECRET)와 입출력 파일 경로를 설정합니다. 클로바 스튜디오의 API 정보 화면에서 발급 받은 Client Key, Client Secret을 입력합니다. 입력 데이터셋 파일과 출력 파일의 경로도 지정합니다. if __name__ == '__main__': API_KEY = '{API_KEY}' //API KEY 입력 API_KEY_PRIMARY_VAL = '{API_KEY_PRIMARY_VAL}' //APIGW KEY 입력 REQUEST_ID = '{REQUEST_ID}' //REQUEST ID 입력 INPUT_FILENAME = "/Users/user/Desktop/성능평가/sample_example.xlsx" OUTPUT_FILENAME = "/Users/user/Desktop/성능평가/sample_example_result.xlsx" completion_executor = CompletionExecutor( host='https://clovastudio.stream.ntruss.com', api_key=API_KEY, api_key_primary_val=API_KEY_PRIMARY_VAL, request_id=REQUEST_ID ) process_excel(INPUT_FILENAME, OUTPUT_FILENAME, completion_executor) 스크립트 실행이 완료되면 지정한 출력 경로에 'sample_example_result.xlsx' 파일이 생성됩니다. 결과 파일에는 입력 데이터와 모델의 응답 결과를 함께 포함하고 있어, 입력과 출력을 쉽게 확인할 수 있습니다. 비교 평가 모델의 성능을 비교 평가하는 데는 다양한 방법이 있습니다. 대표적으로 ROUGE와 RAGAS 등의 자동화된 평가 지표가 사용됩니다. ROUGE는 주로 텍스트 요약 작업의 성능을 평가합니다. 생성된 텍스트와 참조 텍스트 간의 중복되는 n-gram의 비율을 측정합니다. RAGAS는 RAG의 성능을 자동으로 평가하는 프레임워크입니다. 이러한 정량적 평가 방법들은 객관적인 수치를 제공하여 모델 간 비교를 용이하게 합니다. 하지만 사람 평가자의 정성적 평가는 자동화된 지표로는 파악하기 어려운 다양한 중요한 측면을 평가하는 데 큰 도움이 됩니다. 정확성, 사실성, 문맥 이해도, 자연스러운 언어 사용, 창의성, 독창성, 윤리적 고려사항 준수, 전반적인 품질과 유용성 등을 사람의 관점에서 세심하게 평가할 수 있기 때문입니다. 자동화된 지표와 인간의 통찰력이 결합되어 함께 활용하면 AI 모델의 성능을 더욱 깊이 있고 종합적으로 측정할 수 있을 것입니다. 맺음말 프롬프트 엔지니어링을 통한 AI 모델 성능 최적화는 반복적이고 체계적인 과정입니다. 단순히 직관에 의존하는 것만으로는 한계가 있으며, 객관적인 데이터를 바탕으로 한 반복적인 평가와 개선 과정이 필요합니다. 프롬프트를 지속적으로 개선하고 모델의 성능을 평가하는 과정을 반복하다 보면, 특정 지점에서 성능 향상의 한계에 도달할 수 있습니다. 이런 경우 프롬프트 엔지니어링만으로는 추가적인 개선이 어려울 수 있으므로, 모델 튜닝(fine-tuning)을 통한 최적화를 고려해볼 시점입니다. 이를 통해 모델이 특정 작업이나 도메인에 더욱 특화되어, 기존의 한계를 한 차례 뛰어넘는 성능 향상을 기대할 수 있습니다. 링크 복사 다른 사이트에 공유하기 More sharing options...
Recommended Posts
게시글 및 댓글을 작성하려면 로그인 해주세요.
로그인