본문으로 건너뛰기

VERIFIER CORE · 주장 대 출처 검증

텍스트가 주장하는 바를 그 출처가 말하는 바와 비교하여, 여섯 가지 상태 중 하나와 근거를 함께 반환합니다.

Verifier Core는 챗봇이 아니라 커널입니다. 주장, 당신의 도메인이 출처를 어떻게 명명하는지 아는 리졸버, 그리고 대조할 정본 텍스트를 주면, 그 주장이 성립하는지 알려주고 어느 경우든 근거를 보여줍니다.

결정론적입니다: 어떤 언어 모델도 판정 경로에 관여하지 않습니다. 같은 텍스트, 같은 출처, 같은 판정 — 1년 뒤에도 재현 가능하며, 이것이 이를 의견이 아니라 증거로 쓸 수 있게 만드는 이유입니다.

이것이 아닌 것

시장에는 이것처럼 들리지만 그렇지 않은 것들이 여럿 있습니다.

  • 환각 탐지기가 아닙니다

    어떤 모델도 개연성을 판단하지 않습니다. 특정 주장을 특정 출처와 대조할 뿐, 그 이전 단계는 다루지 않습니다.

  • 신뢰도 점수를 주지 않습니다

    0과 1 사이의 숫자가 아니라 상태와 그 근거를 반환합니다. 점수는 임계값을 어디에 둘지라는 어려운 결정을 그저 읽는 사람에게 떠넘길 뿐입니다.

  • 검색 엔진이 아닙니다

    문서를 대신 찾아주지 않습니다. 코퍼스는 당신이 제공하고, 엔진은 제공된 것과 주장을 대조합니다.

  • 추론을 검사하지 않습니다

    개별 주장을 그 출처와 대조해 검증할 뿐, 거기서 도출된 추론은 검사하지 않습니다. 올바르게 인용된 두 전제가 잘못된 결론으로 이어져도 통과합니다 — 추론 단계는 여기서 검사하는 대상이 아니며, 이름이 암시할 수 있는 바와 달리 이 페이지는 그것을 명확히 밝힙니다.

그 위에 짓도록 설계됨

애플리케이션이 아니라 커널입니다. 서너 개의 작은 조각만 가져오면 나머지는 이 엔진이 처리합니다.

각 산업 분야는 정확히 한 지점에서만 다릅니다: 그 도메인에서 출처를 어떻게 명명하는가. 정본 텍스트를 가져오고, 해당 날짜에 여전히 유효했는지 확인하고, 의미를 비교하고, 결과를 구성하는 일 — 이는 법률사무소든 약국이든 정비소든 공통되므로, 통합할 때마다가 아니라 커널 안에 단 한 번 존재합니다.

  • ReferenceResolver

    12줄

    당신의 도메인에서 출처를 명명하는 방식.

  • CorpusPort

    약 20줄

    정본 텍스트가 어디서 오는가.

  • DomainPack (선택)

    약 40줄

    당신의 산업 분야에서 쓰이는 수량 어휘.

  • LanguagePack (선택)

    네 개 전부, 또는 전무

    당신 언어의 부정, 생략, 날짜, 표기 변형 계층.

  • SemanticAdvisor (선택)

    —

    판정을 완화할 수 있는 두 번째 의견 — verified로 승격시키는 일은 결코 없습니다.

12줄짜리 리졸버가 논거의 대부분입니다. 이는 약속이 아니라 실제 코드입니다 — CI에서 실행되는 테스트 스위트에서, 그 테스트를 위해 고안된 가상의 도메인(첨부문서 조항 참조)에 대해 그대로 가져온 것입니다:

const fichaTecnica = {
  id: "demo:ficha-tecnica@1",
  resolve(text) {
    const out = [];
    const re = /secci[oó]n\s+(\d+\.\d+)/gi;
    let m;
    while ((m = re.exec(text)) !== null) {
      out.push({
        id: `smpc:${m[1]}`,
        raw: m[0],
        span: [m.index, m.index + m[0].length],
      });
    }
    return out;
  },
};

