소개
AI에게 논문 요약을 시키면 결과물은 늘 그럴듯합니다. 문제는 확인할 방법이 없다는 거예요.
"효과가 있었다" 같은 뭉뚱그린 문장만 나옴
수치를 물으면 숫자를 말해주는데 원문 어디에도 없음
페이지를 물으면 페이지를 말해주는데 그 페이지에 그 내용이 없음
제일 무서운 건 세 번째입니다. 수치는 맞는데 페이지만 틀린 인용은 눈으로 검토해도 안 걸려요. 확인하려면 85쪽짜리 PDF를 다시 열어야 하니까요.
그리고 서베이는 시작하기 전부터 막히는 게 하나 더 있습니다. "내가 뭘 모으고 싶은지"를 규칙으로 옮기는 일이요. 키워드를 넣어보면 반드시 포함 " ", 제외 -를 입력해도 때에 따라서 모두 포함되거나 모두 제외되기도 합니다.
그래서 이번엔 모든 수치와 인용이 원문 페이지로 되짚어지는 서베이를 만들어보기로 했습니다.
목표는 두 가지였어요.
검증을 사람 눈이 아니라 스크립트로 넘기기 — 요약의 모든 수치·인용을 원문과 자동 대조
AI가 못 하는 건 못 한다고 말하게 하기 — 자료가 없으면 채우지 말고 그 사실을 남기기
진행 방법
사용한 도구
항목
내용
도구
Claude Code (터미널)
모델
Claude Opus 5
플러그인
eric-research-survey — 서베이 파이프라인 스캐폴딩 + 결정론 검수 게이트
의존성
python3 표준 라이브러리 + pdfplumber (PDF 텍스트 추출)
데이터 소스
ERIC — 미국 교육부 교육학 문헌 DB · 무료 · API 키 불필요
ERIC은 세 경로를 다 씁니다.
검색: https://eric.ed.gov/
API: https://api.ies.ed.gov/eric/
전문 PDF: https://files.eric.ed.gov/fulltext/<ID>.pdf
실제로 입력한 프롬프트 전문
① 시작 — 폴더 하나 가리키고 주제만 던짐
"D:\2026\2026work\AI-agents\eric-research-survey"이용해서 eric에서
주제 [ ] 관련 논문을 가져와줘.
이 목적에 맞게 워크스페이스를 구축해줘.
② 첫 사이클 실행
program-design-partnership 카테고리로 한 사이클 돌려줘
③ 두 번째 사이클
mentoring-supervision 카테고리도 돌려줘
④ 중간 점검 — 진짜 만들어졌는지 확인
워크스페이스 구축한 거 맞아?
⑤ 나머지 전부
남은 카테고리 3개도 이어서 돌려줘
Claude가 되물은 것 — 만들기 전에 자료부터 쟀다
①번을 입력했을 때 바로 만들지 않고 ERIC을 먼저 두들겼습니다.
ERIC에 자료가 충분합니다 — "주제 [ ] 관련", 2015년 이후 219편, 동료심사만 142편입니다.
그리고 세 가지를 한 번에 물어봤어요. 선택지만 고르면 되니 편했습니다.
질문
선택지
제 선택
워크스페이스 위치
AI-agents 아래 / 2026work 아래
AI-agents 아래
코퍼스 범위
2015년+ 전체 219편 / 동료심사만 142편 / 연도 무제한 236편
219편 전 체
분류 체계
4개 하위 카테고리 / 단일 카테고리 / 반입 후 결정
4개 하위 카테고리
"만들어놓고 보니 자료가 없더라"를 방지하는 순서입니다.
📷 (이미지 자리 — ERIC 사전 조사 결과와 선택지 질문 화면)
만들어진 것
teacher-residency-survey/
├─ 00-system/taxonomy.json 출현율 기반 5카테고리 분류 규칙
├─ 60-data/corpus.json ERIC 219편 (제목·초록·메타데이터)
├─ 60-data/raw/ PDF 42편 + 페이지별 추출 텍스트
├─ 40-drafts/ 검증 통과 요약 42건
├─ 70-analysis/ 카테고리별 랭킹·쇼트리스트
├─ 80-reports/interim/ 서베이 리포트 5건
└─ _meta/run-state.json 사이클 진행 상태(중단·재개용)
워크스페이스가 만들어진 뒤 Claude가 표준 정합성을 자동 검증했습니다. "만든 것 같다"가 아니라 검사를 돌려서요.
CLAUDE.md 12섹션 / 10단위 폴더 넘버링 / 빈 폴더 .gitkeep /
메타파일 4종 / 플레이스홀더 잔존 0 → 전건 통과
핵심 ① 분류 규칙을 감이 아니라 출현율로 설계
주제를 하위 분야로 가르는 규칙 파일(다이얼)을 만드는데, 핵심인 단어를 넣었더니 한 카테고리에 219편 중 184편(84%)이 포함되었습니다.
그때 Claude가 방향을 틀었어요.
코퍼스 내 각 표현의 출현율(document frequency)을 실측했습니다.
residency model/program75%,Teacher Education Programs65%,teacher preparation47%. 코퍼스가 이미 레지던시로 한정돼 있어서 이 표현들은 카테고리를 가르지 못합니다.
코퍼스 전체에 나오는 단어는 분류 기준으로 쓸모가 없다
규칙을 이렇게 바꿨습니다.
출현율 4~45% 구간의 표현만 분류 패턴(제목 가중치 3)으로 사용
75%짜리 범용어는 보조 점수(가중치 1)로 강등
실제 다이얼 파일 일부입니다.
{
"title_weight": 3,
"default_threshold": 3,
"guards": {
"residency": "\\b(residenc(?:y|ies)|resident teachers?|teacher residents?)\\b"
},
"categories": {
"mentoring-supervision": {
"guard": "residency",
"threshold": 3,
"patterns": [
"mentor\\w*|Mentors",
"cooperating teachers?|Cooperating Teachers",
"\\bcoach\\w*",
"supervis\\w+",
"\\bfeedback\\b|\\bobservation\\b|\\bco[- ]?planning\\b"
],
"relevance_terms": [
"\\bdyad\\w*|\\bpair\\w+", "\\breflect\\w+",
"\\bnovice\\b|Beginning Teachers"
]
}
}
}
조정 4회 기록이 그대로 남아 있습니다.
회차
조치
결과
1
좁은 패턴
미분류 72편(33%) — 너무 좁음
2
패턴 대폭 확장
한 카테고리가 184편(84%) — 너무 넓음
3
출현율 실측 후 재설계
미분류 52편(24%)
4
5번째 카테고리 + 범용어 강등
미분류 26편(12%)
📷 (이미지 자리 — 출현율 측정 결과 출력 화면)
핵심 ② 데이터가 카테고리를 하나 더 요구했다
3회차에서 미분류가 52편 남았을 때 Claude가 그 목록을 훑어보고 보고했습니다.
미분류 52편이 하나의 일관된 주제로 묶입니다 — 레지던트 본인의 학습 과정·정체성 형성·현장 경험. 현재 4개 카테고리 어디에도 속하지 않습니다. 프로그램 구조도, 멘토 관계도, 형평성도, 성과·정책도 아니기 때문입니다.
"4개로 하자"고 정했는데 데이터가 5번째를 요구한 겁니다.
핵심 ③ "초록으로는 규칙을 못 지킵니다" — PDF 42편을 받아옴
인용 규칙이 PDF 본문 페이지 인용 최소 3개와 초록 복붙 금지를 요구하는데, 코퍼스에는 초록밖에 없습니다. 초록만으로 요약을 쓰면 페이지 번호를 지어내야 합니다 — 이 하네스가 막으려는 바로 그 행위입니다.
그래서 ERIC 전문 PDF를 실제로 내려받는 쪽으로 틀었습니다. 42편(59MB)을 받아 페이지별로 텍스트를 추출했어요.
요약 착수 전에 PDF 1쪽 제목이 코퍼스 제목과 같은지 먼저 확인합니다. 엉뚱한 논문을 요약하는 사고를 막는 장치예요.
id pages chars 제목 대조
------------------------------------------------------------
ED674820 123 408,949 OK 100% (p.1)
EJ1220511 29 53,369 OK 100% (p.1)
ED650987 110 227,288 OK 100% (p.2) ← 1쪽이 이미지 표지
...
제목 대조 전건 통과 (요약 착수 가능)
핵심 ④ 검수 게이트 — 스크립트가 인용을 전수 대조
검수기가 하는 일은 단순합니다. 요약의 Evidence 절에서 모든 수치와 직접인용을 뽑아, 원문 텍스트에 글자 그대로 있는지 대조합니다. 없으면 FAIL.
python verify_summaries.py --dir 40-drafts/program-design-partnership \
--corpus 60-data/corpus.json --source-dir 60-data/processed
실패하면 이렇게 나옵니다.
[FAIL] EJ1382792.md: Evidence 수치 원문 부재: '28';
Evidence 인용 문구 원문 부재: 'I feel safe at this school'
전부 통과하면 이렇게요.
검수: 파일 10 · PASS 10 · FAIL 0 · WARN 10
3중 검증을 돌립니다 — ①자가검증(규격) ②독립 실측(원문 대조) ③표본 cold-read(인용 위치 직접 재확인).
결과와 배운 점
실측 숫자
코퍼스: ERIC 219편 (2015~2026) · 학술지(EJ) 119 + 기관 보고서(ED) 100 · 동료심사 142편 · 전문 PDF 보유 108편
분류: 5개 카테고리 (103 / 86 / 71 / 40 / 23편) — 다중라벨이라 합계 323, 합집합 193편 + 미분류 26편(12%) = 219
정독: PDF 42편 (59MB) · 제목 대조 42/42 통과
검증: 자가검증 42/42 · 독립 실측 42/42 · cold-read 표본 10편 인용 전건 일치
게이트 반려: 12건 (요약 11건 + 검수기 버그 1건) → 전건 수정 후 통과
산출: 서베이 리포트 5건 · 인사이트 16건 · 연구 갭 23건
워크스페이스: 파일 258개 · 59MB · 표준 정합성 검증 통과
분류 합계가 코퍼스보다 큰 이유 — 다중라벨이라 한 논문이 여러 카테고리에 동시에 들어갑니다.
논문당 카테고리 수
편수
합계 기여
0개 (미분류)
26
0
1개
94
94
2개
73
146
3개
21
63
4개
5
20
계
219
323
카테고리별 진척
카테고리
이번 배치
누적 커버
카테고리 전체
프로그램 설계·파트너십
10
18
103
성과·잔류·정책
10
18
86
형평성·다양성
10
17
71
멘토링·지도
10
12
40
레지던트 학습·정체성
2
3
23
정독 논문 실수
42
—
219
"이번 배치"는 더하면 42로 맞지만, "누적 커버"는 더하면 안 됩니다(다중라벨). 두 열이 다른 건 이미 읽은 논문을 다시 읽지 않았기 때문이에요.
시행착오 4가지
① 다이얼이 84%를 삼켰다
② 게이트가 12번 반려했고, 원인이 4가지로 수렴했다
원인
횟수
내용
비verbatim 인용
4
PDF 표에서 공백이 소실돼 Ifeel safe at thisschool인데 정상 표기로 인용
Evidence 절 경계 누수
1
각주 경로 60-data/...의 60이 수치 주장으로 잡힘
번역문을 인용부호로 감쌈
2
영어 원문을 한국어로 옮기고 " "를 붙임
한국어 수 표기가 만든 유령 숫자
4
아래 표
요약에 쓴 표기
검수기가 뽑은 숫자
원문
약 1,200만 명
200
12 million
2024년 8월
8
AUGUST 2024
300만 명 증가
300
3 million
2024년 7월 갱신
7
Updated July 2024
번역과 단위 환산은 너무 자연스러운 서술 습관이라 의식적으로 막기 어렵습니다. 그런데 그 순간 원문에 없는 숫자가 생겨나요.
③ 12번 중 1번은 검수기가 틀렸다
'28'이 원문에 없다고 나왔는데, 원문에는 SPSS version 28. 이라고 분명히 있었습니다.
경계 매칭이
(?![\d.])로 되어 있어 문장 끝 마침표를 소수점으로 오인합니다."version 28."의28뒤에.이 오니까 "소수의 일부"로 판단해 거부합니다.
# 수정 전 — 문장 끝 마침표를 소수점으로 오인해 거짓 FAIL
found = re.search(rf"(?<![\d.]){re.escape(n)}(?![\d.])", src_norm)
# 수정 후 — 소수의 일부('999.5'의 999)는 여전히 거부하되 문장 끝 숫자는 찾는다
found = re.search(rf"(?<![\d.]){re.escape(n)}(?!\d)(?!\.\d)", src_norm)
자체검사 케이스 3종을 추가하고 스크립트 8개 자체검사를 다시 돌려 통과 확인했습니다.
④ 셸이 정규식을 조용히 망가뜨렸다
정규식이 든 JSON을 셸 명령으로 만들었더니 셸이 \\b(단어 경계)를 \b로 줄여버렸습니다. JSON에서 "\b"는 백스페이스 문자예요. 정규식이 조용히 고장 났고 출현율 측정값이 틀리게 나왔습니다.
coach출현율이 0%로 나오는데, 앞선 개념어 스캔에서는 11건이 잡혔습니다. 값이 서로 모순됩니다.
가장 인상 깊었던 것 — "이 카테고리는 못 합니다"
이 카테고리는 10편 사이클이 불가능합니다. 23편 중 ERIC 전문 PDF 보유가 3편뿐이고, 그중 1편은 이미 정독했습니다 — 신규 2편이 전부입니다. 초록만 있는 문헌이 87%라 인용 규칙을 만족할 수 없습니다.
2편만 정독한 뒤 리포트 맨 앞에 표를 만들어 사유를 적었습니다.
카테고리
전문 보유
비율
성과·잔류·정책
57 / 86
66%
프로그램 설계·파트너십
51 / 103
50%
형평성·다양성
33 / 71
46%
멘토링·지도
17 / 40
42%
레지던트 학습·정체성
3 / 23
13%
정책 보고서가 많은 카테고리는 전문이 열려 있고, 학술지 논문 위주인 카테고리는 닫혀 있습니다. "자료 접근 자체가 연구 갭"이라는 항목까지 갭 목록에 넣었어요.
나만의 꿀팁
만들기 전에 자료가 있는지 재게 하기 — "워크스페이스 만들어줘"에 바로 착수시키지 말고, 몇 건이 검색되는지·전문 접근 비율이 얼마인지 먼저 재게 하세요
감이 아니라 분포를 재게 하기 — "이 단어 넣을까요?" 대신 "이 단어가 코퍼스의 몇 %에 나오는지 재줘"
검사가 실패하면 두 방향을 다 의심하기 — 요약이 틀렸을 수도, 검사기가 틀렸을 수도 있습니다. 12번 중 1번은 검사기 쪽이었어요
"못 하는 부분은 못 한다고 적어줘"를 규칙으로 — 그래야 4/5는 10편, 1개는 2편이라는 비대칭이 결과에 드러납니다
정규식·백슬래시가 든 파일은 셸 명령으로 만들지 말 것 — 조용히 망가지고, 망가진 값으로 설계가 진행됩니다
앞으로의 계획
갭 23건 중 하나로 검증 가능한 가설을 세워볼 생각입니다. 지금 제일 끌리는 건 사이클들이 정면으로 충돌한 지점이에요.
현행 매칭 관행은 교수 효과성을 기준으로 멘토를 고르는데
정작 연구는 "좋은 교사가 좋은 멘토는 아니다"라고 말하고
한 연구에서는 멘토의 2/3가 자기 학생들이 스스로를 어떻게 정체화하는지 답하지 못했습니다
기준별로 결과가 어떻게 다른지 비교한 연구가 문헌에 없다는 것까지 확인됐으니, 가설 하나가 나올 자리 같습니다.
도움 받은 글 (옵션)
스터디장님(엔지니어H)과 부스터디장님(리히토)의 강의와 자료