구글 워크스페이스 CLI(GWS)와 데이터 분석을 결합한 형성평가 자동화 환류
전통적인 형성평가는 문항 출제, 배포, 채점, 학생 맞춤 피드백까지 많은 시간이 소요되어 실시간 환류가 어려웠습니다.
MetaLoop는 AI 에이전트와 구글 워크스페이스 API를 결합하여 "자료 입력 → 배포 → 수집 → 군집 분석 → 피드백"의 전 과정을 자동 순환 루프로 구축합니다.
각 단계를 개별적인 파이썬 코드 및 GWS CLI 도구로 검증하고 하나의 자율 에이전트 스킬로 결합합니다.
PyMuPDF (fitz), pdfplumber, pypdf| 라이브러리 | 주요 특징 | 교육용 활용 적합도 |
|---|---|---|
| PyMuPDF (fitz) | 속도가 매우 빠르고, 텍스트 레이아웃 보존력이 우수함 | ⭐⭐⭐⭐⭐ (가장 추천) |
| pdfplumber | 표(Table) 데이터 추출에 강력함 | ⭐⭐⭐⭐ (수치 데이터가 많을 때) |
| pypdf | 간단한 텍스트 추출 및 PDF 파일 분할/결합에 강함 | ⭐⭐⭐ (기본 유틸리티용) |
import fitz # PyMuPDF
def extract_pdf_text(pdf_path):
doc = fitz.open(pdf_path)
full_text = ""
for page in doc:
full_text += page.get_text() + "\n"
return full_text
# 실행 후 markdown 파일로 저장하여 AI가 읽을 수 있도록 준비
extracted_content = extract_pdf_text("chemistry_midterm_guide.pdf")
with open("chemistry_guide.md", "w", encoding="utf-8") as f:
f.write(extracted_content)
# 1. 특정 학습자료 기반 노트북 생성 notebooklm create "화학1 형성평가 세션" # 2. 파싱한 자료 주입 notebooklm source add "./chemistry_guide.md" # 3. 객관식 및 서술형 퀴즈 생성 notebooklm generate quiz --difficulty medium --quantity 10 # 4. 문제를 마크다운 파일로 로컬 다운로드 notebooklm download quiz --format markdown ./assessment.md
forms API를 호출하여 객관식, 단답형 문제를 담은 온라인 설문지를 실시간으로 퍼블리시합니다.# assessment.json 파일 형식 예시
# {"title": "화학1 형성평가", "items": [{"question": "원소의 정의는?", "options": ["원자", "물질", ...], "answer": "원자"}]}
# gws CLI를 활용하여 새 설문지 생성
gws forms create --json '{"info": {"title": "제1회 화학 형성평가", "documentTitle": "화학 형성평가"}}'
# 설문지 문항 업데이트 (gws forms batch-update 사용)
gws forms batch-update --form-id --json-file ./form_questions.json
설문지가 완성되면 학생 명렬표(이메일 리스트)를 불러와 gws의 +send 헬퍼 명령어로 개별 자동 배포를 수행합니다.
# 특정 학생에게 형성평가 설문지 링크를 포함한 안내 메일 발송 gws gmail +send \ --to "student1@school.hs.kr" \ --subject "[화학1] 오늘 수업 형성평가 링크 배포" \ --body "오늘 학습한 내용에 대한 형성평가입니다. 아래 링크에서 응시해 주세요.\n링크: https://forms.gle/xxxxxx"
+read 헬퍼 명령어를 사용해 학생들의 이메일, 정답 유무, 오답 선택 문항 등의 채점 결과를 JSON 스트림으로 로컬에 취합합니다.# 구글 시트 ID를 사용해 학생 응답 데이터를 A열부터 E열까지 가져옴 gws sheets +read --id "SPREADSHEET_ID_XXXX" --range "응답시트1!A2:E40"
단순히 점수순으로 줄을 세우는 대신, 머신러닝 군집화(K-Means)를 활용해 학생들의 오답 패턴을 분석합니다.
import pandas as pd
from sklearn.cluster import KMeans
# 1. 학생 응답 데이터 로드 (시트 취합 결과)
df = pd.read_csv("student_responses.csv") # [학생명, 문항1_여부, 문항2_여부, 문항3_여부]
# 2. K-Means 군집 분석 실행 (3개 그룹으로 군집화)
kmeans = KMeans(n_clusters=3, random_state=42)
df['cluster'] = kmeans.fit_predict(df[['Q1', 'Q2', 'Q3', 'Q4', 'Q5']])
# 3. 군집 결과 저장
df.to_csv("clustered_students.csv", index=False)
print("군집화 완료! 군집별 맞춤형 피드백 준비 완료.")
매번 파이썬 스크립트와 gws 명령어를 개별적으로 실행하면 불편합니다. 이 전체 워크플로우를 Antigravity 에이전트가 단 한 줄의 프롬프트로 처리할 수 있도록 Skill(스킬)로 묶어줍니다.
.agents/skills/metaloop-distributor/ 폴더 생성SKILL.md 파일을 작성하여 작업 흐름을 선언적 지시사항으로 정의--- name: metaloop-distributor description: PDF 가이드를 파싱하여 문항을 출제하고 구글 폼으로 배포한 후 시트 결과를 수집하는 형성평가 루프 1단계 스킬 --- # 형성평가 배포 및 수집 자동화 ## 사용 조건 (When to use) 사용자가 "교수자료로 문제를 만들어 배포하고 결과를 가져와줘"라고 할 때 자동 활성화. ## 실행 프로세스 (Instructions) 1. 지정한 PDF 파일을 `fitz`를 활용해 파싱하여 마크다운 텍스트를 추출한다. 2. `NotebookLM-py`를 사용하여 추출된 범위 내에서 성취기준 기반의 5문항을 출제한다. 3. `gws forms`를 이용하여 문항을 탑재한 구글 설문지를 퍼블리시한다. 4. `gws gmail +send`를 활용해 등록된 학생 리스트에 설문지 링크를 전송한다. 5. 학생 응답 시트 데이터를 `gws sheets +read`로 불러와 군집 분석용 CSV 파일로 자동 저장한다.
완성된 metaloop-distributor 폴더를 워크스페이스 스킬 경로에 두고, 에이전트에게 명령합니다.
# 1. 스킬 경로 구성 #/.agents/skills/metaloop-distributor/SKILL.md # 2. 에이전트 프롬프트에 입력하여 루프 실행 위임 "metaloop-distributor 스킬을 활성화해서, 오늘 수업 자료인 'lecture_01.pdf'로 형성평가를 생성하고 배포해줘."
gws auth login이 유지되어 Google Form 생성 및 메일 발송이 성공했는가?우리는 PDF 분석, 자동 출제, 구글 워크스페이스 배포 및 수집, 데이터 군집화라는 형성평가 환류의 전반부 파이프라인을 구축했습니다.
이 프로세스를 Antigravity 스킬로 포장하여 자율 에이전트가 스스로 실행할 수 있는 시스템을 설계 완료했습니다.
실습 가이드 및 코드는 워크스페이스 내의 tasks.md를 참고하여 에이전트와 함께 단계적으로 실행해 보십시오.