티스토리 뷰
728x90
반응형
Chat GPT로 서비스를 기획한다면 Fine-Tuning 은 꼭 넘어야 할 산입니다.
OpenAI의 Fine-Tuning 기능을 활용하면 특정 도메인이나 니즈에 맞춘 AI 모델을 학습시킬 수 있습니다. 이 글에서는 **엑셀 파일(.xlsx)**을 OpenAI Fine-Tuning에 사용할 수 있는 JSONL 형식으로 변환하는 Python 코드를 소개합니다.
✅ 1. 엑셀 데이터 구조
Fine-Tuning을 위한 엑셀 파일은 다음과 같은 구조를 가져야 합니다:

| system (선택) | user 질문 (필수) | assistant 답변 (필수) |
| "You are a helpful assistant." | "안녕하세요, 오늘 날씨는?" | "오늘 서울의 날씨는 맑고 따뜻합니다." |
| "You are an IT support assistant." | "Wi-Fi가 연결되지 않아요." | "Wi-Fi 문제를 해결하려면 공유기를 재부팅하세요." |
- system 열(선택): AI의 역할을 정의합니다. (기본값: "You are a helpful assistant.")
- user 질문 열(필수): 사용자의 질문 또는 입력입니다.
- assistant 답변 열(필수): AI가 제공할 응답입니다.
엑셀 시트 이름: fine_tuning_data (시트명을 직접 지정할 수 있지만, 바꾸시면 아래의 python 에서도 바꿔야 합니다.)
✅ 2. Python 코드 (엑셀 → JSONL 변환)
아래 코드는 엑셀 파일을 읽어 Chat Model 학습을 위한 JSONL 형식으로 변환합니다.
import json
import pandas as pd
def escape_quotes(text):
"""데이터 내에 쌍따옴표가 있을 경우 이스케이프 처리"""
if isinstance(text, str):
return text.replace('"', '\\"')
return text
def convert_excel_to_jsonl(input_excel, sheet_name, output_jsonl):
# 엑셀 파일 읽기
df = pd.read_excel(input_excel, sheet_name=sheet_name)
# ✅ JSONL 변환 데이터 저장 리스트
training_samples = []
for _, row in df.iterrows():
# "system" 메시지가 비어 있으면 기본값 설정
system_message = escape_quotes(row["System"]) if pd.notna(row.get("System")) else "You are a helpful assistant."
# "user 질문"과 "assistant 답변"은 필수
if pd.isna(row["user 질문"]) or pd.isna(row["assistant 답변"]):
print(f"🚨 경고: 데이터 누락 (User 또는 Assistant 값 없음) - 건너뜀")
continue
chat_messages = [
{"role": "system", "content": system_message},
{"role": "user", "content": escape_quotes(row["user 질문"])},
{"role": "assistant", "content": escape_quotes(row["assistant 답변"])}
]
training_samples.append({"messages": chat_messages})
# ✅ JSONL 파일 저장
with open(output_jsonl, "w", encoding="utf-8") as f:
for sample in training_samples:
f.write(json.dumps(sample, ensure_ascii=False) + "\n")
print(f"✅ JSONL 변환 완료: {output_jsonl}")
# 실행 예제
convert_excel_to_jsonl("training_data.xlsx", "fine_tuning_data", "training_data.jsonl")
✅ 3. JSONL 변환 예제 (출력 결과)
엑셀에서 변환된 JSONL 파일은 다음과 같이 저장됩니다.

{"messages": [{"role": "system", "content": "You are a helpful AI assistant."}, {"role": "user", "content": "안녕하세요, 오늘 날씨는?"}, {"role": "assistant", "content": "오늘 서울의 날씨는 맑고 따뜻합니다."}]}
{"messages": [{"role": "system", "content": "You are an IT support assistant."}, {"role": "user", "content": "Wi-Fi가 연결되지 않아요."}, {"role": "assistant", "content": "Wi-Fi 문제를 해결하려면 공유기를 재부팅하세요."}]}
이제 변환된 JSONL 파일을 OpenAI Fine-Tuning에 사용할 수 있습니다!
✅ 4. JSONL 파일을 OpenAI에 업로드하고 Fine-Tuning 수행하기
1️⃣ 변환된 JSONL 파일 업로드
openai api files.create -f training_data.jsonl -p fine-tune
✔ 업로드 후 반환된 "id" 값을 확인하세요.
2️⃣ Fine-Tuning 실행
import openai
openai.api_key = "your_openai_api_key"
fine_tune_response = openai.fine_tuning.jobs.create(
training_file="file-NEW_FILE_ID", # 업로드된 파일 ID 입력
model="gpt-4o-mini-2024-07-18"
)
print(f"Fine-tuning Job ID: {fine_tune_response['id']}")
🎯 결론
✔ 엑셀 데이터를 OpenAI Fine-Tuning JSONL로 변환 가능
✔ Chat Model (gpt-4o)에 맞게 messages 형식으로 변환
✔ 누락된 데이터 자동 검출 및 기본값 적용
✔ 변환된 JSONL을 OpenAI API를 통해 Fine-Tuning에 활용 가능! 🚀
이제 엑셀 데이터로 Fine-tuned 모델을 직접 학습해보세요! 🎉
728x90
반응형
'AI 도구 활용방법' 카테고리의 다른 글
| [ChatGPT] Open AI에서 공식적으로 제공하는 토큰 수 계산 및 비용 산출 자동화 모듈(ticktoken) (0) | 2025.03.17 |
|---|---|
| Gamma 프레젠테이션 제작 AI 툴 (0) | 2024.12.19 |
| Claude AI, 자연스러운 글쓰기의 추천 도구 (1) | 2024.12.19 |
| [Google Alert] 구글에서 원하는 정보를 자동으로 검색해서 결과를 구독합니다. (4) | 2024.09.30 |
| [ChatGPT] Open AI API 가격 정리 (1,000명 에게 서비스한다고 가정시 GPT 모델별 한국어 서비스 가격 예측해 보기) (7) | 2024.09.28 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- chat gpt 4o 예산
- chat gpt 한국어 가격
- chat gpt 가격 예상
- 차트분석
- 인공지능 로또 예측
- 주식투자
- 1165회 로또
- 재테크
- 티스토리챌린지
- 로또 ai
- 자동매매로직
- 토치비전
- 퀀트투자
- 장고 orm sql문 비교
- 주린이탈출
- chat gpt api 비용 계산
- 케라스
- 오블완
- Python
- 골든크로스
- chat gpt 모델별 예산
- 1164회 로또
- 자동매매
- 로또 1164회 당첨
- 기술적분석
- Numpy
- chat gpt 모델 api 가격 예측
- 클래스형 뷰
- 주식공부
- chat gpt 모델 별 가격
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
글 보관함
250x250