# Fact Verify

> AI가 수집·작성한 조사 결과, 동향 브리핑, 보고서 초안의 출처를 독립적으로 검증하는 스킬. 출처 신뢰도 4-Tier 분류(정부·학술·언론·비공식), 재인용 체인 감지(같은 보도자료를 여러 언론이 받아쓴 '가짜 교차검증' 차단), URL·DOI·arXiv·NTIS 과제번호 실존 확인, 한국 학술·정책 출처 검증(KCI·RISS·국회도서관·NKIS), 수치·날짜 정합성 점검으로 할루시네이션을 걸러낸다. 다음 상황에서 반드시 이 스킬을 사용한다: ①출처·각주·참고문헌을 단 산출물(브리핑·보고서·조사 정리·기사 초안)을 작성했거나 사용자·발주처에 전달하기 직전 — **명시적 요청이 없어도 배포 전 상시 실행(standing gate)** ②'출처 검증', '출처 확인', '팩트체크', '교차 검증', '인용 검증', '근거 확인', '참고문헌 실재 확인', '이 자료 믿을 만해?', '할루시네이션 점검', '검증해줘' 등의 요청 ③조사·리서치 결과를 브리핑·보고서·기사에 싣기 전 신뢰도를 확인할 때. 문서의 문법·표현 교정에는 사용하지 않는다(그건 교정교열 스킬의 몫).

- Skill: `parkjui92/fact-verify` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add parkjui92/fact-verify`
- Raw SKILL.md: https://api.skillmd.com/api/skills/parkjui92/fact-verify/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: parkjui92 (https://skillmd.com/u/parkjui92)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/parkjui92/fact-verify

---


# fact-verify — 출처 검증 게이트

리서치 결과를 **믿기 전에** 돌리는 검증 단계다. AI(또는 사람)가 수집한 주장·수치·인용을 출처 단위로 분해하고, 세 단계 프로토콜로 통과/보류/거부를 판정한다.

**설계 전제(회의론자 자세):** 기본 상태는 의심이다. 증거가 있어야 통과한다. "AI가 작성했을 가능성"을 상수로 가정하고, 그럴듯한 주장일수록 더 엄격히 본다. 불확실하면 포함하지 않는 쪽을 택한다 — 브리핑의 신뢰는 한 번 깨지면 회복이 어렵다.

---

## 입력

두 형태를 받는다:

1. **구조화 입력**: `주장 — 출처(URL/서지)` 쌍의 목록 (다른 에이전트·스킬의 조사 산출물)
2. **자유 텍스트**: 브리핑·보고서 초안·기사 초고 — 이 경우 먼저 텍스트에서 "사실 주장 + 붙어 있는 출처"를 추출해 검증 대상 목록을 만들고, **출처가 아예 없는 사실 주장**은 그 자체로 `NO_SOURCE` 플래그를 단다.

## 검증 깊이 (기본: standard)

| 깊이 | 수행 범위 | 용도 |
|------|-----------|------|
| `quick` | Step 1(Tier 분류) + 식별자 형식 검사만. 네트워크 불필요 | 초안 단계 빠른 점검 |
| `standard` | + Step 3 실존 확인(URL fetch, DOI/arXiv resolve, 한국 검증원 공개 검색) | 브리핑 발행 전 (권장 기본) |
| `deep` | + Step 2 교차 독립성(핵심 주장 2개 독립 출처), 수치·날짜 원문 대조 | 대외 보고서·기사·투고 |

---

## 3단 검증 프로토콜

### Step 1. 출처 Tier 분류

`references/tier-rules.md`의 기준으로 모든 출처를 분류한다.

- **Tier 1** 정부·기관 공식 (.go.kr, .gov, europa.eu 등) — 단독 근거 가능
- **Tier 2** 학술·국책연구 (peer-reviewed 학술지, KCI 등재지, KISTEP·STEPI 등 국책연, 주요 싱크탱크) — 단독 근거 가능
- **Tier 3** 주요 언론 — 가능하면 **2개 이상 독립 언론** 확인
- **Tier 4** 블로그·SNS·커뮤니티·익명 — **단독 근거 절대 불가.** 원출처를 찾아 확인되면 그 원출처의 Tier로 승격

도메인이 목록에 없으면 성격을 판단해 보수적으로(낮은 쪽으로) 분류하고 "판정 근거"를 기록한다.

### Step 2. 교차 일관성 검증 (deep, 또는 핵심 주장)

**2-A. 출처 독립성 — 재인용 체인 감지 (이 스킬의 핵심 기능)**

```
❌ 가짜 교차 검증:
  주장 X가 매경·한경·서울경제 3곳에서 보도됨
  → 세 기사 모두 "과기부 보도자료"를 받아쓴 것이면 실은 출처 1개다.

