정부 AI가 지어낸 법이 아니라 거꾸로 읽힌 실재 법령에서 실패하는 이유, 그리고 결정론적 법령 결정 게이트를 만들며 배운 것.
Artificial IntelligenceGovernmentLegal

법령은 실재했다. 답변은 그래도 불법이었다.

Ashutosh SinghalAshutosh Singhal2026년 6월 28일15 min

제가 정부 챗봇이 자신 있게, 그리고 틀리게 내놓는 것을 처음 본 답변은 섹션 8 바우처에 관한 것이었습니다.

집주인이 평범한 말로, 주택 바우처로 임대료를 낼 세입자를 거절해도 되는지 묻습니다. 올바른 답은 안 된다는 것입니다. 거절은 NYC Admin. Code § 8-107(5)에 따른 소득 출처 차별이며, 시의 인권위원회(Human Rights Commission)는 고의적 위반에 대해 최대 25만 달러의 민사 벌금을 부과할 수 있습니다. 이것은 함정 질문이 아닙니다. 확립된 법입니다. 그런데 2023년 10월, 뉴욕시 자체의 Azure AI 기반 MyCity 봇은 사업주와 집주인에게 그 반대를 말했습니다. The Markup이 2024년 3월에 기록한 바에 따르면, 봇은 집주인이 바우처 소지자를 돌려보낼 수 있다고, 상점이 현금 없이 운영할 수 있다고, 고용주가 직원 팁의 일부를 가져갈 수 있다고 했습니다. 그 답변은 하나같이 불법이었고, 하나같이 .gov 도메인에 시의 인장을 달고 있었습니다.

저는 CivicCite를 모델이 환각을 일으켰기 때문에 만든 것이 아닙니다. 거의 맞았던 답변들 때문에 만들었고, 제 생각 전체를 바꾼 그 하나에 대해 이야기하고 싶습니다. 제품 자체를 보고 싶다면 여기 있습니다: veriprajna.com/ko/demos/government-municipal-ai. 코퍼스는 합성적이지만 충실한 데모 그래프이며, 법률 자문이 아닙니다. 하지만 메커니즘은 실재하고, 논쟁할 가치가 있는 부분이 바로 그 메커니즘입니다.

제게 남은 순간은 봇이 법을 지어낸 것이 아니었습니다. 제 파이프라인이 올바른 법령을 끌어내고도 여전히 틀린 답변을 초안하는 것을 지켜본 것이었습니다.

검색이 닿을 수 없는 문제에 검색을 더하느라 보낸 그 한 주

저도 GovTech에서 거의 모두가 시작하듯 시작했습니다. 거짓말하는 챗봇의 해결책은 더 나은 검색이라고 확신하면서요. 모델에 실제 시 조례를 주십시오. 모든 답변을 실제 조항에 근거시키십시오. 검색 증강 생성(retrieval-augmented generation) — 모델이 지어낸다는 표준적 두려움에 대한 표준적 답입니다. 깔끔한 이야기이고, 데모도 멋지며, 저는 그보다 오래 믿었습니다.

그러고 나서 스탠퍼드 수치를 읽었고, 그 이야기가 무너졌습니다. Magesh와 동료들은 JELS를 통해 발표된 2025년 연구에서, 정확히 이 방식을 쓰는 두 개의 목적 특화 법률 리서치 도구를 측정했습니다. Lexis+ AI는 질의의 17%에서 환각을 일으켰습니다. Westlaw의 AI-Assisted Research는 33%에서 환각을 일으켰습니다. 장난감 챗봇이 아닙니다. 법령을 먼저 검색하고 그다음에 생성하는 시스템이며, 법에 대해 맞는 것이 사업 전체인 회사들이 만든 것입니다. 두 번째 도구에서는 답변 대략 세 개 중 하나가 여전히 틀렸습니다. 검색은 초안을 개선했습니다. 답변을 내보내도 안전할 만큼은 만들지 못했습니다.

