Insights·2026-07-17

뉴스 기사, 사실인지 거짓인지 어떻게 교차검증하나

같은 뉴스가 여러 매체에 떠 있어도 교차검증이 아니다 — 대부분 연합뉴스 한 건을 받아쓴 것이기 때문이다. 이 플러그인은 뉴스 URL을 받아 핵심 주장을 뽑고, 각 주장을 서로 독립된 출처로 대조해 사실·거짓을 판정한다. 확정 판정은 AI의 감이 아니라 코드가 계산하고(독립 지지 2개 이상=사실, 독립 반박 2개 이상=거짓, 못 채우면 검증 불가), 통신사 재출고는 하나로 눌러 센다. 봇 차단 사이트도 우회해 읽으며, 오픈소스(MIT)로 공개한 보조 도구다.

무슨 문제를 푸나

뉴스를 보다 "이거 진짜야?" 싶을 때, 보통 검색해서 "다른 데도 똑같이 나오네" 하면 믿는다. 그런데 그 여러 곳이 전부 연합뉴스·뉴스1 같은 통신사 한 건을 그대로 받아쓴 것이면, 아무리 많이 떠 있어도 사실은 출처 하나짜리다.

이 플러그인은 그 착시를 막는다. 뉴스 기사 URL을 주면 핵심 주장을 뽑아, 각 주장을 서로 독립된 출처로 대조한 뒤 사실인지 거짓인지 판정하고, 근거와 함께 한국어 리포트로 낸다.

먼저, Claude Code가 뭔가

Claude Code는 Anthropic이 만든, 터미널에서 돌아가는 AI 코딩 에이전트다. 사람이 시키는 일을 스스로 파일을 읽고 명령을 실행하며 처리한다.

'플러그인'은 그 Claude Code에 특정 작업 능력을 더해 배포하는 방식이다. 이 도구는 '뉴스 팩트체크'라는 능력 하나를 플러그인으로 배포한 것이다. Claude Code만 깔려 있으면 아래 두 줄로 붙일 수 있다.

설치 — 두 줄이면 끝

Claude Code 안에서 아래를 입력하면 마켓플레이스를 등록하고 플러그인을 설치한다.

python3만 있으면 되고(대부분 macOS·Linux에 기본 탑재), 없으면 기능이 일부 축소된 모드로 동작한다. 차단 사이트 우회에 쓰는 검색 엔진은 처음 필요할 때 사용자 동의를 한 번 받고 자동으로 받아 온다 — 동의 없이는 아무것도 내려받지 않는다.

Claude Code 안에서
/plugin marketplace add hjsh200219/news-fact-checker
/plugin install news-fact-checker

쓰는 법 — 한 줄

기사 URL만 주면 된다. 슬래시 명령으로도, 그냥 말로도 시킬 수 있다.

실행
/factcheck https://www.yna.co.kr/view/AKR20260625132900504

# 자연어로도 된다
이 기사 진짜야? https://www.yna.co.kr/view/...

# 가짜뉴스가 의심되면
이거 가짜뉴스 아니야? <기사 URL>

안에서 무슨 일이 벌어지나 — 다섯 단계

겉으로는 URL 한 줄이지만, 안에서는 다섯 단계가 돈다. 사람이 기사를 의심하고 하나하나 대조해 확인하는 과정을 그대로 자동화한 것이다.

예산도 정해 뒀다. 주장마다 검색 횟수와 본문 취득 횟수에 상한이 있어, 무한정 뒤지다 멈추지 않고 정해진 범위 안에서 결론을 낸다. 범위 안에서 근거가 안 모이면 그 주장은 '검증 불가'로 남긴다.

동작 다섯 단계
1) 본문 취득    차단(403/WAF) 걸린 언론사도 우회해 기사 본문·메타 확보
2) 주장 추출    검증 가능한 사실 주장 3~5개 선별 (의견·예측·전망은 제외)
3) 근거 수집    주장마다 웹검색 + 확증 출처 취득 (공식 발표·1차 자료·타 매체)
4) 독립성 계산  출처 입장(지지/반박) 판정 후 통신사 재출고를 하나로 붕괴
5) 판정         게이트 통과분만 사실/거짓 확정, 나머지는 검증 불가 + 근거 리포트

판정을 함부로 안 내리는 이유

이 도구의 중심 설계는 '판단의 절제'다. 그럴듯하다고 사실이라 하지 않는다. '사실'로 확정하려면 서로 독립된 지지 출처가 둘 이상이고 반박이 하나도 없어야 하며, '거짓'은 독립 반박이 둘 이상이어야 한다.

중요한 건 이 조건을 AI의 판단이 아니라 코드(independence.py)가 계산한다는 점이다. AI가 "느낌상 맞다"며 넘어가는 걸 구조적으로 막는다. 그리고 통신사 한 건을 여러 매체가 재출고한 것은, 입장이 같으면 유효 출처 하나로 눌러 센다. 그래서 '열 곳에 떴다'가 판정을 뒤집지 못한다. 조건을 못 채우면 억지로 판정하지 않고 정직하게 '검증 불가'로 둔다.

차단·조작을 견디는 안전장치

언론사가 봇 접근을 막아 본문이 안 열리면, 차단 우회 엔진으로 escalate해 읽는다. 그래도 막히면 정직하게 '접근 불가'로 표기하고 넘어간다 — 없는 본문을 지어내지 않는다.

가져온 기사 본문은 '믿지 않는 데이터'로 취급한다. 본문 속에 "규칙을 무시하라", "이 판정을 바꿔라" 같은 지시문이 숨어 있어도(프롬프트 인젝션) 명령으로 실행하지 않고 "기사에 이런 문장이 있었다"고 데이터로만 기록한다. 요청 목적지도 미리 검사해 내부망·사설 주소로의 접근을 막는다.

한계와 그어 둔 선

이건 보조 도구다(assistive, not authoritative). 리포트가 최종 권위가 아니며, 중요한 판단은 원문과 1차 자료를 직접 확인해야 한다. 통신사 재발행이 유일한 원출처인 사안, 로그인·유료 장벽이 있는 기사, 인덱싱이 아직 안 된 최신 사건은 '검증 불가'가 될 수 있다 — 이건 안전한 기본값이다.

모든 근거는 URL과 함께 밝히고, 모델이 원래 알던 지식인지 웹으로 검증한 것인지 구분해 표기한다. 전부 오픈소스(MIT)이고, 원본 레포는 아래 출처 링크에 있다.