패스트캠퍼스환급챌린지

패스트캠퍼스 환급챌린지 42일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기

네모몽 2025. 8. 11. 22:30

※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. ※


 

오늘은 지난 시간에 이어서 곰돌이 푸 페르소나 챗봇 데이터셋에서 마지막 단계인 검색 기반 RAG 데이터 생성 작업을 진행했습니다.😏
이 단계는 단순히 대화를 만들어주는 것이 아니라, 검색된 문서를 참고해서 답변을 생성하는 구조를 학습 데이터에 녹이는 과정이기 때문에

이전에 생성했던 싱글턴, 멀티턴 데이터와 통합하여 좀 더 풍부한 학습 효과를 챙길 수 있게 됩니다 :)

 

🔍 검색 기반 응답 설계

먼저, 기존에 만들어 둔 질문 리스트에서 하나씩 꺼내 벡터 검색을 수행했습니다.
OpenAIEmbeddings을 사용해 질문과 문서를 숫자 벡터로 변환했고,

Chroma 벡터스토어에서 상위 5개의 연관 문서를 찾도록 했습니다.

embedding = OpenAIEmbeddings()
vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=embedding)
docs = vectorstore.similarity_search(question, k=5)

 

이렇게 얻은 docs 값은 단순 참고용이 아니라, 곰돌이 푸가 답변할 때 컨텍스트로 바로 넣어줬습니다.
검색 결과를 제공하지 않으면 모델이 없는 내용을 지어낼(할루시네이션) 위험이 있으니까요 😉

 

⚙️ 응답 생성과 필터링

OpenAI Chat API를 사용해 응답을 만들었고, 생성된 답변은 다시 한번 검토했죠.
말투가 어긋나거나, 검색 결과와 전혀 관련 없는 내용이 포함되면 제외했습니다.

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_prompt}
    ]
)

 

이 필터링 과정이 중요한 이유는, 잘못된 응답까지 학습 데이터로 들어가면 모델이 잘못된 패턴을 그대로 학습하기 때문입니다.

 

📦 데이터 통합과 업로드

검색 기반 데이터가 완성되면, 기존의 싱글턴 대화 데이터멀티턴 대화 데이터에 합쳤습니다.
그 후 datasets.Dataset.from_list()로 합친 데이터를 Hugging Face 허브에 업로드 합니다.(이번 실습에서는 업로드 하지 않고, 강사님 모델 사용 예정)

from datasets import Dataset
Dataset.from_list(final_data).push_to_hub("my-pooh-dataset")
 

이렇게 해두면 나중에 파인튜닝 단계에서 바로 불러와서 사용할 수 있어 편리합니다.


🤔 배운 점과 고민 포인트

✨ 배운 점

  • 검색 결과를 어떤 순서와 방식으로 프롬프트에 넣는지에 따라서 응답 품질을 좌우한다는 점을 깨달음

 

① 오늘자 날짜, 공부 시작, 종료 시각 포함 사진 각 1장

패스트캠퍼스_LLM 서비스개발_42일차_공부시작/종료시간

 

② 1개 클립 수강 인증 사진 1장 / 학습 인증 사진 1장

패스트캠퍼스_LLM 서비스개발_42일차_수강인증/학습인증

 

③ 챌린지 대상 강의 완강률 캡쳐 사진 1장

패스트캠퍼스_LLM서비스개발_42일차_완강률캡처

 


 

https://fastcampus.info/4n8ztzq

 

(~6/20) 50일의 기적 AI 환급반💫 | 패스트캠퍼스

초간단 미션! 하루 20분 공부하고 수강료 전액 환급에 AI 스킬 장착까지!

fastcampus.co.kr