그때 어떤 느낌이었는지 솔직히 말하고 싶습니다. 저도 막 같은 아키텍처를 일주일 동안 만들고 똑똑하다고 느끼던 참이었으니까요. 제 파이프라인은 시민의 질문을 원자적 법률 하위 질문으로 분해하고, 시 조례 그래프에서 후보 조항을 검색한 뒤, 검색된 내용만으로 초안하도록 모델을 제약했습니다. 섹션 8 질문에서는 마지막 단계 직전까지 모든 것을 올바르게 했습니다. § 8-107(5)를 찾았습니다. 올바른 법령이었습니다. 적법한 소득 출처에 관한 정확한 텍스트를 끌어왔습니다. 그런데 그다음, 사실상 네, 바우처를 거절할 수 있다는 문장을 초안했습니다.

올바른 법. 틀린 답. 같은 초안 위에 겹쳐 앉아 있었습니다.

검색은 모델에 올바른 법령을 건넵니다. 모델이 그 법령을 거꾸로 읽는 것을 막는 데는 아무 역할도 하지 않습니다.

그 주가 제게 문제의 형태를 바꿔 놓은 주였습니다. 저는 환각을 적으로 다루고 있었고, 환각은 실재하지만, 그것은 잡아낼 수 있다고 상상할 수 있는 실패입니다. MyCity 답변을 실제로 내보낸 실패는 더 미묘하고 더 나쁩니다. 올바른 조항이 인용되고, 틀린 결론이 진술됩니다. 문장 어디에도 조작이 없습니다. "지어낸 거냐" 필터가 잡을 것이 없습니다. 지어낸 것이 없으니까요. 바로 거기 앉아 있는 법을 자신 있게 잘못 읽은 것뿐입니다. 그 실패 모드는 검색에는 보이지 않습니다, 검색은 법령이 존재하는지만 확인할 뿐, 문장이 그것을 올바른 방향으로 읽었는지는 절대 확인하지 않기 때문입니다.

어느 쪽이 더 나쁜가, 지어낸 법인가, 아니면 거꾸로 읽힌 실재하는 법인가?

저는 그 질문으로 자꾸 돌아갔고, 제 답은 점점 더 확실해졌습니다. 지어낸 법이 더 안전한 실패입니다.

시민이 각각을 어떻게 다루는지 생각해 보십시오. 명백히 조작된 법령은 이상하게 읽히고, 해석되지 않는 조항을 인용하며, 뭔가 어색하게 느껴집니다. 거꾸로 읽힌 실재하는 법령은 완벽해 보입니다. 진짜 인용이 있습니다. 그 조항은 존재합니다. 집주인이 "네, 바우처를 거절할 수 있습니다"를 읽고, 붙어 있는 실제 조항 번호를 보고, 그에 따라 행동합니다. 이제 불법 거절이 생기고, 차별 청구를 가진 세입자가 생기며, 정부 답변으로 이어지는 문서 기록이 남습니다. 인용의 정확성이야말로 틀린 결론을 위험하게 만드는 바로 그 요소입니다. 나쁜 조언이 타고 들어오는 출입증입니다.

그래서 제가 가장 신경을 쓴 검사는 결코 "이 인용이 실재하는가"가 아니었습니다. "이 인용이 실제로 이 문장을 뒷받침하는가"였습니다. 파이프라인에서 그 검사는 함의(entailment)입니다. 초안된 주장과 인용된 조항의 정확한 텍스트가 주어졌을 때, 텍스트가 주장을 함의하는가, 모순하는가, 아니면 어느 쪽도 아닌가. 섹션 8 초안에서 모델의 "네"는 § 8-107(5)에 의해 모순된 것으로 잡힙니다. 조항이 명백히 반대를 말하기 때문입니다. 초안은 거기서 죽습니다. 살아남아 게이트가 결국 내보내는 것은 수정된 주장입니다. 집주인은 거절할 수 없으며, 그렇게 말하는 법령이 여기 있다.