✅ 진짜 교차 검증:
  주장 X가 ① 정부 공식 발표 ② 독립 취재 기사 ③ 학술지 논평에서
  일관되게 나타남 → 독립 출처 3개.
```

확인 방법:
- 각 기사 원문에서 "○○가 밝혔다/발표했다/보도자료에 따르면" 같은 **공통 원천 표지**를 찾는다
- 동일 보도자료·공고·논문으로 이어지는 인용 체인을 추적한다
- 독립 출처 수를 세어 기록한다 (재인용은 1개로 합산)

**2-B. 수치·날짜·인명 일관성**
- 여러 출처가 같은 수치를 보고하는가? 불일치(예: "투자 100조" vs "50조") 발견 시 원출처를 확인해 어느 쪽이 정확한지 판정하거나 `NEEDS_REVIEW`로 보류한다.

### Step 3. 실존 확인 (할루시네이션 체크)

- **URL**: 실제로 fetch한다. HTTP 404 → `REJECT`(할루시네이션 의심). 200이지만 주장 내용이 그 페이지에 없음 → `REJECT`(출처-주장 불일치). 페이월·로그인 필요로 확인 불가 → `NEEDS_REVIEW`(오류로 단정하지 않음).
- **식별자 형식·실존**:
  - DOI: `10.XXXX/...` 형식 → `https://doi.org/<DOI>` 리다이렉트 확인, 메타데이터(제목·저자)와 대조
  - arXiv: `YYMM.NNNNN` 형식 → `arxiv.org/abs/`에서 실존·제목 확인
  - NTIS 과제번호: 10자리(예: `1711XXXXXX`) 형식 검사
  - ISBN: 체크디지트 검사 + 국립중앙도서관 조회
- **날짜·수치 정합성**: 발표일이 원문 날짜와 일치하는가, 인용 수치가 원문 수치와 정확히 일치하는가(단위·기준연도 포함), 미래 시점 서술이 현재와 모순되지 않는가.

### Step 3-D. 한국 학술·정책 출처 검증 (v1.1)

CrossRef·arXiv·Semantic Scholar 같은 국제 DB는 **국문 학술지·국책연 보고서·정부 간행물을 거의 못 잡는다**. 한국 정책·학술 문헌은 DOI가 없는 경우가 많아, 국제 도구로 "확인 불가"가 뜬다고 실재하지 않는 것이 아니다. 아래 한국 검증원으로 별도 확인한다.

| 출처 유형 | 검증원 | 접근 |
|-----------|--------|------|
| 국내 학술지 논문(KCI 등재) | **KCI**(한국연구재단) 학술지·논문·인용 정보 | 공공데이터포털 `15085388`(학술지)·`15084727`(인용) API, 또는 kci.go.kr 공개 검색 |
| 대학 학위논문·학술자원 | **RISS**(KERIS) | 공공데이터포털 `3046254`, 또는 riss.kr 공개 검색 |
| 폭넓은 서지(단행본·논문·의안) | **국회도서관** 국가학술정보 | 공공데이터포털 `15040835`(검색)·`15000282` |
| 국책연 보고서 | **NKIS**(국가정책연구포털, nkis.re.kr), 기관 사이트 | WebFetch 공개 검색 |
| 정부 정책연구 | **PRISM**(정책연구관리시스템, prism.go.kr) | WebFetch 공개 검색 |
| 단행본·보고서 ISBN | 국립중앙도서관 서지정보 | 공공데이터포털 ISBN API |