법률사무소와 실험실과 정비소 사이에서 달라지는 것은 오직 이 첫 단계뿐입니다: 그들의 문서에서 출처 참조가 어떤 모습인지 인식하는 일. 나머지 — 정본 텍스트를 가져오고, 유효성을 확인하고, 의미를 비교하고, 판정을 구성하는 일 — 은 커널이 단 한 번 처리하는 몫입니다.

계산만으로는 풀리지 않는 세 가지

논지를 쉬워 보이게 만들려고 지어낸 예시가 아니라, 실측된 사례입니다.

페이지에 데모를 싣는다면 이 셋이 보여줄 가치가 있습니다: 단순한 수치 비교나 텍스트 유사도 검사만으로는 셋 중 어느 것도 잡아내지 못합니다.

바뀌지 않는 숫자 — 에어캐나다 143편

출처: "Uplift 22300 kg of fuel before departure today."
텍스트: "Uplift 22300 lb of fuel before departure today."
unit: "22300 lb"는 10115.1kg이고, 출처는 "22300 kg" 즉 22300.0kg이라고 말함

1983년, 보잉 767기는 지상 계산이 킬로그램을 가정한 상황에서 파운드 단위로 연료를 보급받았고, 매니토바 상공 41,000피트에서 연료가 바닥났습니다. 두 텍스트의 숫자는 동일하므로, 크기만 비교하는 수치 검사는 이를 잡아낼 수 없습니다 — 단위가 다르다는 것을 알아야 합니다. 이는 실패 유형을 보여주는 역사적 예시이며, 오직 그 이유만으로 여기에 쓰였습니다: 고객도 아니고, 이 엔진이 막아낸 사건도 아닙니다.

두 가지를 뜻하는 단어 — 갤런

갤런은 영국에서 4.546L, 미국에서 3.785L로 20% 차이가 나며, 두 문서 모두 영어일 수 있습니다. 지역이 선언되지 않으면 엔진은 판단을 보류하고 그렇게 말합니다, 추측하지 않고. GB로 선언하면 한 방향으로 풀리고, US로 선언하면 같은 쌍이 실제 불일치가 됩니다. 같은 텍스트, 서로 다른 두 답 — 모순이 아니라, 불완전했던 질문을 선언된 지역이 완성한 것입니다. 언어와 측정 관행은 여기서 별개의 축입니다, 휴대전화의 지역이 언어와 별개이듯이.

반쪽짜리 진실 — 빠진 부분

출처: "간부전, 중증 신부전, 그리고 임신 중에는 금기"
텍스트: "간부전, 중증 신부전에는 금기"

임신 항목이 빠졌습니다. 둘 사이의 텍스트 유사도: 1.000 — 단어 하나 바뀐 것 없이, 조항 하나가 그저 빠졌을 뿐입니다. 유사도 점수만으로는 이를 verified로 판정했을 것입니다.

불리언이 아닌 여섯 상태

시장 대부분은 참 또는 거짓을 반환합니다. 그 구분 자체가 제품입니다.

무언가를 모르는 이진 엔진은 어느 한쪽으로 반올림할 수밖에 없고, 두 방향 모두 위험합니다. 여섯 상태는 "이 출처는 존재하지 않는다" — 텍스트에 대한 실제 지적 — 를 "확인할 수 없었다" — 우리 쪽의 공백 — 와 분리하고, 이를 다시 "우리가 다루는 범위 밖" — 실패가 아니라 범위 결정 — 과 분리합니다.

  • verified

    주장이 출처에 대해 성립함

  • mismatch

    출처가 다른 내용을 말함

  • not_found

    코퍼스는 정상 작동하며 그 출처가 존재하지 않음 — 텍스트에 대한 지적

  • derogated

    존재했지만 해당 사실 발생일에는 효력이 없었음

  • pending

    확인할 수 없었음 — 텍스트가 아니라 우리 쪽의 공백

  • not_verifiable

    이 배포가 다루는 범위 밖