검사에 열린 Verify 단계. 원시 입력으로 섹션 8 바우처에 관한 초안 주장과 인용 id nyc-admin-8-107-5가 보이고, 원시 출력으로 함의 라벨 entailed와 이유로 인용된 조항 텍스트가 보입니다.
모든 단계가 열립니다. 이것은 Verify로, 초안된 주장, 대조 검사된 정확한 법령 텍스트, 함의 라벨 entailed를 보여 줍니다. 인용된 법이 실제로 문장을 뒷받침하는지는 맹목적으로 받아들여야 하는 점수가 아니라, 읽을 수 있는 것입니다.

제가 고수한 것, 그리고 그 화면이 존재하는 이유는, 함의가 믿어야만 하는 블랙박스가 아니라는 점입니다. Verify 단계를 열어 원시 입력과 출력을 읽을 수 있습니다. 초안된 주장, 대조 검사된 법령 텍스트, 라벨, 그리고 조항 자체의 말로 된 이유. 검사할 수 없는 판정은 검증이 아닙니다. 제작 가치만 더 나은 두 번째 의견일 뿐입니다. 저는 이미 비싼 방식으로 배웠습니다. 한 모델에게 다른 모델을 심판하게 하면, 두 모델이 동의하는 결과만 얻고, 그것은 겉보기보다 약한 것입니다.

마침내 통한 수는 모델을 신뢰할 만하게 만들려는 시도를 그만두는 것이었습니다

정확한 재구성을 기억합니다. 포기처럼 느껴졌고, 결국 전체 설계가 되었기 때문입니다. 저는 모델을 신뢰할 만하게 만들려는 것을 그만두고, 그 신뢰성이 무관해지도록 만들기 시작했습니다.

전환은 이렇습니다. CivicCite의 언어 모델은 조언자입니다. 질문을 분해하고, 후보 답변을 초안하며, 함의 의견을 제시합니다. 무엇이든 내보낼 권한은 결코 없습니다. 에이전트 프레임워크 바깥, 평범한 결정론적 Python 안에 제가 법령 결정 게이트(Statutory Decision Gate)라고 부르는 것이 있으며, 네 가지 조건이 동시에 성립할 때만 하위 답변을 내보냅니다. 인용이 존재하고, 조항이 시행 중이며, 인용된 텍스트가 주장을 함의하고, 그와 충돌하는 것이 없을 때. 하나라도 빠지면 답변은 나가지 않습니다. 그 검사 중 둘은 순수 산술과 논리입니다. 시행 중은 날짜 비교입니다. 조항에 폐지일이 없고 시행일이 기준일 이전이어야 합니다. 충돌은 그래프 읽기입니다. 프롬프트도, temperature도, 설득도 없습니다.

CivicCite 분할 화면. 왼쪽의 일반 어시스턴트는 법령 근거 없음, 함의 검사 없음, 최신성 검사 없음, 있는 그대로 내보내기로 표시된 답변을 내보내고, CivicCite 쪽은 법령 결정 게이트가 RELEASED를 읽고, 하나 내보내기·영 보류와 함께 NYC Admin. Code § 8-107(5)를 검증된 출처·시행 중으로 표시한 답변을 보여 줍니다.
게이트는 RELEASED를 읽습니다. 하나 내보내기, 영 보류. 답변은 NYC Admin. Code § 8-107(5)를 검증된 출처·시행 중으로 달고 있을 때만 나갑니다. 왼쪽의 일반 어시스턴트는 법령 근거도 검사도 없이 답변을 있는 그대로 내보냈습니다.

저는 이제 두 문장을 끊임없이 말합니다. 하나는 에이전트는 조언하고, 게이트가 결정한다. 다른 하나는 LLM이 아무리 자신 있는 초안이라도 스스로 게이트를 통과하도록 투표할 수 없다는 것입니다. 이것은 들리는 것보다 중요합니다. 이 분야 전체의 매혹적인 실패가 모델이 자기 일을 채점하게 두고 그 점수를 "검증"이라 부르는 것이기 때문입니다. 답변을 초안하는 모델이 그 답변이 안전하다고 인증하는 존재가 될 수는 없습니다. 게이트는 의도적으로 모델보다 덜 똑똑하고, 의도적으로 그 바깥에 있으며, 그것이 전부입니다. 지능이 제안한다. 코드가 처분한다.

