Qwen Cloud를 사용하여 4일 만에 다른 AI 에이전트의 가짜 인용을 잡아내는 AI 에이전트를 구축했습니다
요약
AI 에이전트의 가짜 인용(vibe citing) 문제를 해결하기 위해 Qwen Cloud를 활용한 검증 에이전트 'CiteGuard'를 구축했습니다. 이 도구는 주장과 소스를 추출하고, 실제 소스를 가져와 대조함으로써 인용의 사실성을 판단합니다.
핵심 포인트
- AI의 환각 현상 중 인라인 인용의 낮은 사실성 문제 지적
- 프롬프팅이 아닌 그라운딩(Grounding) 도구를 통한 해결 방식 제안
- 추출, 가져오기, 정제, 판단으로 이어지는 4단계 파이프라인 구축
- Qwen 모델을 활용하여 인용의 지지 여부를 6가지 상태로 판결
Qwen Cloud를 사용하여 4일 만에 다른 AI 에이전트의 가짜 인용을 잡아내는 AI 에이전트를 구축했습니다
"바이브 사이팅 (vibe citing)"이 어떻게 제품이 되었는지, 그리고 한 LLM이 다른 LLM을 감시하도록 만들며 배운 점들.
2026년 6월, KPMG는 조사 결과 45개의 인용 중 단 5개만이 실제 근거가 되는 소스를 가리키고 있다는 사실이 밝혀진 후, 에이전틱 AI (agentic AI)에 관한 주요 보고서를 철회했습니다. 나머지는 말을 바꾼 파편, 잘못 인용된 논문, 또는 뒷받침해야 할 주장이 포함되어 있지 않은 링크들이었습니다. 조사를 수행한 GPTZero는 이를 **바이브 사이팅 (vibe citing)**이라는 이름으로 명명했습니다.
불편한 사실은 이것이 KPMG만의 문제가 아니라는 점입니다. AI가 초안을 작성한 보고서, 연구 요약 또는 문서를 출시하는 모든 팀은 검토되지 않은 초안 하나로 인해 동일한 헤드라인의 주인공이 될 수 있습니다. 2026년의 환각 (Hallucination) 벤치마크에 따르면, 인라인 인용 (inline-citation)의 사실성은 모델과 작업에 따라 22%에서 94% 사이의 실패율을 보이고 있습니다.
그리고 프롬프팅 (prompting)으로는 이를 해결할 수 없습니다. 모델에게 하루 종일 "실제 소스만 인용해 주세요"라고 간청할 수는 있지만, 모델은 고개를 끄덕이며 조작할 것입니다. 효과적인 방법은 그라운딩 (grounding), 즉 실제로 소스를 가져와서 그 소스와 대조하여 주장을 확인하는 것입니다. 그것은 프롬프트가 아닙니다. 그것은 도구 (tool)입니다.
그래서 Qwen Cloud와 함께하는 글로벌 AI 해커톤(Global AI Hackathon) 기간 동안, 저는 이 도구를 만들었습니다.
CiteGuard: 대시보드가 아닌 에이전트로서의 검증
CiteGuard는 한 가지 일을 합니다. 주장과 그것이 인용하는 소스가 주어지면, 해당 소스가 실제로 그 주장을 뒷받침하는지를 결정하고 그 과정을 보여줍니다.
인용당 파이프라인 (pipeline)은 다음과 같습니다:
- 추출 (Extract) — 원문 텍스트에서 주장(claim)과 소스(source) 쌍을 추출합니다: 마크다운 링크, 각주, DOI, 일반 URL 등. 인용이 포함된 문장이 바로 소스가 뒷받침해야 하는 주장입니다.
- 가져오기 (Fetch) — 타임아웃, 크기 제한, 리다이렉트 추적 등 실제 환경을 고려한 방어 기제를 갖추어 소스를 다운로드합니다. 데드 링크(Dead link)인가요? 자동으로 archive.org 폴백(fallback)을 실행합니다. 홈페이지로 연결되는 리다이렉트인가요? HTTP 상태 코드는 200이지만 딥 링크(deep link)가 사라진 상태이므로 "soft 404"로 플래그를 지정합니다.
- 정제 (Distill) — 내비게이션과 불필요한 문구(boilerplate)를 제거하고 (Mozilla Readability 사용), PDF 텍스트를 추출하며, 크기를 제한합니다.
- 판단 (Judge) — qwen3.7-plus가 주장과 오직 가져온 소스 텍스트만을 읽고 다음과 같은 판결을 내립니다:
supported (지지됨) | partially_supported (부분적 지지) | contradicted (모순됨) | unsupported (지지되지 않음) | uncertain (불확실함) | could_not_fetch (가져오기 실패)
모든 판결에는 소스에서 가져온 **축자 인용(verbatim quote)**이 포함됩니다. 이것이 신뢰의 닻(trust anchor) 역할을 합니다. 모델을 믿을 필요 없이, 인용구를 직접 읽고 5초 만에 확인할 수 있기 때문입니다.
작동을 가능하게 하는 단 하나의 규칙
판단자(Judge)는 무언가를 알고 있어서는 안 됩니다.
처음 작성한 프롬프트는 Qwen이 자신의 지식을 사용하도록 허용했습니다. 그 결과 모델은 인용된 페이지의 내용과 상관없이 "에펠탑의 높이는 330m이다"라는 문장을 '지지됨(supported)'으로 기쁘게 표시했습니다. 왜냐하면 모델이 탑의 높이를 이미 알고 있었기 때문입니다. 이는 정확히 반대로 동작하는 것입니다. 자신의 기억을 신뢰하는 인용 검사기는 그저 '느낌(vibe)'에 의존한 인용을 더 복잡한 단계로 수행하는 것에 불과합니다.
해결책은 시스템 프롬프트(system prompt)에 강력한 계약을 명시하는 것입니다:
오직 제공된 소스 텍스트에 대해서만 판단하십시오. 공백을 채우기 위해 세상에 대한 당신의 지식을 절대 사용하지 마십시오. "증거(evidence)"는 반드시 소스 텍스트에서 복사한 축자 인용(verbatim quote)이어야 합니다.
이 제약 조건을 통해 시스템 전체가 역전됩니다. 모델은 예언자(oracle)가 아닌 독해 엔진(reading comprehension engine)이 됩니다. Qwen은 Temperature 0과 JSON 전용 응답 형식을 사용할 때, 정밀한 인용 추출과 기꺼이 "unsupported"라고 말하는 능력 등 이 작업에 매우 뛰어나다는 것이 증명되었습니다.
두 가지 정직성 규칙이 더 중요합니다:
- 맹목적으로 판단하지 마십시오 (Never judge blind). 소스를 가져올 수 없는 경우(유료 결제 벽, 봇 차단, archive.org의 범위를 벗어난 링크 유실 등), 추측하지 말고
could_not_fetch라고 판정해야 합니다. - 불확실성을 인정하십시오 (Admit uncertainty). 소스 텍스트가 엉망이거나 파편화되어 있다면
uncertain을 반환합니다. 과도하게 주장하는 검증기는 검증기가 없는 것보다 더 해롭습니다.
Agent Society 데모: 작성자(writer) vs. 검증자(verifier)
해커톤의 Agent Society 트랙을 위해, 실시간으로 실행할 수 있는 파이프라인에 두 에이전트를 연결했습니다:
- 작성자 에이전트 (writer agent) (qwen3.7-plus)가 사용자가 지정한 주제에 대해 인라인 인용 (inline citations)을 포함한 단락을 초안으로 작성합니다. 이는 여러분이 사용해 본 모든 AI 글쓰기 도구와 정확히 일치합니다.
- 검증자 에이전트 (verifier agent) (Qwen이 판단하는 CiteGuard)가 인용된 모든 소스를 가져와 모든 주장을 감사(audit)합니다.
- **게이트 (gate)**가 초안을 승인하거나 차단합니다.
contradicted(모순됨) 또는unsupported(지원되지 않음)로 판명된 인용이 하나라도 있으면 초안은 폐기됩니다.
이 과정이 실행되는 것을 보는 것이 이 프로젝트의 핵심입니다. 작성자는 프라하 천문 시계에 대해 세 개의 인용을 포함한 아름답고 자신감 넘치는 단락을 생성합니다. 검증자가 결과를 가져옵니다: 하나는 지원됨, 하나는 부분적으로 지원됨 (사실은 맞지만 세기가 틀림), 하나는 인용된 페이지에서 해당 주장을 전혀 언급하지 않음. 차단됨 (BLOCKED). 인용구와 함께 말이죠.
직접 시도해 보세요: citeguard.boundy.workers.dev/demo
솔직한 구축 과정
스택: 모든 곳에 TypeScript를 사용했습니다. API, 웹 데모, 그리고 **원격 MCP 엔드포인트 (remote MCP endpoint)**를 위해 엣지(edge)에서 Cloudflare Worker를 사용했습니다. 덕분에 Claude, IDE, 에이전트 프레임워크가 verify_claims를 네이티브 도구처럼 호출할 수 있습니다. Qwen은 OpenAI 호환 DashScope International 엔드포인트를 통해 연결했으며, 덕분에 통합이 매우 간단했습니다 (base_url만 바꾸면 끝). GitHub에 오픈 소스 코어(MIT 라이선스)를 공개했으며, 일괄 감사(batch audits)를 위한 Apify Actor도 추가했습니다.
어려웠던 점들:
- 웹은 적대적입니다. Britannica는 봇 차단(bot-blocks)을 수행합니다. 어디에나 페이월(Paywalls)이 존재합니다. archive.org가 예상보다 더 많은 죽은 링크(dead links)를 구제해주었지만, 나머지는 정직한
could_not_fetch오류였습니다. - 추론 모델(Reasoning models)은 정보가 누출됩니다. qwen3.7의 사고 과정(thinking traces)은 품질 측면에서 훌륭하지만, 응답에서 최종 JSON을 추출할 때는 재시도 계약(retry contract)을 포함하여 견고하게 파싱(parse)해야 합니다.
- 문장 분할(Sentence splitting)은 지뢰밭입니다. 문장에 마침표가 가득한 URL이 포함되어 있을 때 특히 그렇습니다. 제가 만든 분할기는 문장 부호 뒤에 공백이 오는 경우에만 분할합니다. 따라서
10.48550/arXiv.1706.03762내부의 점들은 그대로 유지됩니다.
투명한 공개를 위해 말씀드리자면, 인용 무결성(citation-integrity) 프로젝트는 그 자체로 무결성을 모델링해야 하기에, 이 프로젝트는 인간의 지시 하에 AI의 강력한 도움(Claude가 대부분의 코드를 작성함)을 받아 구축되었으며, 이 포스트 또한 AI가 초안을 작성하고 인간이 검토했습니다. 본문의 모든 기술적 주장은 리포지토리(repo)를 통해 확인할 수 있습니다.
검증 에이전트(Verifier agent)의 진정한 용도
에이전트 경제(agent economy)에서 부족한 기본 요소(primitive)는 또 다른 작가가 아니라, 바로 **신뢰 인프라(trust infrastructure)**입니다. 생성하는 에이전트가 있다면 이를 확인하는 에이전트도 필요합니다. 이 패턴은 다음과 같이 일반화될 수 있습니다:
- AI가 초안을 작성한 보고서 및 문서에 대한 발행 전 게이트(Pre-publish gates)
- 지원되지 않는 인용을 추가하는 PR(Pull Request)을 차단하는 CI 체크
- 에이전트 프레임워크를 위한 미들웨어(Middleware): '쓰기 후 발행(write-then-publish)' 파이프라인은 검증 단계(verification pass) 없이 배포되어서는 안 됩니다.
검증 에이전트의 범위를 제한하면 검증은 실행 가능(tractable)해집니다: 가져온 텍스트만 사용하고, 인용 가능한 증거를 활용하며, 정직한 불확실성을 유지하는 것. 이것이 핵심 비결입니다. 그대로 가져다 쓰세요.
CiteGuard는 오픈 소스(MIT)입니다: github.com/Franksterino/citeguard. 라이브 데모: citeguard.boundy.workers.dev/demo. 2026년 7월, Qwen Cloud와 함께하는 Global AI Hackathon Series를 위해 구축되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기