모른다는 것은 비난하는 것과 다릅니다. 정직한 답이 pending이어야 할 때 not_found를 반환하면, 지적으로 위장된 거짓 비난이 됩니다 — 검증기가 저지를 수 있는 가장 값비싼 실수인데, 읽는 사람에게는 정확히 진짜 적발처럼 보이기 때문입니다. 그래서 코퍼스는 엔진이 실패의 모양만으로 추론하게 두지 않고, 둘 중 어느 쪽인지 직접 선언합니다.

슬로건이 아니라 구조로 무관합니다

도메인, 언어, 코퍼스, 모델 모두 포트이며, 어느 것도 내부에 고정 배선되어 있지 않습니다.

업종 지식은 리졸버와 선택적 도메인팩을 통해 들어올 뿐 커널에 고정 배선되지 않으므로, 제약 첨부문서를 검사하는 것과 같은 엔진이 핵심부를 건드리지 않고도 정비 기록이나 신용 계약서를 검사합니다. 오늘날 여섯 개 언어가 완전하고 인증된 지원을 받습니다 — 영어, 스페인어, 프랑스어, 독일어, 이탈리아어, 포르투갈어 — 각각 부정, 생략, 날짜, 표기 변형에 대한 자체 완전한 계층을 갖추고 있습니다. 언어는 네 계층을 한꺼번에 등록하거나 전혀 등록하지 않습니다: 언어별 예외를 둔 공유 정책이야말로 언어 간 오염이 스며드는 방식이므로, 그런 것은 존재하지 않습니다.

언어와 측정 관행은 별도로 선언됩니다, 휴대전화의 지역이 언어와 무관하듯이: 영국 문서와 미국 문서가 둘 다 영어이면서도 숫자가 의미하는 바에는 합의하지 않을 수 있습니다. 측정 체계를 선언하지 않은 채로 두는 것은 미터법을 가정하는 것과 다릅니다 — 그것은 진짜 세 번째 답이며, 엔진은 추측하는 대신 그 답을 내놓습니다.

그럼에도 우리가 보여주는 것

코퍼스는 스스로 알려진 공백을 공개합니다.

스트레스 테스트 리더보드는 기준 엔진을 여러 베이스라인과 겨루게 하고, 적중뿐 아니라 실패도 함께 공개합니다 — 단일 항목에서 기준 엔진을 앞서는 베이스라인까지 포함해서요, 모든 것을 거부하는 검증기는 서류상 누출이 0으로 보이지만 그것은 숨을 만한 미덕이 아니기 때문입니다. 별도로: 런타임 의존성 0개, 그리고 네트워크 접속 없이 실행되는 에어갭 설치·검증 점검이 있어, 위의 결정론 주장을 그냥 믿는 대신 직접 테스트할 수 있습니다.

공백을 선언하지 않은 인증서는 완벽하거나 거짓말이거나 둘 중 하나이며, 어느 쪽도 믿을 수 없습니다.

VERIFIER CORE와 GRUNDNORM

경쟁이 아니라 상호보완 — 같은 문제의 반대편 끝.

Grundnorm은 누가 언제 기록을 검증했는지를 봉인합니다: 사후에 기록이 손대어져도 살아남는 암호학적 출처 증명입니다. Verifier Core는 특정 주장이 그 출처에 대해 성립하는지 확인합니다: 비교 그 자체입니다. 하나는 기록이 봉인된 후 변조되지 않았음을 증명하고, 다른 하나는 봉인 당시 그 기록이 말한 내용이 실제로 사실이었음을 증명합니다.

Grundnorm의 작동 방식 보기

이 계층이 필요한 산업 분야를 구축하고 계신가요?

@veredicto/core는 설치 가능한 패키지로 배포되지 않습니다 — 애플리케이션에 내장되는 것이지, 그 안으로 다운로드되는 것이 아닙니다. 무엇을 기준으로 주장을 검증해야 하는지 알려주시면, 포트를 함께 살펴보겠습니다.