gdg10 GDG : AI 개발코스 Week12 RAG 구조 설계RAG는 세 가지 요소로 구성했다.파인튜닝한 Qwen 2.5 모델법률 PDF를 임베딩한 벡터 데이터베이스검색 결과를 프롬프트에 포함해 답변을 생성하는 파이프라인질문이 들어오면 먼저 관련 문서를 검색하고, 검색된 문서를 바탕으로 모델이 답변을 생성하도록 했다.법률 PDF 처리 및 벡터 DB 구축우선 국가공무원법 PDF 파일을 불러왔다. 텍스트를 추출한 뒤 약 500자 단위로 문단을 나눴다.각 문단을 SentenceTransformer로 임베딩한 뒤, ChromaDB에 저장했다.벡터 DB는 Google Drive에 저장하여, 다른 파일에서도 동일한 DB를 그대로 사용할 수 있도록 했다.파인튜닝한 모델 로드RAG 코드에서는 Unsloth를 사용하지 않았다.대신 HuggingFace와 PEFT를.. 2026. 2. 20. GDG : AI 개발코스 Week11 이번 주는 지금까지 프로젝트를 진행하면서 생겼던 트러블 슈팅들을 각 팀마다 정리하고 발표하는 시간을 가졌다.우리 팀의 트러블 슈팅을 정리해 보겠다.트러블 슈팅 정리전처리 단계: GPT-4o mini를 선택한 이유전처리 단계에서 가장 먼저 고민한 질문은“왜 GPT-OSS가 아니라 GPT-4o mini인가”이다.전처리의 특성전처리는 단일 문서를 처리하는 작업이 아니다. 많은 텍스트를 대상으로 정제, 요약, 구조화를 반복적으로 수행하는 단계이다.따라서 이 단계에서는 모델의 성능보다도 API 안정성과 파이프라인 유지 가능성이 중요하다.GPT-4o mini의 장점API 형태로 즉시 사용 가능하다텍스트 정제, 요약, 구조화 작업에 충분한 성능을 제공한다별도의 실행 환경을 구성할 필요가 없다이러한 이유로 전처리 파이.. 2026. 2. 18. GDG : AI 개발코스 Week10 10주 차에는 팀원이 파인튜닝한 모델을 테스트해 보고 RAG Pipeline 관련 토의를 진행했습니다.학습방식Unsloth 및 필수 라이브러리 설치unsloth 라이브러리를 설치하여 LLM 파인튜닝 속도를 최적화 & colab-new 옵션은 Colab 환경에 맞춰 설정.xformers, trl, peft, accelerate, bitsandbytes 등 파인튜닝에 필요한 주요 라이브러리들을 추가 설치.Unsloth 로드 확인unsloth에서 FastLanguageModel을 임포트 하고, "Unsloth & Xformers 설치 완료! 🚀" 메시지를 출력하여 라이브러리 로드 및 패치가 성공적으로 이루어졌는지 확인.모델 및 토크나이저 불러오기Unsloth의 FastLanguageModel을 사용하여 un.. 2026. 2. 2. GDG : AI 개발코스 Week9 9주 차에는 새로 바꾼 전처리 데이터로 모델 학습 진행을 조금 진행했다.전처리의 핵심: [근거 - 설명 - 결론] 프레임워크가공의 핵심은 모든 데이터를 [판단 근거 → 상세 설명 → 최종 결론]이라는 3단계 구조로 통일한 것입니다.판단 근거에는 해당 사안에 적용되는 정확한 법령 조항을 명시했고,상세 설명에는 그 법령이 왜 이 사안에 적용되는지 추론 과정을 넣었으며,최종 결론에는 교사가 바로 확인할 수 있는 답변을 배치했습니다.이는 저희가 사용할 경량 모델에게 '답'만 외우게 하는 것이 아니라, 어떤 근거를 찾아 어떻게 사고해야 하는지 그 '사고의 사슬(Chain of Thoutgh)'을 이식하기 위한 설계였습니다.데이터 성격별 맞춤형 프롬프트 설계특히 모든 데이터를 일괄적으로 처리하지 않았습니다. 데이터.. 2026. 1. 28. GDG : AI 개발코스 Week7 7주 차에는 데이터 전처리를 마치고, 파인튜닝을 진행할 계획이었다.그러나 무료 코랩 환경에서 내가 원하는 전처리 방법을 사용하기에 무리가 있어서 계속 오류가 났었다.오류 1현재 GPT에서 무료로 푼 GPT-OSS를 사용하여 전처리를 진행하려 했지만, 계속해서 ‘시간 초과’라는 이해가 되지 않는 오류가 발생하여 그냥 gpt-4o-mini를 사용하기로 했다.오류 2Copy🚀 Team DIET 20배속 엔진 가동! (담당: SUM)📂 입력 폴더: ['/content/drive/MyDrive/DIET_SUM/02.라벨링데이터_TL', '/content/drive/MyDrive/DIET_SUM/02.라벨링데이터_VL']📝 출력 파일: /content/drive/MyDrive/legal_output/train.. 2026. 1. 12. GDG : AI 개발코스 Week6 지난 포스팅에서 Team DIET는 보안이 중요한 공공/행정 도메인, 특히 '선생님'이라는 페르소나를 위해 온프레미스(On-Premise) 환경에서 구동 가능한 경량화 AI를 만들기로 했다.이번 주차의 핵심 과제는 모델이 학습할 데이터를 준비하는 것이다. 나는 이번 단계에서 원천 데이터 확보 및 협업 환경 구축을 담당했고, 이후 팀원들이 진행한 데이터 전처리(SFT Formatting) 과정을 코드를 통해 깊이 있게 분석해 보았다.1. 데이터 확보 및 협업 환경 구축 (My Role)우리가 목표로 하는 모델은 행정 및 법률에 특화된 모델이다. 이를 위해 양질의 한국어 법률 데이터가 필수적이었고, AI Hub의 행정법 데이터를 활용하기로 결정했다.데이터 출처: AI Hub 행정 문서 대상 기계독해 데이터문.. 2026. 1. 7. GDG : AI 기획코스 Week5 1. 팀 이름 및 프로젝트 개요 핵심 목표: 범용 거대 모델이 아닌, 특정 도메인(법률/행정)에 특화되어 제한된 컴퓨팅 환경(Local)에서도 실용적으로 작동하는 경량화 AI 구현.프로젝트 철학: 지식 증류(Knowledge Distillation)를 통해 핵심 정보만을 추출, 보안과 효율성을 동시에 확보. 2. 주제 방향성 페르소나: 현직 교사(50대) 심층 인터뷰 결과, 일반 업무에는 AI 활용도가 높으나 민감 정보(학생부, 민원, 내부 규정) 처리 시 보안 우려로 인해 AI 도입이 단절되는 현상을 발견.해결책 도출: 외부 서버 통신이 차단된 폐쇄망/로컬 환경에서 구동 가능한 On-Premise형 문서 검토 AI의 필요성 확인. 3. 사용자(페르소나)페르소나는 팀원의 지인분을 택했다. Pipelin.. 2025. 12. 30. GDG : AI 미션코스 Week4 Week2 : Dense 층으로 모델 만들기Week3 : RNN과 LSTM으로 모델 만들기Week4는 Transformer 기반 감성 분류 모델을 만들어보았다. 마침 저번주에 Transformer가 나온 논문(Attention Is All You Need)을 리뷰했었다.복습하는 느낌으로 공부했다~먼저 Transformer를 구현할 때 필요한 라이브러리를 임포트 했다.Copyfrom tensorflow.keras.layers import ( Embedding, Dense, Dropout, LayerNormalization, Input, GlobalAveragePooling1D)from tensorflow.keras.models import Model, Sequentialfrom tensorflo.. 2025. 11. 28. GDG : AI 미션 코스 Week3 Week2에서는 Dense 층만으로 모델을 만들고 fit()하면서 결과를 확인해 봤다.Week3에서는 모델을 업그레이드해서 성능을 좋게 만들어보자.→ 더 깊은 자연어 처리 모델 만들기.SimpleRNN으로 모델 만들기기존 Dense 모델은 문장 순서를 반영하지 못하는 단점이 있었다.c.f. “배우 연기는 좋았지만 스토리가 아쉬웠다”와 “스토리는 아쉬웠지만 배우 연기는 좋았다”는 거의 같은 단어를 사용하지만, 순서에 따라 평가가 달라지기 때문에 Dense 모델을 사용하기 애매하다.SimpleRNN은 가중치 초기화와 내부 상태 초기값에 더 민감하다.RNN : 순서가 있는 데이터를 처리하고 예측하는 딥러닝 모델로, 과거 데이터를 기억하면서 가중치를 붙이는 순환적 구조를 가지고 있다.Copyrnn_model =.. 2025. 11. 21. GDG : AI 미션코스 Week2 Week1에서는 데이터를 받아서 전처리하는 작업을 진행했었다.데이터 전처리 : 텍스트 데이터를 숫자 벡터 형태로 변환오늘은 그 데이터를 실제로 인공지능 모델에 학습시켜 보자!Week1에서 train을 만들었으니, test도 벡터화하자.Copytest_text_X = [ row.split('\t')[1] for row in test_text.split('\n')[1:] if row.count('\t') > 0]# Week1에서 학습된 vectorize_layer 그대로 사용합니다.test_X = vectorize_layer(test_text_X)print("test_X shape:", test_X.shape)print("test_Y shape:", test_Y.shape)이제 모델의 하이퍼.. 2025. 11. 12. 이전 1 다음