원문 캡처 · pkazantsev.com
원문 캡처 · pkazantsev.com

PromiseDiff는 PDF 디지털 상품 판매자가 게시 전에 상품 설명과 실제 파일을 대조하는 로컬 우선 도구다. 상품 설명을 붙여 넣고 PDF나 ZIP 파일을 올리면 각 주장을 파일이 뒷받침하는지, 반박하는지, 확인할 수 없는지 보여준다.

결과는 SUPPORTED(근거가 뒷받침함), CONTRADICTED(재현 가능한 검사에서 상충하는 사실을 찾음), UNVERIFIED(파일만으로는 확인할 수 없음), OUT_OF_SCOPE(최소 기능 제품이 검사할 수 없음)로 나뉜다. 근거가 없다는 사실만으로 판매자가 틀렸다고 단정하지 않도록, 입증되지 않은 주장과 반박된 주장을 구분한다.

페이지 수와 크기, 파일 목록은 PyMuPDF로 직접 측정한다. 의미상 유사성을 판단해야 하는 주장은 Ollama를 통해 로컬에서 실행하는 Gemma가 관련 발췌문을 살펴본다. 다만 모델의 답변만으로 주장을 뒷받침된 것으로 판정하지 않는다. 파일 이름과 페이지가 실제로 존재하고, 인용한 문구가 추출된 텍스트에 정확히 있어야 한다. 그렇지 않으면 결과는 UNVERIFIED로 남는다.

데모에 포함된 Budget Planner는 A4 크기 48페이지이며, 기대한 플래너 내용도 담고 있다. 하지만 예시 상품 설명은 US Letter판도 제공한다고 약속한다. 파일에 해당 판본이 없어 PromiseDiff는 페이지 수를 확인하는 한편, 보고서에 측정 근거를 남기고 US Letter판이 없다고 표시한다.

업로드 파일은 신뢰할 수 없는 입력으로 취급한다. 백엔드는 업로드 크기, PDF 수, 페이지 수, ZIP 압축 해제 후 크기와 추출 텍스트에 제한을 둔다. 경로 순회, 중복 항목, 심볼릭 링크, 암호화, 중첩 압축 파일, 의심스러운 압축도 거부한다. 공개 배포 환경에서는 PDF 처리를 자원 제한이 있는 작업자로 격리해야 한다고 설명한다.

같은 로컬 API를 사용해 합성 사례 10개를 검사한 결과, 독립적으로 붙인 라벨과 9개가 일치했다. 유일한 실패는 의미상 바꿔 쓴 표현 사례였다. 아래 수치는 작은 합성 평가의 결과이며, Gemma를 실행한 해당 장비에서 측정했다.

지표결과조건
정확 일치율90% (9/10)작은 합성 평가
반박 정밀도 / 재현율100% (2/2)측정 가능한 사실만
뒷받침 재현율75% (3/4)바꿔 쓴 표현 하나는 미검증으로 유지
API 지연 시간 중앙값2.11초이 장비에서 로컬 Gemma 실행

실패 사례에서는 “debt repayment worksheet”가 “Loan Balance Reduction Tracker”를 뒷받침한다고 판단되지 않았다. 근거가 충분하지 않아 미검증으로 남겼으며, 다음 개선 과제로 표현 바꿔 쓰기에 대한 검색을 들었다. 파일이 주장을 입증하지 못하면 그렇게 표시한다는 원칙은 유지한다.