모델은 좋은 작가이고 나쁜 판사입니다. 그래서 쓰게 두고, 판정하게 두지는 않습니다.

데모는 자신의 가장자리에 대해 정직하며, 저도 그러겠습니다. 코퍼스는 실제 조항을 의역한 시 조례의 합성적이지만 충실한 그래프이며, 공식 기록이 아닙니다. 311 에스컬레이션 라우팅은 계산되어 보여지지만, 실제 사건 시스템 커넥터는 스텁입니다. 제약된 초안 작성은 프로덕션 토큰 수준 디코딩이 아니라 허용 목록 검증기와 한 번의 재요청을 사용합니다. 실재하는 것은 결정 논리이며, 결정 논리가 제품입니다.

좋은 답변보다 침묵을 더 신뢰하는 이유

데모가 답변을 거부하는 것을 자랑스러워하게 될 줄은 몰랐고, 이제는 그것이 가장 마음에 드는 기능입니다. 가장 선명한 예는 푸드트럭입니다.

상인이 일반 노점 주차 규칙 아래 미터기 공간에 하루 종일 트럭을 세워 둘 수 있는지 묻습니다. 일반 어시스턴트는 쾌활하고 틀리게 답하며, 살아 있는 것처럼 규칙을 인용합니다. CivicCite도 후보를 초안하고, 후보는 이미 폐지된 주차 조항을 인용합니다. 그다음 최신성 검사가 돌아갑니다. 조항에 폐지일이 있습니다. 시행 중이 실패합니다. 그리고 인접 규칙으로 넘어가 허세를 부리는 대신, 게이트는 답변을 보류하고, 질문을 검증된 적용 범위 밖으로 표시하며, 부분 소견을 첨부해 실제 부서로 라우팅합니다.

CivicCite가 푸드트럭 미터기 주차 질문에 답변을 보류합니다. 메시지는 미터기 공간의 일반 노점 주차를 다루는 유일한 조항이 폐지되었고 현재 시행 중인 조항이 이를 규율하지 않는다고 읽힙니다. 네 가지 검사는 인용 존재·시행 중·함의가 모두 실패하고, 충돌 없음만 통과하며, 질문은 NYC 311 일반 접수처로 라우팅됩니다.
정직한 무답. 이 주차 질문을 다루는 유일한 조항이 폐지되어 시행 중이 실패하고, 검색된 집합에 규율하는 것이 없으며, 게이트는 허세 답변 대신 보류하고 NYC 311 일반 접수처로 라우팅합니다.
정부 도메인의 틀린 답변은 당황스러운 일이 아닙니다. 시의 이름이 붙은 법적 책임입니다.

그 화면이 거부하는 것을 보십시오. 죽은 법령에서 그럴듯한 답을 합성하지 않습니다. 평범한 말로, 이를 다루는 유일한 조항이 폐지되었고 현재 시행 중인 것이 질문을 규율하지 않는다고 말하며, 추측 대신 시민을 넘깁니다. 정직한 기권은, 특히 정부에서는, 자신만만한 오답보다 낫습니다. 그리고 정부에서 이해관계는 평판의 문제가 아닙니다. 정부 법률 조언은 사적 기능(proprietary-function) 영역에 있어, 답이 틀렸을 때 숨을 주권면책의 방패가 없습니다.

이것은 더 이상 가설적 우려가 아니며, 그래서 제가 나중이 아니라 지금 이것을 만든 이유의 일부입니다. 2026년에는 27개 주에 챗봇 관련 법안이 78건 있었습니다. 뉴욕의 S7263은 2026년 2월 26일 상원 본회의에 올랐습니다. EU AI Act의 Annex III 고위험 의무는 2026년 8월 2일부터 집행 가능해지며, 벌금은 최대 €15M 또는 전 세계 매출의 3%입니다. 규제 질문은 "당신의 AI가 도움이 되는가"에서 "당신의 AI가 그렇게 말할 권한이 있었음을 증명할 수 있는가"로 옮겨 가고 있습니다. 방어할 수 있는 침묵. 방어할 수 없는 자신만만한 오답.