검증 절차:
1. **저자·제목·연도·게재지**로 위 검증원을 조회한다(정확 일치가 없으면 제목 부분일치로 후보 제시).
2. 조회 결과의 서지정보(게재지명·권호·연도)를 인용과 대조한다 — 특히 **연도·권(호) 오기**와 **학회지명 오기**를 잡는다.
3. 어디에서도 확인되지 않고 국제 DB에도 없으면 → 🔴 `REJECT`("환각 출처 의심: 국내외 검증원 모두 미확인").
4. 공개 검색으로는 접근되나 API 키가 없어 구조화 확인이 안 되는 경우 → 확인된 사실은 `VERIFIED`로, 불확실한 건 `NEEDS_REVIEW`로 정직하게 구분한다.

> **접근 등급(graceful degradation).** 이 스킬은 **키 없이도 동작**한다 — 기본은 각 포털의 공개 검색 페이지를 WebFetch하고 CrossRef(무키)를 병행한다. 사용자가 **공공데이터포털 인증키**(무료, 자체발급)를 환경에 설정해 두면 KCI·RISS·국회도서관 API로 **정밀·대량** 검증으로 자동 승급한다. 키는 요구사항이 아니라 성능 옵션이며, 없을 때 있는 척하지 않는다.

---

## 실전 보강 규칙 (v1.2 — 2026-08-15 재료연 브리핑 25건 재검증에서 채굴)

### R1. 자동조회 차단 사이트 대응 — "404/403이 곧 허위 출처는 아니다"
정부·기관 사이트 다수가 봇을 차단한다(실측: energy.gov 404, iaea.org 402, science.org 403, ukri.org 404, moore.org 404, nature.com 로그인벽, nsfc.gov.cn SSL 오류, hbr.org 제한). 또한 **HTTP 200이어도 JS 렌더링 페이지는 본문 추출이 실패**할 수 있다(실측: arpa-e.energy.gov — 내비게이션만 반환). 절차:
1. fetch 실패·빈 본문 → 즉시 REJECT 금지. **검색엔진 색인·캐시로 해당 문구를 확인**하고, 확인되면 판정을 `NEEDS_REVIEW(차단-색인확인)`으로 세분 표기한다.
2. 대체 경로를 시도한다: 같은 기관의 다른 URL(보도자료·PDF 직링크·간행물 페이지), 공식 배포 채널(EurekAlert=기관 보도자료 배포, grants.gov=연방 공고 원문, CORDIS=EU 과제 공식), 신뢰 가능한 재게시(대학 연구지원부서 공지 — 복수 대학이 일관되면 교차 성립).
3. 최종 산출물에는 상태를 정직하게 표기한다: 〔검증〕(원문 직접 대조) / **〔색인확인〕(차단 — 색인·교차로 확인, 배포 전 육안 확인 권장)** / 〔2차〕. 이 3단 표기를 표준으로 쓴다.

### R2. 문장 분해 원칙 — "한 문장 안의 수치 N개 = 검증 항목 N개"
실측된 최다 오류는 허위 출처가 아니라 **맞는 수치에 검증 안 된 파생·부가 수치가 딸려 들어가는 것**이었다(예: 배출 200명〔원문 있음〕+ 정년직 60명〔원문 없음〕 / 총액 5,000억〔원문 있음〕+ "각 2,500억"〔단순 2등분 역산〕 / 조문 내용〔원문 있음〕+ "제25조"〔재구성〕). 규칙:
- 문장을 수치·고유명사 단위로 분해해 **각각** 원문 대조한다. 하나라도 원문에 없으면 그 부분만 잘라내거나 "산출치·추정"임을 명기한다.
- 직접인용(따옴표)은 원문에 그 표현이 **문자 그대로** 있을 때만 유지 — 취지만 같으면 따옴표를 벗겨 의역으로 전환한다(실측: "kill criteria agreed in advance"는 취지는 맞으나 문구 부재 → 의역 전환).
- 조사 지시서에 다음 문구를 넣는다: **"원문에 문자 그대로 있는 것과 계산·추정으로 만든 것을 구분 표기하라."**

