TL;DR
목적: 사내 온톨로지 구축 근거를 마련하기 위해 arXiv 논문 997편 전수 수집 및 분석
핵심 개념: Ingest = 결과물(요약) 과 근거(원문 전문)를 1:1 한 쌍으로 적재하여 검수 가능성 확보
성과: 997편 중 770편 분류, 최종 56편 방법론 카드 추출 (결정론 스크립트 기반 검수 56/56 PASS)
핵심 교훈: 규칙 기반 규약 문서(
CLAUDE.md)와 결정론적 검수 하네스가 프롬프트보다 강력한 안전핀 역할을 한다.
1. 소개 — 시도 배경과 목적
"감" 대신 "논문 근거"로 실행 플랜 만들기
사내에서 용어와 관계 체계를 정의하는 온톨로지(Ontology) 구축 프로젝트를 준비 중입니다. 가장 큰 문제는 "어떻게 만들 것인가"를 결정할 객관적 근거가 부족하다는 점이었습니다.
LLM으로 자동 구축한다는 이야기는 많지만, 실제로 그게 작동하는지, 사람의 개입이 얼마나 필요한지, 무엇을 우선순위에 두어야 하는지에 대해 감이 아닌 실제 논문 근거에 기반해 답을 내리고 싶었습니다.
그래서 이번 스터디에서 제공받은 research-survey 플러그인을 리서치 하네스(Research Harness)로 활용했습니다. 목표는 다음 두 가지였습니다.
온톨로지 구축 방법론 논문을 전수 수집해 방법론 비교표 생성
해당 비교표의 근거만 활용해 사내 실행 플랜 작성 (표에 없는 근거는 절대 사용하지 않음)
이 지점이 스터디 커리큘럼인 "Ingest = 검수 가능한 형태로 — 결과물↔근거를 한 쌍으로 적재"와 만나는 곳입니다. 논문 서 베이 도메인에서 이 원칙은 다음과 같이 정의됩니다.
결과물 = 내가 작성한 논문 요약문
근거 = 해당 논문의 원문 전문 (Full Text)
이 1:1 쌍이 깨지면 요약의 정합성을 검증할 방법이 사라집니다. 실제로 저는 이 쌍을 만드는 과정에서 실수를 범해 초기 검수 5건이 전량 FAIL 나는 경험을 했습니다 (이 에피소드는 2편에서 자세히 다룹니다).
먼저 정직하게 — 커리큘럼과 실전 프로젝트의 간극
이번 커리큘럼의 정석은 "검수할 결과물 한 종류를 골라 ingest하고, 4종 문서 + 골드 Eval Set으로 기준점을 만든다"입니다. 다만 제가 진행한 논문 서베이 프로젝트는 특성상 약간의 차이가 있었습니다.
커리큘럼 항목
이번 프로젝트 실측 적용
판정
검수 대상 Ingest
논문 코퍼스 997편 (요약↔원문 전문 쌍 적재)
✅ 정확히 일치
Claim Taxonomy
taxonomy.json 5축 + 횡단 태그
⚠️ 주제 분류 (Claim 단위 분류는 아님)
4종 문서 기준선
규칙·딕셔너리·추적·이탈기록 4종 운용
⚠️ 명칭과 목적이 커리큘럼과 다름
Gold Eval Set
미구현 (원문 substring 대조로 대체)
❌ 부재
판정 3분류 (S/C/I)
PASS / FAIL (2분류)
❌ Insufficient 단계 없음
할루시네이션 3종
거짓·오출처=FAIL / 누락·부실=WARN
⚠️ 부분 적용
이 간극이 이번 회고의 핵심 소재입니다. 커리큘럼을 완전히 따르지 못했다는 자책이 아니라, 검수 하네스를 '논문 서베이'라는 다른 도메인에 적용했을 때 어디가 부합하고 어디에 오차가 생기는지를 실측 데이터로 확인한 과정이었습니다.
2. 진행 방법
사용한 도구
Claude Code +
research-survey플러그인플러그인 내 결정론 스크립트 3종 (Zero-LLM · Python 표준 라이브러리만 사용)
corpus_fetch.py: arXiv 논문 수집classify.py: Taxonomy 기반 자동 분류verify_summaries.py: 요약 검수 스크립트 (핵심 도구)
프롬프트가 아닌 "규약 문서"로 제어하기
이번 프로젝트에서 인터랙티브하게 입력한 프롬프트는 대부분 "다음 진행 내용 보여줘", "B안으로 진행해줘"처럼 단순했습니다. 에이전트의 실제 행동을 통제한 것은 워크스페이스에 고정해둔 규약 문서였으며, 세션이 열릴 때마다 에이전트는 이를 참조합니다.
가장 핵심이 된 것은 CLAUDE.md 파일의 안전 규칙입니다.
Markdown
## 2. ⚠️ 정체성 (허용/금지)
- **허용**: 온톨로지 구축 방법론 논문 추출·요약·검증, 방법론 비교표 작성,
사내 실행 플랜 설계, 가설 채점·지속 추적.
- **금지**: 정본 직접 수정 · 출처 없는 데이터 · 검증 없는 인용 ·
외부 발행(사용자 승인 없이).
- **★ 실행 플랜의 수치 규약**: 사내 실측이 없는 값(인력·기간·임계값·비용)은
**지어내지 않고 `[사내 실측 필요]`로 남긴다.** 논문에서 인용한 수치는
반드시 출처(논문 id + Table/§)를 단다. "논문 근거 수치"와 "사내 가정치"를
플랜 안에서 시각적으로 분리한다.이 세 줄의 규약은 강력하게 작동했습니다. 실행 플랜 작성 시 필요한 인력과 기간을 물었을 때, 에이전트는 "분석한 논문 56편 중 인건비와 기간을 명시한 사례가 없다"고 답변하며 해당 항목을 [사내 실측 필요] 표기로 남겼습니다. 그럴듯한 환각(Hallucination) 수치를 생성하지 않고 엄격하게 정직함을 유지한 것입니다.
또한 AGENTS.md에 정의한 세션 시작 절차 역시 불필요한 추측을 차단했습니다.
Markdown
1. **진행 상황 파악 (파일 직접 읽기 — 추측 금지·환각 0)**:
- `PROJECT_STATUS.md` — 단계별 상태·진행률
- `_meta/run-state.json` — **있으면** resume(첫 비-done 단계) 확인
- `60-data/corpus.json` 존재 여부
2. **정직한 상태 판정 (★환각 0 — 가짜 진행률 금지)**:
- 진행된 적 없는 산출물·수치·단계를 지어내지 않는다.
- **PROJECT_STATUS(수동 요약)와 run-state(도구 기록)가 어긋나면**
임의로 한쪽을 우선하지 말고 **둘 다 그대로 보고**한다.💡 Key Insight: "두 기록이 다르면 스스로 판단하여 덮어쓰지 말고 둘 다 보여주라"는 규칙은 실전에서 에이전트의 자의적 판단을 막는 훌륭한 안전장치가 되었습니다.
Ingest — 결과물과 근거를 1:1 한 쌍으로 매핑
이 부분이 커리큘럼의 핵심 원칙과 정확히 부합하는 지점입니다.
요점은 단순 요약문을 적재하는 것이 아니라, 요약문과 해당 원문 데이터를 동일 스코프 내에 쌍으로 배치하는 것입니다.
Plaintext
40-drafts/<카테고리>/<논문id>.md ← 결과물 (내가 생성한 요약문)
60-data/processed/fulltext/<논문id>.txt ← 근거 (원문 PDF 추출 전문)
60-data/corpus.json ← 메타데이터 (제목·초록·URL)
검수 스크립트는 이 구조를 활용해 대조를 수행합니다.
Bash
python3 verify_summaries.py \
--dir 40-drafts/quality-validation \
--corpus 60-data/corpus.json \
--source-dir 60-data/processed/fulltext # ← 핵심 파라미터
--source-dir 옵션이 빠지면 Grounding 검사가 생략되고 초록(Abstract)만으로 대조하게 됩니다. 하지만 논문의 주요 수치 데이터는 본문 내부 표(Table)나 절(Section)에 위치하므로, 초록만 대조한 PASS 판정은 신뢰할 수 없습니다.
검수 규칙 — 결정론적 검증 (LLM 채점 배제)
검수 스크립트 헤더에는 평가 로직이 결정론적(Deterministic) 방식으로 정의되어 있습니다. LLM에게 채점을 맡기지 않는다는 점이 핵심 설계 원칙입니다.
Plaintext
① Evidence 인용 실재: Evidence 절의 수치(퍼센트·소수·정수 포함 전부)와
인용 문구("…" 12자+)가 원문에 실재하는지 grep 대조.
부재 = FAIL (발명 수치·오인용 차단 — 결정론만, LLM 채점 금지).
오탐 회피는 컨텍스트 창이 아니라 마스킹+스코프로:
인용 좌표(p.N·Table/Figure/§·arXiv id·날짜)와 행머리 목차 번호를
마스킹한 뒤 Evidence 절 안에서만 추출.
숫자 경계 매칭(999를 1999에 오매칭 금지)
② 키포인트 커버율: 원문 초록을 문장 단위로 쪼개 요약이 각 키포인트의
내용어를 40% 이상 공유하면 커버로 판정. 커버율 < 0.6이면 WARN①번(Evidence 불일치) = FAIL
②번(키포인트 미달) = WARN
이 구분이 정밀도 관점에서 매우 중요합니다. 거짓이나 오출처는 즉시 FAIL로 차단하지만, 내용의 누락이나 부실함은 WARN 단계로 구분하여 다루게 됩니다.
파이프라인 흐름: 997편에서 56편으로의 정제 과정
Plaintext
arXiv 12개 쿼리 실행
│
▼
코퍼스 997편 수집 (2008~2026)
│
▼ classify.py (Taxonomy 5축 기준)
분류 완료 770편 (77%) / 미분류 227편
│
▼ 쇼트리스트 선별 + PDF 전문(Fulltext) 확보
요약 작성 ──► verify_summaries.py 검수
│
▼ PASS 데이터만 최종 승격
방법론 카드 56편 확정 (검수 56/56 PASS · FAIL 0)
│
▼
최종 산출물: 방법론 비교표 & 사내 실행 플랜
분류 규칙을 3차례 수정하면서 겪은 정밀도 변화 과정은 유의미한 배움을 주었습니다.
라운드
발생한 문제점
개선 결과
표본 적중률
R1
정규식 가드가 GraphRAG를 필터링하는 오류 발생
+83편 추가 (이탈 0)
90% (18/20)
R2
경계선 구간 (Score 2) 데이터를 추가 승격
+64편 추가
85% (17/20)
R3
패턴 단어 과저촉 (ontology construction 단독 미걸림)
+86편 추가 (이탈 1)
90% (18/20)
여기서 규칙 완화를 멈춘 판단이 핵심이었습니다. 적중률이 90% → 85% 수준으로 단조 하락하는 흐름을 보였기 때문입니다. 남은 미분류 227편을 추가로 가져오려면 규칙을 더 느슨하게 풀어야 하지만, 이는 전체 기준선(~83%)을 무너뜨리게 됩니다.
따라서 커버리지를 100%로 만드는 것보다 정밀도를 지키는 것이 검수 하네스의 목적에 부합한다고 판단하여 R3 단계에서 분류를 확정했습니다.
3. 결과 및 회고
최종 성과
데이터 정제: 코퍼스 997 편 수집 ➔ 분류 770편 ➔ 최종 방법론 카드 56편
검수 신뢰도: 요약 검수 56/56 PASS (FAIL 0) (원문 전문 대조 완료)
산출 물량: 방법론 비교표 & 사내 실행 플랜 (Markdown 및 HTML 형태)
배운 점 (Lessons Learned)
1. Ingest의 품질이 검수 성능의 상한선을 결정한다
초록(Abstract)만 Ingest하면 초록 수준의 검수만 가능합니다. 논문의 주요 수치는 본문 내부 표에 위치하므로, --source-dir을 이용해 원문 전문(Fulltext)을 함께 적재해야만 "이 수치가 실제 원문에 존재하는가?"를 엄격하게 검증할 수 있습니다.
2. 워크스페이스 규약 문서가 단발성 프롬프트보다 강력하다
매 세션마다 "출처를 반드시 명시하라"고 지시하는 것보다 CLAUDE.md에 명확한 제약 사항을 선언해 두는 것이 훨씬 효과적이었습니다. 에이전트는 세션이 변경되어도 해당 규약을 일관되게 준수하며 스스로 판단 근거로 삼았습니다.
3. 검수 하네스에서는 커버리지보다 정밀도가 우선이다
분류 규칙을 완화하면 수집량은 늘어나지만 적중률은 하락합니다. 검수 하네스의 본질은 "얼마나 많이 담았는가"가 아니라 "담긴 결과를 얼마나 신뢰할 수 있는가"에 있습니다.
시행착오
가장 인상적인 실수는 초기 요약 5편이 검수 과정에서 전량 FAIL 판정을 받은 사건이었습니다.
원문을 충실히 반영하여 인용을 작성했음에도 불합격 처리되었는 데, 원인은 pdftotext 변환 시 발생한 미세한 줄바꿈 차이로 인해 스크립트가 "원문에 없는 인용"으로 감지했기 때문이었습니다. 이 문제의 구체적인 원인 분석과 해결 과정은 [2편] 회고에서 깊이 있게 다루겠습니다.
질문 및 조언 구함
Gold Eval Set 설계에 대한 고민
현재는 원문 내 문자열 포함 여부(
substring대조)로 검수를 대신하고 있습니다. 이 방식은 거짓 데이터나 오출처를 차단하는 데는 유용하지만, "요약이 논문의 핵심을 올바르게 짚었는가"에 대한 품질 평가에는 한계가 있습니다.사람이 정답 요약 세트를 직접 작성하기에는 비용 부담이 크고, LLM으로 자동 생성하면 그 자체가 다시 검수 대상이 되는 순환 문제가 발생합니다. 논문 서베이 같은 도메인에서 현실적인 Gold Eval Set을 구축하는 좋은 접근 방식이 있다면 조언을 부탁드립니다.
참고 자료
스터디 제공
research-survey플러그인스터디 커리큘럼: "Ingest = 검수 가능한 형태로 (결과물↔근거 한 쌍 구축)"