규제 당국이 실제로 조치할 수 있는 숫자

이런 시스템의 헤드라인 지표가 환각률이라고 생각했었고, 이제는 그 본능이 정확히 거꾸로라고 생각합니다. 백분율은 규제 당국에 건넬 잘못된 것입니다.

답이 틀렸을 때 책임을 지는 시의 법무부(Law Department)라고 상상해 보십시오. "우리 챗봇은 겨우 4%만 환각합니다"는 안심이 되지 않습니다. 백 명 중 네 명의 시민이 시의 권위를 등에 업은 답을 받고, 그 답 뒤에는 아무것도 없다는 자백입니다. 의미 있는 숫자는 모델이 얼마나 자주 틀리는지가 아닙니다. 검증되지 않은 것이 문밖으로 나간 적이 있는가입니다. 그래서 제가 벤치마크를 중심으로 세운 지표는 이렇습니다. 고정·라벨링된 12개 질의 골든셋에서, 실제 파이프라인을 통과했을 때, 검증되고 시행 중인 법령 근거 없이 내보내진 답변의 수. 목표는 열두 개 중 영입니다.

환각률은 규제 당국에 당신이 얼마나 자주 실패했는지 말해 줍니다. 당신이 그것을 잡았다는 것은 말해 주지 못합니다.
골든셋 벤치마크 뷰와 세 타일. 검증된 시행 중 법령 근거 없이 내보내진 답변 12개 중 영, 목표 영, 감사 기록 커버리지 100퍼센트, 정답과의 처분 일치 100퍼센트, 그 아래 파이프라인을 도는 열두 개의 라벨링된 질의 목록.
실제 파이프라인을 통과한 12개 질의 골든셋. 검증되고 시행 중인 근거 없이 내보내진 답변 영을 목표로 하며, 질의당 제출 가능한 기록 하나, 라벨링된 정답과의 처분 일치. 이것은 고정된 라벨셋이지, 열린 세계 약속이 아닙니다.

그 숫자가 무엇이고 무엇이 아닌지 정확히 말하고 싶습니다. 과대 주장은 전제 전체를 배신할 테니까요. 고정된 라벨셋의 결과이지, 열린 세계 보장이 아니며, "제로 환각"도 아닙니다 — 정직한 사람이 팔아서는 안 된다고 생각하는 표현입니다. 모델은 여전히 불완전한 주장을 초안합니다. 요점은 검증되지 않은 것이 보류된다는 것이지, 초안되지 않는다는 것이 아닙니다. 그 숫자 옆에는 두 가지가 더 있습니다. 감사 기록 커버리지 100% — 내보내든 거부하든 질의당 제출 가능한 기록 하나 — 그리고 라벨링된 정답과의 처분 일치. 게이트 없는 MyCity 아키텍처인 일반 RAG 베이스라인은 같은 셋에서 문서화된 불법 답변을 내보냈을 것입니다. 그 비교는 맥락이지, 헤드라인이 아닙니다.

기록이 제가 가장 강하게 변호할 부분입니다.

JSON을 보여 주는 법령 결정 기록(Statutory Decision Record) 서랍. 검증기 veriprajna-civiccite 버전 0.1, 처분 RELEASED, NIST AI RMF Govern 및 Measure 로깅과 FedRAMP StateRAMP 지속 모니터링을 명시한 표준 목록, 주택 도메인 하위 답변으로 NYC Admin. Code § 8-107(5)를 인용하며 인용 존재·시행 중·함의·충돌 없음이 모두 true, 결정 RELEASE.
이 질의에 대해 작성된 기록. 처분 RELEASED, 인용, 네 가지 검사 전부, 결정이 JSON으로. NIST AI RMF와 FedRAMP StateRAMP 로깅을 지향하는 표준으로 명시합니다. 답이 나가든 아니든, 모든 질의에 이런 기록이 하나씩 생깁니다.