### R3. 자기보고 표본 재검증 — 타 에이전트 조사물을 검증할 때
'검증완료' 표기는 조사자의 자기보고다. 미검증분 전수 확인에 더해 **'검증완료' 표기 중 20~30%를 표본 추출해 독립 재검증**한다(실측: 표본 7건 중 3건에서 부가 수치 미검증 적발). 표본에서 문제가 나오면 같은 조사자의 다른 '검증완료'도 등급을 한 단계 낮춰 취급한다.

### R4. 추가 점검 3종 (고빈도 오류 유형 보강)
- **⑬ 프로그램 현존 확인**: 인용하는 제도·프로그램(해외 포함)이 지금도 운영 중인가 — 종료·마지막 기수·개편·공모 중단을 확인해 단서를 단다(실측: Moore Inventor Fellows 2025년 10기로 종료, 대만 跨世代 공모 중단 — 각주 미반영 상태로 발견).
- **⑭ '상충'으로 보이는 수치의 범위 확인**: 두 수치가 어긋나 보이면 상충 판정 전에 **집계 범위·모수가 같은지** 먼저 본다(실측: 'SEK 27억 vs 30억'은 사업 단위 vs 패키지 전체 — 상충이 아니라 범위 차이).
- **⑮ 규정 수치는 법규·요강 원문 우선**: 연령·금액·자격요건은 대학·재외공관·블로그의 요약본에서 오기가 빈발한다(실측: 대만 Columbus 연령 '35세' 오기 유통 — 정부 법규 원문으로 38세 확정). 요약본끼리 어긋나면 **법령·모집요강 원문**을 찾아 판정한다.

### R5. 산출물 배포 게이트 (standing rule)
출처·각주가 달린 산출물은 **작성 완료 ≠ 배포 가능**이다. 배포 전 이 스킬을 standard 이상으로 실행하고(신규 문서: 미검증분 전수 + 검증완료 표본 / 기존 문서 재배포: 변경분), 판정 요약(✅/⚠️/❌ 건수)과 정정 내역을 사용자에게 보고한 뒤 배포한다. 검증 보고서는 산출물 옆에 파일로 남긴다(예: `NNa_재검증_보고서.md`).

---

## 판정 규칙

| 판정 | 조건 | 처리 |
|------|------|------|
| `VERIFIED` | 3단계 통과 | Tier 표시와 함께 통과 목록에 |
| `NEEDS_REVIEW` | 확인 불가(페이월 등), 수치 불일치, 단일 출처의 핵심 주장 | 사유와 "무엇을 추가 확인해야 하는지" 명시 |
| `REJECT` | URL 404, 식별자 불일치, 출처-주장 불일치, Tier 4 단독 근거 | 사유 명시. 본문에서 제외 권고 |
| `NO_SOURCE` | 출처 없는 사실 주장 | 출처 요구 또는 삭제 권고 |

---

## 고빈도 오류 유형 (실전 채굴 체크리스트)

URL이 살아 있고 문헌이 실재해도 주장은 틀릴 수 있다. 아래는 정부 R&D·정책보고서 검증에서 반복 적발된 유형으로, **출처 실존 확인만으로는 절대 잡히지 않는다.** 각 항목을 별도로 물어라.

**① 지표 혼동 (가장 흔하고 가장 치명적)**
서로 다른 지표를 한 문장에 이어 붙이면 각 수치가 맞아도 문장 전체가 거짓이 된다.
- "정부 R&D 예산"(정부 재원) vs "총연구개발비/GDP"(민간 78% 포함) — 후자를 "국가 R&D 투자 비율"로 부르면 오도.
- 예산 vs 집행, 계약 약정액(최대 상한) vs 실지급액, 누적 총액 vs 연간액.
→ **묻기: 이 수치의 분자·분모·재원 범위가 문장의 주어와 같은가?**

**② 기준연도 표류**
수치는 맞는데 연도가 다른 경우. 2018년 통계를 연도 표기 없이 현재형으로 쓰거나, 비교 대상국만 다른 연도인 경우(한국 2024년 vs 이스라엘 2023년).
→ **묻기: 각 수치의 기준연도가 명시되어 있고 비교 대상과 정렬되는가?**

