안녕하세요.
약 6개월 전, 법안을 쉽게 보고 의견을 남길 수 있는 시민 참여 서비스 '어흥'으로 인사드렸던 개발자입니다.
이번에 커뮤니티 내 가짜뉴스와 소모적인 논쟁을 줄여보고자 AI 팩트체크 기능을 도입했는데, 이 과정에서 겪은 고민과 기술적 시행착오들을 공유해보고자 합니다.
처음엔 아주 단순하게 접근했습니다. 타겟 텍스트를 던져주고 "이 글이 사실인지 검증해줘"라고 프롬프트를 짰죠. 하지만 실제 서비스에 올려보니 예상치 못한 문제들이 쏟아졌습니다.
단순한 개인의 '의견'까지 사실인 양 팩트체크를 시도하고, 근거가 없는데도 그럴싸하게 결론을 지어버렸습니다. 게다가 팩트체크가 끝난 뒤 작성자가 본문을 수정해버리면 결과의 앞뒤가 안 맞는 황당한 상황도 생겼습니다.
결국 초기 구조를 다 버리고, 현재는 파이프라인을 꽤 많이 뜯어고쳐 아래와 같이 운영하고 있습니다.
1. 검증 대상 발라내기 (의견 vs 사실)
글 전체를 한 번에 검증하지 않고, 객관적으로 검증 가능한 '사실 주장'만 먼저 추출하도록 했습니다. "이 정책은 최악이다" 같은 가치 판단은 무시하고, "이 법안은 세금을 20% 인상한다" 같은 문장만 타겟으로 삼는 식입니다.
정확한 맥락 파악을 위해 타겟 텍스트만 보지 않고, 원본 게시글, 부모 댓글, 심지어 첨부된 이미지까지 멀티모달로 묶어서 AI에게 컨텍스트를 제공하고 있습니다.
2. "모른다"고 대답하게 만들기
가장 신경 쓴 부분 중 하나입니다. LLM 특유의 할루시네이션을 막기 위해, 교차 검증할 공신력 있는 근거가 부족하거나 확인이 불가능한 사안은 억지로 결론 내지 않고 '알 수 없음', '판단 보류'로 응답하도록 프롬프트를 강하게 제어했습니다.
3. 원문 스냅샷 박제와 투명한 출처 제공
작성자가 글을 수정해버리는 문제를 막기 위해, 팩트체크를 요청한 그 시점의 원문 데이터(스냅샷)를 그대로 보관합니다. 다른 유저들이 결과를 볼 때 "어떤 시점의 어떤 텍스트/이미지를 기준으로 검증했는지", "어떤 출처를 참고했는지" 투명하게 확인할 수 있도록 했습니다.
4. 트래픽과 리소스 처리
이렇게 맥락을 다 긁어오고 검증하는 과정이 무겁다 보니, 유저 대기열 관리가 필요했습니다. 그래서 요청은 전부 Redis Cluster + BullMQ를 활용해 비동기 큐에 밀어 넣고 백그라운드 워커에서 순차 처리하고 있습니다.
비용과 속도를 고려해 Gemini 3.5 Flash를 메인 모델로 쓰되, 에러율이 높아지거나 복잡한 추론 실패 시 Gemini 3.1 Pro로 Fallback 시키는 구조를 적용했습니다.
(무분별한 요청을 막기 위해 1일 1회 무료 제공 후, 앱 내 포인트를 차감하도록 제한도 두었습니다.)
아직도 풀고 있는 숙제들
나름대로 방어 로직을 세웠지만 여전히 까다로운 케이스들이 많습니다. 통계의 기준 시점이 다른 경우, 정치인 특유의 은유나 해석이 개입된 발언, 혹은 교묘하게 팩트와 거짓이 섞인 장문의 글은 여전히 완벽한 처리가 어렵네요.
어흥 앱에서 직접 테스트해보실 수 있습니다.
혹시 이런 검증 로직에서 환각을 더 잘 잡는 프롬프트 노하우나, 유저들이 모호한 결과를 더 잘 수용하게 만드는 UX/UI 아이디어가 있다면 편하게 조언 부탁드립니다. 긴 글 읽어주셔서 감사합니다!
구글 플레이: https://play.google.com/store/apps/details?id=kr.uhheung.app
앱 스토어: https://apps.apple.com/kr/app/%EC%96%B4%ED%9D%A5/id6751951353

3 hours ago
3
![[AI 해커톤 후기] AI 시대의 해커톤과 인간의 역할: AI의 계획과 사람의 전략](https://amuse.peoplentools.com/site/assets/img/broken.gif)
![[속보] 北, 韓·EU성명에 “체제존중 위장 내던져…韓 적대 원칙 불변”](https://pimg.mk.co.kr/news/cms/202606/13/news-p.v1.20260613.89255ddca2b0487c98e7f979e85a8a39_R.jpg)




English (US) ·