원전을 지어내지 않는 법
AI에게 고전을 인용하게 하면 무엇이 무너지는지, 그리고 부탁이 아니라 구조로 막으려면 무엇을 치러야 하는지에 대한 작업 기록입니다.
“원전 데이터만 있으면 누구나 만들 수 있는 것 아닌가요?”
우리가 가장 자주 듣는 지적
이 모든 것은 「지혜의 별자리」 위에서 이뤄집니다
현자 한 명 한 명의 원전을 지식그래프로 엮고, 그 갈래들을 다시 하나의 지혜 지도로 잇습니다.
현자마다 자신이 남긴 원전(原典)으로 지은 지식그래프가 있습니다. 원문 속에 나오는 개념·인물·사건이 노드가 되고, 원문 안에서 확인되거나 맥락으로 추론되는 관계가 그 사이를 잇는 선이 됩니다. 저희는 이것을 현자별 원전그래프라 부릅니다.
이 개별 그래프들을 다시 하나로 모으면, 도서관의 「지혜의 별자리」 — 통합 지혜 지도가 됩니다. 시대도 문화도 다른 현자들이 같은 개념을 말할 때, 그 개념이 다리가 되어 서로 다른 별자리를 하나의 그림으로 잇습니다.
이 지도는 장식이 아닙니다. 모든 노드와 선에는 어디서 왔는지가 함께 적혀 있습니다 — 원전에서 직접 왔는지, 번역인지, 후대의 전통·해설인지. 그리고 이 계보에서는 원전이 언제나 가장 위에 섭니다. 지금부터 이 기록이 설명하는 인용 검증 — AI가 문장을 직접 짓지 못하게 막고, 서버가 원문을 대조해 넣는 방식 — 은 바로 이 지도가 딛고 선 같은 원전 코퍼스 위에서 작동합니다.
「지혜의 별자리」·지혜 지도 자체를 자세히 풀어 설명하는 문서는 따로 준비하고 있습니다. 지금 그래프를 직접 보시려면 도서관의 지혜의 별자리 →에서 둘러볼 수 있습니다.
맞습니다. 그리고 그게 문제의 시작입니다.
원전은 누구나 구할 수 있습니다. 어려운 것은 그다음입니다.
고전 텍스트는 대부분 공개돼 있습니다. 주말이면 수만 건을 내려받아 검색에 태울 수 있습니다. 저희도 그렇게 시작했습니다.
그렇게 모은 것이 인용 후보 문서 45,067건입니다. “원전을 갖고 있다”고 말하기에 충분해 보이는 숫자입니다. 그런데 그 문서를 문장 단위로 쪼개어 한 조각씩 판정해 보니 남는 것은 이만큼이었습니다.
| 언어 | 조각 | 비율 | 독자가 읽을 수 있나 |
|---|---|---|---|
| 한문 원문 | 1,559,087 | 51.2% | 아니오 |
| 한국어 | 920,502 | 30.2% | 예 |
| 서양어 원문 | 563,023 | 18.5% | 아니오 |
| 판정 불가 | 1,408 | 0.05% | 아니오 |
“데이터를 갖고 있다”와 “인용할 수 있다”는 다른 상태입니다. 그 차이를 아는 데 저희는 몇 달을 썼습니다. 파일을 세는 것과 그 안에 무엇이 들었는지 아는 것은 전혀 다른 일이기 때문입니다.
지금부터 그 몇 달에 무슨 일이 있었는지 적겠습니다. 실패한 대목도 그대로 실었습니다 — 이 기록을 믿을 수 있게 하는 가장 확실한 방법이기 때문입니다.
121일 동안, 화면은 멀쩡했습니다
이 분야에서 실패는 눈에 보이지 않습니다.
넉 달 동안 원전 검색이 한 건도 작동하지 않았습니다. 그런데 화면에는 아무 이상이 없었습니다. 현자는 여전히 그럴듯하게 답했고, 사용자도 저희도 몰랐습니다.
원인은 한 줄이었습니다. 원전을 저장할 때 쓴 검색 좌표의 규격과, 질문할 때 만든 좌표의 규격이 서로 달랐습니다. 데이터베이스는 그 질의를 전부 거절했고, 코드는 그 거절을 조용히 삼킨 뒤 “참고할 원전이 없다”는 상태로 답을 만들었습니다.
고치는 데는 한 줄이면 됐습니다. 값진 것은 그 한 줄이 넉 달을 버틴 이유였습니다.
「저장과 질의가 같은 규격을 쓴다」는 약속이 실행되는 코드가 아니라 주석과 문서에만 있었습니다. 그리고 시스템에는 실패를 정상 응답으로 바꿔 내보내는 조용한 우회로가 있었습니다. 지키는 사람이 없는 약속과, 실패를 숨기는 친절이 만나면 이렇게 됩니다.
여기서 얻은 세 줄
- 적재 건수는 건강의 근거가 아니다. 근거는 질문했을 때 실제로 회수(검색·인출)되는지다
- 실패를 정상 응답으로 바꾸지 않는다. 반환값·기록·화면 중 한 곳에는 반드시 드러낸다
- 가드는 보고하지 말고 되돌린다. “경고했다”는 막은 것이 아니다
이 세 줄이 이후 모든 설계의 전제가 됐습니다. 그리고 이것이 주말에 만든 원전 검색과 저희 것의 첫 번째 차이입니다. 같은 실패는 누구에게나 일어납니다. 다른 것은 그것을 며칠 만에 아느냐, 넉 달 뒤에 아느냐입니다.
“지어내지 마세요”는 지켜질 때만 지켜집니다
그래서 AI가 인용문을 쓸 수 있는 통로 자체를 없앴습니다.
어느 날 원효를 맡은 현자가 한문 구절을 그럴듯하게 지어 붙였습니다. 출처까지 달아서. 지시문에는 이미 “원전을 지어내지 말라”고 적혀 있었습니다.
부탁으로 막는 방식의 문제는 성공률이 아닙니다. 실패했는지 알 수 없다는 것입니다. 지어낸 한문은 한문을 아는 사람만 알아봅니다.
그래서 구조를 바꿨습니다. 이제 AI는 답변을 문장으로 쓰지 않습니다. 정해진 칸을 채우는 방식으로만 답하고, 인용 자리에는 번호 하나만 적을 수 있습니다. 원문과 출처는 서버가 자료에서 직접 꺼내 넣습니다.
다섯 겹 중 어느 하나라도 걸리면 그 인용은 나가지 않습니다. 전부 걸리면 답변 자체를 내보내지 않습니다. 어설픈 답보다 답하지 않는 편이 낫다고 판단했습니다.
치른 값
공짜가 아닙니다. 답변을 끝까지 만든 뒤 검사해야 하므로 글자가 한 자씩 흘러나오는 방식을 포기했습니다. 인용할 수 있는 자료만 인용하므로 인용 횟수도 줄어듭니다. 그리고 무엇보다—
자기 자료의 실제 상태를 직면하게 됩니다. 대부분의 팀이 이 대가를 치르지 않는 이유입니다.
켜 보니, 우리가 무엇을 갖고 있는지 알게 됐습니다
서버가 원문을 글자 그대로 넣기 시작하자 자료의 민낯이 화면에 나왔습니다.
사용자에게 열지 않은 채, 아무도 접속하지 않는 별도 주소에서 시험했습니다. 열두 개 질문을 던졌습니다. 기계는 통과했습니다 — 인용 카드가 나왔고, 인용문은 원문과 글자 그대로 같았습니다.
인용은 13건 나왔습니다. 그중 한국어는 0건이었습니다.
종전에는 AI가 원전을 한국어로 풀어 써 주었기 때문에 보이지 않던 상태였습니다. 그리고 표기도 사실이 아니었습니다.
여기서 저희는 전환을 보류했습니다. 이 상태로 켜면 정확성을 위해 만든 기능이 오히려 눈에 보이는 품질 저하를 만듭니다.
고친 방식
표기를 문서에 적힌 등급이 아니라 본문에 실제로 쓰인 글자로 정하게 했습니다. 그리고 확인하지 못한 저자에는 이름을 붙이지 않기로 했습니다.
위에 실은 바로 그 세 인용에 고친 코드를 다시 돌린 결과입니다.
| 고치기 전 표기 | 1차 수정 적용 뒤 | 인용 여부 |
|---|---|---|
| 소크라테스, 『국가』 국가 208 (국역) | 『국가』 208 (원문(영어)) | 나가지 않음 |
| 공자, 『孝經』 孝經鄭注疏/02 (원전) | 『孝經 (효경)』 (한문 원문) | 나가지 않음 |
| 원효, 『발심수행장』 wonhyo_balsim_suhaeng_jang (원전) | 『발심수행장(發心修行章)』 (한문 원문) | 나가지 않음 |
셋 다 이제 화면에 나가지 않습니다. 한국어가 아니어서 인용 자격을 잃기 때문입니다. 나간다 해도 잘못된 저자 이름과 내부 파일 이름은 사라졌고, 언어는 본문에 실제로 쓰인 글자로 적힙니다.
| 사례 | 해결된 것 | 아직 남은 것 |
|---|---|---|
| 『국가』 | 현자 이름·저작 이름 중복 정리 | 내부 조각 순번 “208” · “원문(영어)” 표기의 확정 |
| 『효경』 | 내부 경로 孝經鄭注疏/02 제거 | 번역·저자 귀속의 사실을 조각에 적는 일 |
| 『발심수행장』 | 내부 파일 이름 제거 | 원전 판본·정식 위치의 사실을 조각에 적는 일 |
다만 둘은 그대로입니다. 『국가』 뒤의 “208”은 여전히 남아 있습니다 — 뒤에서 다시 이야기할, 저희가 이번 수정에서 만든 결함입니다. 그리고 “원문(영어)”라는 표기도 아직 확정이 아닙니다. 플라톤의 『국가』 원어는 그리스어이므로, 이 자료가 영어 번역본으로 확인되면 표기는 “영어 번역”이어야 합니다. 지금 코드는 무슨 글자인지(언어)만 보고 원문인지 번역인지(역할)까지 단정하고 있어, 이 두 축을 분리하는 것이 다음 수정입니다.
정정 이력 — 이 문서 초안의 “수정 후” 예시가 실제 출력이 아니라 테스트용 문장임을 발견해 공개 직전에 배포를 중단했습니다. 이후 실제 운영 출력 세 건에 현재 코드를 다시 적용한 결과로 교체했습니다. 그 과정에서 내부 조각 번호 “208”이 여전히 남는 결함도 발견해 함께 적었습니다.
추기(같은 날) — 위의 남은 둘을 2차 수정으로 코드에 반영했습니다. 저본 확인 결과 『국가』는 그리스어 원문이 아니라 영어 번역본(역자 확인)이었고, 2차 수정 뒤 같은 자료는 “『국가』 (번역)”으로 표기되며 “208”은 사라집니다. 이 코드는 2026-08-17 부터 라이브에서 돌고 있습니다 — 다만 위 세 자료는 한국어가 아니라 어차피 인용되지 않습니다.
그래서 전부 셌습니다
표본이 아니라 전수로, 문장 한 조각씩.
인용 후보 문서를 한 건도 빼지 않고 읽어 3,044,020개 조각으로 나누고, 조각마다 인용해도 되는지를 판정했습니다. 판정에는 서비스가 실제로 쓰는 코드를 그대로 썼습니다 — 검사용으로 따로 만들면 검사와 서비스가 어긋나기 때문입니다.
| 물음 | 답 |
|---|---|
| 지금 인용할 수 있는 조각은 | 920,502 (30.2%) |
| 최종 기준을 다 지키는 조각은 | 0 |
| 저자가 조각에 적혀 있는 것은 | 0 |
| 이용조건이 조각에 적혀 있는 것은 저작 단위로는 116건 전수 확인 완료 — 아래 참조 | 0 |
| 출처 위치가 진짜인 조각은 | 1,325 (0.1%) |
| 번역이 아예 없는 저작은 | 33종 |
이 표는 자랑이 아닙니다. 이 표를 갖고 있다는 것이 자랑입니다.
측정이 없으면 보이지 않는 것들
넉 달간 아무도 부를 수 없던 원전 1,121건. 네 사상가의 자료를 저장해 검색 색인까지 만들어 두고, 정작 그 현자를 서비스에 등록하지 않았습니다. 부를 수 없는 이름은 검색되지 않습니다.
| 사상가 | 문서 | 조각 | 이미 한국어 |
|---|---|---|---|
| 주희 | 323 | 34,917 | 17,203 |
| 순자 | 300 | 23,789 | 6,918 |
| 막스 베버 | 262 | 5,119 | 0 |
| 묵자 | 236 | 13,966 | 5,034 |
| 합계 | 1,121 | 77,791 | 29,155 |
세는 도구가 사람이 손으로 적은 명단을 기준으로 삼고 있었기 때문에, 명단에 없는 것은 세어지지도 않았습니다. 지금은 자료에 실제로 나타난 이름을 전부 모은 뒤 등록 상태와 대조합니다.
가짜 위치 표기 97.9%. 「『사서집주』 68」의 68은 장절 번호가 아니라 자료를 잘라 넣을 때 붙은 일련번호였습니다. 저희가 이번에 만든 검사는 파일 이름 같은 내부 값은 걸러 냈지만, 숫자는 통과시켰습니다. 파일 이름은 봐도 내부 값인 줄 알지만 숫자는 진짜 위치처럼 읽힙니다 — 그래서 더 나쁩니다.
| 위치 표기 | 조각 | 비율 |
|---|---|---|
| 일련번호 — 진짜 위치가 아님 | 900,833 | 97.9% |
| 없음 — 생략됨 | 18,344 | 2.0% |
| 진짜 편명 | 1,325 | 0.1% |
이 결함은 저희가 이번에 만든 것이고, 시험 코드가 그것을 옳은 동작으로 굳혀 두기까지 했습니다. 다행히 되살릴 수 있습니다. 진짜 편명은 한문 원문 쪽에 100% 남아 있습니다. 새로 구할 일이 아니라 옮겨 붙일 일입니다.
서로 다른 두 데이터베이스가 정말 같은 자료를 갖고 있는지도 이번에 처음 확인했습니다. 프로그램이 갈라지는 것은 늘 비교해 왔지만 자료를 맞춰 본 적은 없었습니다. 문서 번호와 순서를 배제한 내용 지문이 완전히 일치했습니다.
가장 어려운 것은 번역이 아니라 “누구의 말인가”
고전은 대개 한 사람이 쓴 책이 아닙니다.
『사서집주』 한 권에는 이런 것들이 함께 들어 있습니다.
『순자』 저본에는 본문과 전통 주석이 섞여 있고, 『묵자』는 묵자 개인의 발화와 묵가 학파의 전승이 함께 실린 편찬물입니다. 검색으로 풀리지 않습니다. 저작마다 사람이 읽고 판정해야 합니다.
그래서 판정 항목을 정했습니다 — 저자를 어느 단위로 말할 수 있는지(책 전체인지, 구간별인지, 복합인지), 화면에 그대로 써도 되는 표현은 무엇인지, 이 자료를 그 사상가의 1인칭 발화 근거로 써도 되는지, 원문을 그대로 보여 줄 권리가 있는지, 번역이 검수를 거쳤는지.
그리고 145종을 전부 판정했습니다
표본이 아니라 전부입니다. 그 결과가 이렇습니다.
| 판정 | 저작 | 해당 조각 |
|---|---|---|
| 책 전체에 한 저자를 붙일 수 있다 | 73 | 241,004 |
| 구간별로 나눠야 한다 | 43 | 582,610 |
| 복합 귀속으로만 말할 수 있다 | 28 | 95,980 |
| 저자를 정할 수 없다 | 1 | 908 |
| 구분 | 저작 | 근거 |
|---|---|---|
| 공공데이터 개방분 — 제한 없음 | 45 | 한국고전번역원 한국문집총간·고전원문, 독립기념관 원문정보 |
| 보호기간 만료 원전 | 44 | 저작자 사후 70년 경과 — 위키문헌·Project Gutenberg 등, 원문 텍스트만 수록 |
| 저희가 직접 만든 것 | 21 | 자체 국역·해설, 제작 이미지(초상 35·표지 74) |
| 출처표시·비영리·동일조건 (원효 저서) | 6 | 동국대 ABC 한국불교전서 — 조건 이행 중 |
| 이용조건을 확인하지 못한 것 | 0 | 상업적 이용·변경이 금지된 유형도 0건 |
| 판정 | 저작 | 해당 조각 |
|---|---|---|
| 검수 기록 없음 | 93 | 900,833 |
| 원문이 한국어이거나 현대어역 — 판정 보류 | 14 | 19,287 |
| 번역이 없거나 해당 없음 | 38 | 382 |
| 검수 완료 | 0 | 0 |
기준을 낮추면 오늘 당장 920,502건을 인용 후보로 내보낼 수 있습니다. 저희는 145저작을 전부 판정한 뒤, 최종 통과를 0건으로 정했습니다.
판정을 못 해서가 아닙니다. 확인할 수 없는 것을 확인했다고 쓰지 않기 위해서입니다. 92만 건을 내보내는 기술보다, 0건에서 멈출 수 있는 검증 체계가 더 어렵습니다. 남은 것은 저자 귀속·번역 검수·위치 세 가지입니다.
권리는 따로, 이미 정리했습니다
권리 판정에서는 원저작의 보호기간과, 지금 우리가 가진 전자 텍스트의 이용조건을 따로 봤습니다. 고전 자체가 공공영역이라 해도 그것을 입력·교감·번역해 배포한 쪽의 조건은 별개이기 때문입니다. 서비스에 실린 저작물 116건을 한 건씩 원출처 고지에 대조했고, 화면과 이용조건 고지를 촬영해 증빙으로 남겼습니다.
그 과정에서 저희 표기가 틀린 것을 먼저 찾아냈습니다. 근거 없이 「공공누리」라고 적어 온 자료가 있었고, 원효 저서는 실제로 공공누리가 아니라 출처표시·비영리·동일조건 라이선스였습니다. 표기만 고치지 않고 한국고전번역원 자료 6권은 저본 자체를 공공데이터 개방분으로 교체하고 한국어 국역을 직접 새로 썼습니다. 원효 저서는 원문을 그대로 싣고 국역을 나란히 두어 원저작을 고치지 않으며, 열람에 대가를 받지 않아 비영리 조건 안에 있습니다.
그런데도 인용은 열리지 않습니다. 권리는 사람이 문서로 확인했지만, 그 사실이 아직 기계가 읽는 자리에 적혀 있지 않기 때문입니다. 시스템은 「어딘가에 확인해 둔 것」을 근거로 삼지 않습니다 — 조각마다 붙어 있는 사실만 봅니다. 사람이 아는 것과 시스템이 아는 것을 같은 것으로 치는 순간, 저희가 막으려던 일이 다시 시작됩니다.
이 판정을 기계가 읽는 대장으로 남겼습니다. 저작마다 귀속·권리·번역· 위치·막는 사유·쓰기 가능 여부를 따로 적었고, 같은 원자료에서 다시 만들면 바이트 단위로 같은 대장이 나옵니다. 다음 사람이 이 판단을 처음부터 다시 하지 않아도 됩니다. 이 기록이 쌓이는 것이 저희가 만드는 자산입니다.
다음에 할 것 — 그리고 아직 안 된 것
무엇이 남았는지 세어 둔 이 목록 자체가 자산입니다. 그래서 그대로 공개합니다.
판정은 끝났습니다. 남은 것은 판정 결과가 “확인 불가”로 나온 것들을 실제로 확인 가능하게 만드는 일입니다. 그것은 검색이나 코드로 되지 않습니다.
- 검증 장치는 라이브에서 돌고 있고, 통과한 인용은 0건입니다. 답변은 정상이며 현자의 관점은 그대로 나갑니다 — 다만 서버가 확인하지 못한 원전은 인용 카드로 나가지 않습니다
- 이용조건은 조각마다 적어 넣었습니다 — 다만 전부는 아닙니다. 인용 후보의 98.9%에 붙였고(920,502건 중 미확인이 10,526건으로 줄었습니다), 남은 것은 확인서가 덮지 않는 미공개 저작 19종입니다
- 저자 귀속은 아직 한 조각에도 적히지 않았습니다. 단일 귀속이 가능한 73종은 적을 준비가 됐지만, 적재 전까지는 이것이 전량을 막는 사유입니다
- 번역 검수가 0건입니다. 기계가 채운 번역은 생성 기록만 있고 검수 기록이 없습니다 — 사람이 원문과 대조해야 합니다
- 복합 저작을 저자별로 나눠야 합니다. 구간 분리가 필요한 저작이 43종, 복합 귀속으로만 말할 수 있는 것이 28종입니다
- 번역이 없는 저작 33종. 아래 표가 그 목록의 머리입니다
- 위치 표기 결함과 언어·역할 표기 결함은 고칠 규칙을 코드에 넣었고, 그 코드가 지금 라이브에서 돌고 있습니다. 다만 진짜 위치(편명·장절)를 자료에 채우는 일은 남아 있습니다
| 저작 | 조각 |
|---|---|
| 장자 남화진경 | 66,577 |
| 아퀴나스 신학대전 (1부·2부 전후) | 108,138 |
| 벤담 전집 | 53,543 |
| 밀 전집 | 26,879 |
| 애덤 스미스 전집 | 22,042 |
| 흄 전집 | 16,415 |
| 효경 | 10,685 |
| 33종 합계 | 393,712 |
| 채워야 할 사실 | 해당 조각 | 판정 결과 |
|---|---|---|
| 실제 저자 | 920,502 | 단일 귀속 가능 73종 · 나머지는 분리 또는 복합 |
| 이용조건 | 920,502 | 저작 단위 116건 전수 확인 완료(미확인 0) — 조각 단위 적재만 남음 |
| 번역 검수 여부 | 863,604 | 검수 완료 0종 |
| 원문·번역 구분 | 41,687 | 적재 정정 |
| 사람이 읽는 위치 | 18,344 | 적재 정정 |
그래서 해자란 무엇인가
처음의 질문으로 돌아갑니다.
원전은 해자가 아닙니다. 검색도 아닙니다. 둘 다 누구나 며칠이면 갖출 수 있습니다.
이 시스템의 해자는 92만 건의 인용이 아닙니다. 92만 건을 모두 검사한 뒤 0건만 통과시킨 기준과 기록입니다.
저희가 가진 것은 원전이 아니라, 원전에 대해 알아낸 것들입니다.
어디가 읽히지 않는지, 어느 표기가 거짓인지, 누구의 말인지 아직 모르는 구간이 어디인지, 그리고 실패했을 때 그것이 화면에 드러나게 하는 장치입니다.
같은 사고는 누구에게나 일어납니다. 저장 규격은 언제든 어긋나고, AI는 언제든 지어내고, 자료는 언제나 생각보다 지저분합니다. 다른 것은 그것을 며칠 만에 아느냐, 넉 달 뒤에 아느냐, 아니면 끝내 모르느냐입니다.
이것을 복제하려면 원전을 내려받는 것으로는 안 됩니다. 같은 실패를 겪고, 같은 측정을 만들고, 저작 하나하나에 대해 같은 판정을 내려야 합니다. 그 시간이 해자입니다.
그리고 그 시간을 견디는 이유는 하나입니다. 휴담에서 어떤 구절을 읽었을 때, 그것이 정말 그 사람이 한 말인지를 저희가 답할 수 있어야 하기 때문입니다.