**③ 제도·계획의 만료**
"제4차 기본계획('21~'25)"처럼 종료된 계획을 현행으로 서술. 법령 개정으로 조항 번호가 바뀐 경우.
→ **묻기: 이 계획·법령은 작성 시점에 여전히 유효한가? 후속 차수가 나왔는가?**

**④ 법령 조항 번호**
근거 조항을 한 조 어긋나게 다는 오류가 흔하다(기본계획 근거는 제5조인데 제6조로 표기 등). 2차 요약이 아니라 **법령 원문**으로 대조한다.

**⑤ 발표 주체 오기**
수치는 실재하나 발표 기관이 다른 경우(전국경제인연합회 ↔ 한국무역협회). 기관명 변경(전경련→한경협 2024)도 함께 본다.
→ **묻기: 이 수치를 실제로 발표한 기관·문서·행사는 무엇인가?**

**⑥ 직접인용 날조 — 최우선 검증 대상**
큰따옴표 안의 문장은 원문에 그 표현이 있어야 한다. 취지가 비슷한 다른 문헌의 내용을 특정 보고서의 직접인용으로 붙이는 사고가 실제로 발생한다.
→ **인용부호가 보이면 무조건 원문 전문 검색.** 없으면 REJECT하고, 취지에 실제로 부합하는 문헌을 찾아 제시한다.

**⑦ 출처가 그 수치를 실제로 뒷받침하는가 (오귀속)**
문헌은 실재하고 주제도 맞는데, 인용된 특정 수치는 그 문헌의 **다른 대상**에 관한 값인 경우. (예: GAO 보고서가 mRNA 후보에 TRL 8A를 부여했는데 비(非)mRNA 후보의 TRL 6~7을 mRNA에 귀속.)
→ **묻기: 그 표·그 페이지에서 이 수치가 붙은 대상과 시점이 본문의 대상·시점과 같은가?**

**⑧ 잔차 역산치**
원문에 없는 수치를 저자가 뺄셈으로 만들어 원문 출처를 단 경우(총액−구매액−이전투입=팬데믹기 R&D). 반올림 오차가 누적돼 원문과 어긋난다.
→ **묻기: 이 수치가 원문에 문자 그대로 있는가, 아니면 계산으로 만든 것인가?**

**⑨ 문헌 논지와 인용 용도 불일치**
서지는 정확한데 그 논문이 실제로 하는 주장이 아닌 경우(선형모형의 역사를 다룬 논문을 성과단계 taxonomy 근거로 인용).
→ **묻기: 이 문헌의 초록·결론이 본문이 시키는 일을 실제로 하는가?**

**⑩ 방법론 임계값의 출처표 특정**
같은 지표라도 계산 방식이 다른 복수의 기준표가 병존한다(Lawshe 1975 원표 vs Wilson-Pan-Schumsky 2012 재계산표 vs Ayre-Scally 2014 정확이항). "N=10에서 0.52"가 틀린 게 아니라 **다른 표를 쓴 것**일 수 있다.
→ **묻기: 어느 표의 몇 번째 행인가? 채택한 표를 본문이 밝히고 있는가?**

**⑪ 법인격·주체 성격**
"정부 주도 기관"이 실제로는 민간 컨소시엄 출자 법인인 경우(NPCI). 국제기구 '보고서'가 실제로는 저자 개인 견해인 워킹페이퍼인 경우.
→ **묻기: 이 조직의 법적 성격과 이 문서의 격(공식 입장 vs 워킹페이퍼)은 무엇인가?**

**⑫ 인과 귀속의 비약**
수치는 맞으나 원문이 다른 원인에 귀속시킨 경우(발사비 95% 절감은 셔틀 대비 공시가 비교이지 재사용의 효과가 아님 — 원문은 재사용 기여를 30~50%로 추정).
→ **묻기: 원문이 이 결과를 무엇의 결과라고 말하는가?**

> **원칙: 숫자가 맞아도 문장은 틀릴 수 있다.** 검증 단위는 '수치'가 아니라 '수치를 담은 문장 전체'다.

