IT
실습 보고서 자동 리뷰 및 평가 자동화
서호60
2025. 6. 18. 13:41
Gemini 자동 리뷰 및 평가 시스템 자동화 방안
Gemini의 실습 보고서 자동 리뷰 및 평가를 자동화하기 위해서는 Discord 봇, GitHub API, 그리고 Gemini API를 연동하는 워크플로우를 구축해야 합니다.
1. 시스템 아키텍처 구상
핵심은 Discord에서 보고서 제출 이벤트가 발생하면, 해당 보고서(GitHub Wiki)를 Gemini가 분석하고, 그 결과를 다시 Discord로 전송하는 일련의 과정을 자동화하는 것입니다.
코드 스니펫
graph TD
A[학생: GitHub Wiki에 실습보고서 작성 및 푸시] --> B[학생: Discord #실습보고서-제출 채널에 GitHub Wiki 링크 제출];
B --> C{Discord 봇: 메시지 감지 및 링크 추출};
C --> D{Discord 봇: GitHub API 호출 -> Wiki 내용 가져오기};
D --> E{Discord 봇: Gemini API 호출 -> Wiki 내용 전달 및 분석 요청};
E --> F[Gemini: 보고서 내용 분석 및 평가/코멘트 생성];
F --> G{Discord 봇: Gemini 응답 수신};
G --> H[Discord 봇: 학생 스레드에 Gemini 평가 및 코멘트 게시];
H --> I[교수: Gemini 평가 및 코멘트 확인 후 최종 피드백 제공];
2. 구체적인 실행 방안 (단계별 접근)
단계 1: Discord 봇 개발 (핵심!)
이 모든 자동화의 시작은 Discord 봇입니다. 파이썬(Python)의 discord.py 라이브러리를 활용하는 것을 강력히 추천합니다.
- 봇 생성 및 설정:
- Discord 개발자 포털에서 새로운 애플리케이션을 만들고 봇을 추가합니다.
- 봇 토큰을 발급받아 보안된 환경에 저장합니다.
- 필요한 퍼미션(메시지 읽기, 메시지 보내기, 스레드 관리 등)을 봇에 부여합니다.
- 메시지 리스너 구현:
- on_message 이벤트 핸들러를 사용하여 #실습보고서-제출 채널에 새로운 메시지가 올라오는지 지속적으로 감지합니다.
- 메시지 내용이 GitHub Wiki 링크(github.com/.../wiki/... 형태)인지 정규표현식 등을 사용하여 확인합니다.
- 중요: 학생이 제출한 메시지에 대한 스레드 내에서 작동하도록 구현하여, 각 학생의 보고서와 피드백이 섞이지 않도록 합니다. (예: message.create_thread())
단계 2: GitHub Wiki 내용 가져오기
Discord 봇이 GitHub Wiki 링크를 감지하면, 해당 Wiki의 내용을 가져와야 합니다.
- GitHub API 활용:
- GitHub Wiki는 기본적으로 Git 리포지토리의 일부이므로, GitHub API를 통해 파일 내용을 가져올 수 있습니다.
- 보고서 링크에서 Repository Owner, Repository Name, Wiki Page Name을 추출합니다.
- GET /repos/{owner}/{repo}/contents/{path} API를 사용하여 Wiki 페이지의 마크다운(Markdown) 내용을 가져옵니다.
- 인증: Public Wiki라면 별도의 인증 없이 가능하지만, Private Wiki라면 GitHub Personal Access Token(PAT)을 발급받아 봇이 API를 호출할 때 사용해야 합니다. (보안 중요!)
- 대안 (웹 스크래핑 - 비권장):
- GitHub Wiki 페이지는 웹 페이지이므로, requests와 BeautifulSoup 등을 사용하여 HTML을 파싱하고 내용을 추출할 수도 있습니다.
- 단점: GitHub의 UI/HTML 구조가 변경될 경우 봇이 오작동할 수 있으므로, API 사용이 훨씬 안정적입니다.
단계 3: Gemini API 연동 및 보고서 분석 요청
가져온 GitHub Wiki의 마크다운 내용을 Gemini API로 전달하여 분석 및 평가를 요청합니다.
- Gemini API 클라이언트:
- Google Cloud Console에서 Gemini API를 활성화하고 API 키를 발급받습니다.
- Python용 Google Generative AI 클라이언트 라이브러리(google-generative-ai)를 설치합니다.
- API 키를 사용하여 Gemini 모델을 초기화합니다.
- 프롬프트 엔지니어링 (가장 중요!):
- Gemini에게 명확하고 구체적인 지시를 내려야 정확한 평가를 얻을 수 있습니다.
- 역할 부여: "당신은 IT 학부의 임베디드 시스템 교수입니다. 학생의 GitHub Wiki 실습 보고서를 평가하고 구체적인 피드백을 제공합니다."
- 평가 기준 명시:
- 코드 품질 (가독성, 효율성, 주석, 오류 처리 등)
- 하드웨어 및 소프트웨어 연동 이해도 (ESP32/라즈베리파이 활용, 회로도, 핀 연결 등)
- 문제 해결 능력 (발생 문제, 해결 과정, 시도한 방법 등)
- 보고서 완성도 및 명확성 (구조, 내용 충실도, 이미지/도표 활용 등)
- 출력 형식 지정:
- 예: "다음과 같은 JSON 형식으로 평가를 제공하세요." 또는 "다음과 같은 마크다운 형식으로 제공하세요."
- 예시 마크다운 형식:
Markdown
### 🛠️ 실습 보고서 평가 (Gemini) **평가 점수 (1-5점):** 4.5/5.0 **[종합 의견]** 이 보고서는 ... 에 대한 이해도가 높고 ... 부분에서 인상적이었습니다. 하지만 ... 부분은 개선이 필요해 보입니다. **[세부 평가]** * **코드 품질:** (점수)/5 - ... 에 대한 주석이 잘 되어 있고, 함수 분리가 명확합니다. 하지만 ... 부분의 에러 처리가 부족합니다. * **하드웨어/소프트웨어 연동:** (점수)/5 - ESP32 핀 연결이 정확하고, 센서 데이터 수신 로직이 잘 구현되었습니다. 다만 ... 회로도 첨부가 누락되었습니다. * **문제 해결 능력:** (점수)/5 - ... 오류 발생 시 로그를 분석하여 해결한 과정이 구체적입니다. 하지만 ... 문제에 대한 다른 시도도 기록하면 더 좋겠습니다. * **보고서 완성도:** (점수)/5 - 각 섹션의 내용이 충실하고 이미지 자료가 풍부합니다. 서론과 결론이 조금 더 보강되면 좋겠습니다. **[개선 제안]** 1. ... 부분을 보완해보세요. 2. ... 기능을 추가해보면 더 좋습니다.
- 보고서 내용 전달: model.generate_content(prompt + "\n\n" + wiki_content) 형식으로 프롬프트와 실제 Wiki 내용을 함께 전달합니다.
단계 4: Gemini 응답 처리 및 Discord에 게시
Gemini로부터 받은 평가 결과를 파싱하여 Discord에 적절한 형식으로 게시합니다.
- 응답 파싱: Gemini가 JSON 형식으로 응답을 주기로 했다면, Python의 json 라이브러리를 사용하여 파싱합니다. 마크다운 형식이라면 그대로 Discord 메시지로 전송합니다.
- Discord 메시지 전송:
- message.channel.send() 또는 스레드 객체의 send() 메서드를 사용하여 Gemini가 생성한 평가와 코멘트를 학생의 제출 스레드에 게시합니다.
- 시각적으로 눈에 띄도록 Discord 마크다운 문법(볼드, 이탤릭, 코드 블록 등)을 활용합니다.
- Gemini의 평가임을 명확히 알 수 있도록 메시지 앞에 "🛠️ 실습 보고서 평가 (Gemini)"와 같은 머리말을 붙입니다.
단계 5: 추가 고려사항 및 고도화
- 에러 처리 및 로깅:
- GitHub API 호출 실패, Gemini API 호출 실패, 네트워크 오류 등 다양한 예외 상황에 대비한 에러 처리 로직을 구현합니다.
- 모든 처리 과정을 로깅하여 문제 발생 시 디버깅할 수 있도록 합니다.
- 레이트 리미팅:
- GitHub API와 Gemini API 모두 호출 횟수 제한(Rate Limit)이 있습니다. 이를 고려하여 API 호출 간 지연 시간을 두거나, 필요에 따라 비동기 처리(asyncio)를 고려합니다.
- 지속적인 프롬프트 개선:
- Gemini의 평가 품질은 프롬프트에 크게 좌우됩니다. 실제 보고서들을 통해 Gemini의 평가를 검토하고, 미흡한 부분이 있다면 프롬프트를 지속적으로 개선해야 합니다.
- 더 나은 피드백을 위해 Few-shot Learning (몇 가지 잘 평가된 예시를 프롬프트에 포함)을 고려할 수 있습니다.
- 교수 피드백 연동:
- Gemini의 자동 평가가 완료되면, 교수가 Discord에서 해당 평가를 확인하고 추가적인 수동 피드백을 쉽게 남길 수 있도록 유도합니다.
- (고도화) 교수가 Gemini의 평가에 '좋아요' 또는 '수정 필요' 같은 이모지 반응을 달면, 해당 평가를 학습 데이터로 활용하여 Gemini 모델을 미세 조정(fine-tuning)하는 것을 장기적으로 고려해볼 수 있습니다.
- 배포:
- 개발된 Discord 봇은 24시간 안정적으로 동작해야 하므로, AWS EC2, Google Cloud Run, Heroku, Replit 등 클라우드 환경에 배포합니다.
- Git Webhook 활용 (고도화):
- 학생이 GitHub Wiki를 푸시할 때마다 Discord 봇이 아닌 GitHub Webhook을 통해 특정 엔드포인트(웹훅 수신 서버)로 알림을 보내도록 설정할 수 있습니다.
- 이 엔드포인트에서 Wiki 내용을 가져와 Gemini로 보내는 로직을 구현하면, 학생이 Discord에 별도로 링크를 제출하지 않아도 자동화가 시작될 수 있습니다. (구현 난이도 상승)
이러한 단계별 접근을 통해 Gemini를 활용한 실습 보고서 자동 리뷰 및 평가 시스템을 효과적으로 구축할 수 있을 것입니다. 가장 중요한 것은 Discord 봇 개발과 Gemini에 전달할 프롬프트를 정교하게 설계하는 것입니다.