시민 참여 서비스 '어흥'에 AI 팩트체크 기능 도입
정치 커뮤니티의 근거 없는 가짜뉴스로 인한 소모적인 논쟁을 줄이기 위해 시민 참여 서비스 어흥이 AI 팩트체크 기능을 도입했다. 초기에는 단순 프롬프트 입력 방식으로 사실 여부를 판단했으나, 운영 과정에서 한계를 확인하고 현재는 데이터 추출과 검증이 연결된 다단계 파이프라인을 구축해 운영하고 있다.
모든 유저 요청은 Redis Cluster(레디스 클러스터, 분산 인메모리 데이터 저장소)와 BullMQ(불엠큐, 메시지 큐 라이브러리)를 통해 비동기 큐에 입력된다. 요청을 즉시 처리하는 대신 큐에 저장하고 백그라운드 워커가 순차적으로 처리해 유저 대기열을 관리한다. 이 구조를 통해 대량의 요청이 몰리는 상황에서도 서버 부하를 분산하며 서버 중단 없이 서비스를 운영한다.
모델 운영은 비용과 성능을 모두 고려해 계층적으로 설계했다. Gemini 3.5 Flash를 메인 모델로 배치해 응답 속도를 높이고 비용을 낮췄으며, 복잡한 논리 추론에 실패하거나 에러율이 높아지면 Gemini 3.1 Pro로 자동 전환하는 Fallback(폴백, 예비 시스템 전환) 구조를 적용했다. 이를 통해 리소스 낭비를 줄이면서 고난도 검증의 정확도를 확보했다.
할루시네이션 방지를 위한 답변 제어와 자원 관리
인프라 구축과 더불어 AI의 답변 신뢰도를 높이기 위한 제어 장치도 마련했다. 공신력 있는 근거가 부족하거나 확인이 불가능한 사안에 대해 억지로 결론을 내리지 않도록 프롬프트를 제어한다. 근거가 불충분하면 '알 수 없음' 또는 '판단 보류'라고 응답하게 하여, LLM이 허위 정보를 생성하는 할루시네이션(Hallucination) 현상을 방지한다.
무분별한 요청으로 인한 서버 부하와 비용 상승을 막기 위해 이용 제한 정책을 시행한다. 사용자에게 1일 1회 무료 기회를 제공하고, 추가 이용 시에는 앱 내 포인트를 차감한다. 무료 제공량을 제한해 API 호출을 억제하고 포인트 체계를 통해 운영 효율을 관리한다.
객관적으로 검증 가능한 '사실 주장'만 추출하여 검증하는 로직
주관적 의견과 사실이 섞인 커뮤니티 글을 그대로 입력하면 AI가 가치 판단까지 검증하려다 오류를 범한다. 이를 해결하기 위해 "이 정책은 최악이다" 같은 가치 판단 문장은 무시하고, "이 법안은 세금을 20% 인상한다"처럼 객관적 검증이 가능한 사실 주장만 먼저 추출한다.
단순 텍스트 분석을 넘어 원본 게시글, 부모 댓글, 첨부 이미지까지 멀티모달(Multimodal)로 묶어 AI에게 컨텍스트를 제공한다. 이렇게 추출된 사실 주장만을 대상으로 검증 파이프라인을 가동해 불필요한 연산을 줄이고 검증 정확도를 높였다.
게시글 수정 시 발생하는 무결성 문제는 팩트체크 요청 시점의 원문 데이터를 스냅샷(Snapshot)으로 저장해 해결했다. 사용자는 저장된 스냅샷을 통해 어떤 시점의 텍스트와 이미지를 기준으로 검증했는지, 어떤 출처를 참고했는지 투명하게 확인한다. 원본 데이터를 보존함으로써 검증 결과의 근거를 명확히 했다.
정치 커뮤니티의 소모적인 논쟁을 끝내는 힘은 모델의 체급이 아니라 데이터 무결성을 확보하는 설계에서 나온다. 사실 주장만 정교하게 추출하고 Gemini 3.5 Flash에서 3.1 Pro로 이어지는 폴백 구조를 적용하면, 할루시네이션을 억제하면서 운영 효율을 동시에 확보한다.
결국 LLM 기반 검증 서비스의 성패는 모델의 답변 능력보다 원문 스냅샷 보존과 단계적 추론 설계에 달려 있다. 데이터 무결성과 할루시네이션 방지라는 두 축을 중심으로 시스템을 설계하는 것이 실무적인 정답이다.