---

## 출력 형식

### 기본: 마크다운 검증 보고서

```markdown
## 출처 검증 보고서

- 검증 대상: N건 | ✅ VERIFIED n | ⚠️ NEEDS_REVIEW n | ❌ REJECT n | 🚫 NO_SOURCE n
- Tier 분포: T1 n / T2 n / T3 n / T4 n(전원 제외 또는 승격)
- 검증 깊이: standard | 검증 일시: YYYY-MM-DD

| # | 주장(요약) | 출처 | Tier | 판정 | 사유·조치 |
|---|-----------|------|------|------|-----------|
| 1 | ... | msit.go.kr/... | 1 | ✅ | 공식 보도자료 원문 확인 |
| 2 | ... | arXiv 2404.99999 | 2 | ❌ | 해당 ID 실존하지 않음(404) — 삭제 또는 재조사 |
| 3 | ... | 매경·한경 2건 | 3 | ⚠️ | 두 기사 모두 동일 보도자료 재인용 — 독립 출처 1개뿐 |
| 4 | ... | 한국정책학회보 32(1) | 2 | ✅ | KCI 조회 확인 (단, 인용 연도 오기 2022→2021) |
```

### 옵션: YAML (에이전트 파이프라인 연동용)

다른 에이전트가 소비할 때는 `verification_report:` YAML(총계, by_tier, rejected_items[사유·조치], review_needed, verified_items)로 반환한다.

---

## 재검증·에스컬레이션

- 조사 주체(사람/에이전트)에게 재조사를 요청할 때는 **어떤 항목이 왜 문제인지 + 무엇을 확인하면 되는지**를 구체적으로 적는다.
- 같은 항목이 재조사 후에도 확인되지 않으면 `REJECT`로 확정하고 기록을 남긴다.

## 에이전트 파이프라인의 게이트로 쓰기

조사 → **fact-verify** → 집필 순서로 배치하면 검증 게이트가 된다. 서브에이전트 정의 예시:

```markdown
---
name: fact-verifier
description: 조사 결과를 독립 검증하는 전문 에이전트. 조사 완료 후, 집필 시작 전에 호출.
tools: [WebFetch, WebSearch, Read, Write]
---
fact-verify 스킬의 3단 프로토콜을 따라 조사 산출물을 검증하고
verification_report를 반환한다. REJECT 항목은 집필에 사용 금지.
```

## 한계 (정직하게 알릴 것)

- URL 실존·DOI·한국 검증원 확인에는 **웹 접근(WebFetch/WebSearch)** 이 필요하다. 오프라인 환경에서는 `quick` 깊이만 가능함을 알린다.
- **한국 학술·정책 검증**은 공개 검색(무키)으로도 되지만, KCI·RISS·국회도서관 **API의 정밀·대량 조회는 공공데이터포털 인증키(무료)가 있을 때만** 가능하다. 키가 없으면 공개 검색 범위 안에서만 확인하고, 못 미친 부분은 `NEEDS_REVIEW`로 정직하게 남긴다.
- 페이월·로그인 뒤 문서, 인쇄물 전용 문헌(DBpia 유료 원문 등)은 실존 확인이 제한된다 → `NEEDS_REVIEW`.
- 이 스킬은 **출처 규율 도구**다. 출처가 실존하고 주장과 일치하는지를 보며, 주장 자체의 학술적 타당성·진위를 최종 보증하지 않는다. 판정은 사람의 판단을 돕는 보조 신호다.
- 검증 과정에서 외부로 전송되는 것은 확인 대상 URL·식별자·검색어(제목·저자)뿐이다. 문서 전체를 외부 서비스에 보내지 않는다.

## 커스터마이즈

`references/tier-rules.md`에 자기 분야의 기관·학술지·매체를 추가하라. 기본 목록은 과학기술정책(STI) 분야 기준으로 작성되어 있다 — 보건·환경·경제 등 다른 분야는 해당 분야의 정부기관·국책연·전문지를 Tier 1~3에 보강하면 된다.

공공데이터포털 인증키 설정은 `references/korea-sources.md`를 참조한다.

