지난주에 저는 Hacker News에서 한 사용자가 단순히 LLM(대규모 언어 모델)이 그 통계를 사실로 인용하도록 유도하기 위해 임의의 사이트에 가짜 통계를 게시한 글을 읽었습니다. 295점과 168개의 댓글이 달린 이 글은 저에게 깊은 공감을 불러일으켰는데, 왜냐하면 저는 이보다 훨씬 완화된 버전의 상황을 직접 경험했기 때문입니다. AI 어시스턴트가 "개발자 중 73%가…"라는 자신감 넘치는 문구와 링크를 포함한 초안을 건네주면, 그 링크에 실제로 73%라고 적혀 있는지 빠르게 확인할 방법이 없었습니다.
제가 찾아본 기존의 인용 확인기들은 대부분 학술 참고문헌(academic bibliographies)을 겨냥하여 "이 참조가 존재하는가?"라는 다른 질문에 답하는 서비스였으며, 보통 유료 웹 서비스 형태였습니다. 저는 좀 더 좁고 로컬한 기능, 즉 **"인용된 페이지에 실제 수치가 포함되어 있는가?"**를 원했습니다. 그래서 이 도구를 만들었습니다.
factfence 소개
factfence는 의존성(dependency)이 전혀 없는 Python CLI(명령줄 인터페이스)입니다. 블로그 초안, 문서 파일, AI 생성 보고서 등 어떤 마크다운 또는 텍스트 파일에든 이를 적용하면 다음 기능을 수행합니다:
- 추출 (Extract): 모든 정량적 주장(백분율, 금액, 대규모 수치, 승수, 비율)을 추출하며, 코드 블록은 건너뛰어
retries = 99가 절대로 "주장"이 되는 것을 방지합니다.
- 가져오기 (Fetch): 각 고유한 인용(citation)을 한 번만 가져옵니다 (정중한 user-agent, 8초 타임아웃, 1.5MB 제한). 그리고 해당 페이지를 정규화된 일반 텍스트로 축소합니다.
- 보고 (Report): 각 주장에 대해 다음 다섯 가지 판결 중 하나를 보고합니다:
SUPPORTED: 인용된 페이지에 수치가 포함되어 있음
UNVERIFIED: 페이지는 로드되지만 수치를 포함하고 있지 않음 (전형적인 AI 환각(hallucination) 형태)
BROKEN: 모든 인용 링크가 실패함
UNCITED: 어떠한 인용도 없이 존재하는 명확한 수치
CITED: 작동하는 링크와 함께 "연구에 따르면…"이라는 주장이 있으나, 교차 확인할 수 있는 수치가 없음
샘플 AI 작성 단락에 대한 실제 출력은 다음과 같습니다:
[✓ SUPPORTED]
According to the 2026 State of DevTools Survey, 73% of developers say AI-
generated code needs human review before merging
...
종료 코드(Exit codes)는 CI 환경에 친화적입니다 (0은 정상, 1은 검토 필요, 2는 오류)이며, --json 플래그를 사용하면 파이프라인을 위한 기계가 읽을 수 있는 출력을 얻을 수 있습니다.
사용해 보기
git clone https://github.com/techdevfun/factfence.git
cd factfence
python3 -m factfence your-draft.md
pip install이 필요 없습니다—표준 라이브러리(stdlib)만 사용하며 Python 3.10 이상에서 작동합니다.
의도적으로 하지 않는 것들
이 도구는 진실 여부가 아닌 _인용 지원(citation support)_을 확인합니다. 출처가 잘못되었다면 SUPPORTED라는 주장은 여전히 틀릴 수 있습니다—이 도구가 잡아내는 것은 훨씬 더 흔한, 확신에 찬 숫자와 죽었거나 관련 없거나 누락된 인용 간의 불일치입니다. 숫자 일치는 텍스트 기반입니다(