내보내든 거부하든, 모든 질의는 법령 결정 기록을 만듭니다. 처분, 인용, 네 가지 검사 결과, 결정이 제출하고 재실행할 수 있는 구조화 데이터로. NIST AI RMF 로깅과 FedRAMP 및 StateRAMP 지속 모니터링을 지향하는 표준으로 명시합니다. 저는 그 문장에 신중합니다. 지향은 방향이지 인증이 아니며, CivicCite가 그중 어떤 것에 대해 인증받았다고 주장하지 않겠습니다. 하지만 감사자는 모델이 똑똑하다는 약속을 원하지 않습니다. 감사자는 상호작용마다, 답이 존재하도록 허용된 정확한 이유를, 누군가가 깨뜨리려 해도 살아남는 형태로 보여 주는 기록을 원합니다. 재현 가능성이 결정을 증거로 바꿉니다, 그리고 증거가 바로 규제 당국이 조치할 수 있는 것입니다.

설명보다 보는 편이 낫다면, 여기 전체 데모가 처음부터 끝까지 돌아갑니다.

내게 남은 질문

제 자신의 반응에서 놀란 점으로 자꾸 돌아갑니다. CivicCite가 질문을 거부하고 부서로 라우팅하는 것을 처음 보았을 때, 제 안의 어떤 부분은 시스템이 실패하는 것으로 읽었습니다.

실패가 아니었습니다. 자신만만한 봇들이 할 수 없는 한 가지, 즉 자신이 증명할 수 있는 것의 가장자리를 알고 거기서 멈추는 일을 하고 있었습니다. 저는 좋은 답변을 최적화하느라 너무 오래 보내, 조용히 좋은 답변이 목표라고 가정하고 있었습니다. 그렇지 않습니다. 정부에서 목표는 방어 가능한 답변입니다, 그리고 그 두 단어 사이의 거리가 이 제품이 존재하는 이유 전부입니다. 방어 가능한 답변은 때로 내보내진 인용처럼 보입니다. 그만큼 자주, 라우팅된 질문과 제출된 기록처럼 보이기도 합니다.

그래서 정부용 AI를 만들거나 구매하는 누구에게든 남기고 싶은 질문은 "모델이 얼마나 정확한가"가 아닙니다. 더 나은 모델은 유창하고 맥락상 틀린 답을 쓰는 데 계속 더 나아질 것입니다. 유창함은 원래 빠진 조각이 아니었으니까요. 게이트를 나가기 전에 제가 묻는 질문은 더 좁고 더 어렵습니다. 바로 지금, 이 정확한 답이 존재하고 현재 시행 중인 법령으로 추적됨을 증명할 수 있는가, 그리고 그 증명이 실패하길 원하는 법원에서도 살아남는가? 답이 아니오면, 모델이 얼마나 좋은지는 중요하지 않습니다. 시스템은 침묵해야 합니다. 어느 쪽이든, 결정하는 모습을 여기서 볼 수 있습니다: veriprajna.com/ko/demos/government-municipal-ai.

신뢰는 믿어야만 하는 모델에 있지 않습니다. 감사할 수 있는 코드에 있습니다.

관련 연구

다른 채널에도 게시됨

확신을 가지고 AI를 구축하세요.

차세대 엔터프라이즈 AI 구축에 깊은 경험을 갖춘 팀과 협업하세요. 신뢰할 수 있는 AI 전략을 설계하고 구축하며 배포할 수 있도록 지원해 드리겠습니다.

Veriprajna 딥테크 컨설팅 은(는) 헬스케어, 금융, 규제 분야를 위한 안전 필수 AI 시스템 구축을 전문으로 합니다. 당사의 아키텍처는 확립된 프로토콜에 따라 검증되며 포괄적인 규정 준수 문서를 갖추고 있습니다.