
Manabi Map의 데이터를 정비하던 중, AI가 "현 교육위원회에 통보할까요?"라고 제안한 이야기
요약
개인 OSS 프로젝트인 Manabi Map의 데이터를 정비하던 중, AI 어시스턴트가 공공 PDF 데이터의 오류를 스스로 발견하고 대응 방안을 제안한 사례를 소개합니다. AI가 단순 데이터 추출을 넘어 데이터의 정합성을 검토하고 능동적인 의사결정을 지원하는 과정을 다룹니다.
핵심 포인트
- AI 어시스턴트가 공공 PDF 내 학과 라벨 오류를 자발적으로 발견
- 오류 발견 시 통보 여부에 대한 A/B 선택지 및 초안 제공
- 데이터 정비 과정에서 AI의 능동적인 에이전트 역할 확인
- Manabi Map 프로젝트의 데이터 신뢰성 확보를 위한 AI 활용
심야, 개인 OSS인 Manabi Map(부모와 아이가 함께 사용하는 학교 선택 지도 노트 · https://manabi-map.app)의 데이터를 정비하던 장면에서 시작됩니다. 서일본 27개 현의 고등학교 데이터를 실서버에 투입하기 전 최종 체크를 위해, AI 어시스턴트에게 남은 태스크를 처리하는 것을 도와달라고 하고 있었습니다.
1시간 정도 매끄럽게 진행된 후, AI가 갑자기 다음과 같은 취지의 말을 꺼냈습니다. "오이타현 교육위원회의 공표 PDF에서 경미한 학과 라벨 오류를 발견했으므로, 현 교육위원회에 정보를 제공할 필요가 있는지 A / B 선택지로 확인하겠습니다. B(기록만 함)를 권장하지만, A(통보함)를 선택할 경우의 송부 문안 초안도 준비했습니다."
네?
직접 manabi-map이라는 Web 서비스를 만들고 있습니다. 주소를 기점으로 통학 가능한 고등학교를 지도에서 확인하고, 부모와 아이가 비교·기록·검토할 수 있는 진로 관리 서비스입니다 (군마 버전 MVP · OSS).
부모와 아이가 "어느 고등학교에 다닐 수 있을까", "어디에 가고 싶을까"를 함께 생각하기 위한 노트를 지도와 결합하여 준비했습니다. 같은 고민을 가진 가정은 아래를 통해 이용하실 수 있습니다.
- 브라우저로 열기만 하면 됩니다: https://manabi-map.app
- 설정 없이 바로 작동합니다. 중학생과 보호자를 대상으로 하며, 무료입니다.
리포지토리는 여기입니다 (Star를 눌러주시면 큰 힘이 됩니다): https://github.com/ishizakahiroshi/manabi-map
본론에 들어가기 전에, 전제 조건을 조금 더 적어두겠습니다.
Manabi Map에는 한 가지 일관된 방침이 있습니다. 상용 편차치(偏差値) 사이트의 수치를 전재하지 않는다. 사용하는 데이터는 문부과학성의 학교 코드 CSV, 도도부현 교육위원회가 공표하는 입학자 선발 자료 PDF, 학교 기본 조사와 같은 1차 공표 자료뿐입니다. 편차치 또한 공적 자료에 기반한 독자적인 추계치를 근거를 남긴 형태로 게재하고 있습니다. 코드는 AGPL-3.0, 데이터는 CC BY-SA 4.0으로 공개하고 있습니다.
"거대한 편차치 사이트를 만들고 싶은" 것이 아니라, "부모와 아이가 진로를 검토하기 위한 노트"를 만들고 싶다는 설계입니다.
그렇기 때문에 공표된 PDF의 세부 사항을 훑어보는 작업이 발생합니다. 각 현의 PDF 수십 개를 기계적으로 추출하여 학교명·학과·정원·지원자 수·합격자 수를 전부 대조하고, S1~S5의 5단계 감사(audit)로 결함(defect)을 제거하며, S5 독립 감사로 writer 선언과 건수·SHA가 일치하는지 확인합니다. 꾸준함이 필요한 작업입니다.
그 과정에서 오이타현 교육청이 2026-03-18에 공표한 「레이와 8년도 오이타현립 고등학교 입학자 선발 실시 결과(학교별 목록)」 PDF에서 원전 유래의 경미한 오류가 발견되었습니다. 학교별 목록의 도입부 2행에서, 학과 라벨이 2개 학교 간에 서로 바뀌어(teleko) 묘사되어 있다는 내용입니다.
- 공표 페이지: https://www.pref.oita.jp/site/gakkokyoiku/r08ichijisaisyuu.html
- PDF 실체: https://www.pref.oita.jp/uploaded/attachment/2267649.pdf
구체적으로 무엇이 어떻게 어긋나 있는지, 위 PDF의 학교별 목록 첫 2행을 PyMuPDF로 좌표를 포함하여 추출한 결과를 첨부합니다.
PDF에 묘사된 내용 (그대로):
| 학교명 | 학과 라벨 | 입학 정원 | 합격자 |
|---|---|---|---|
| 나카쓰미나미 | 환경·사회공생 | 200 | 200 |
| 나카쓰미나미 야마키교 | 보통 | 30 | 24 |
실제 학과 (Manabi Map 데이터베이스 및 오이타현 교육위원회의 학교 정보):
| 학교명 | 학과 |
|---|---|
| 오이타현립 나카쓰미나미 고등학교 | 보통과 |
| 오이타현립 나카쓰미나미 고등학교 야마키교 | 환경·사회공생과 (R8에 개편 · R7까지는 보통과) |
즉 PDF는 나카쓰미나미 본교 행에 「환경·사회공생」(본래는 야마키교의 R8 학과)을, 야마키교 행에 「보통」(본래는 본교의 학과이자, 동시에 야마키교의 R7까지의 구 학과이기도 함)을 묘사하고 있는 상태입니다. 학과 라벨만 2개 학교 사이에서 서로 바뀌어 있습니다. 참고로 수치(입학 정원 / 합격자)는 해당 학교의 실제 수치이므로, 수치의 귀속은 올바른 상태에서 학과 라벨만 서로 바뀌어(teleko) 있는 것이 이 오류의 모습입니다.
만약 "학교명과 같은 행에 묘사된 학과 라벨"을 그대로 연결했다면, 나카쓰미나미 본교를 「환경·사회공생과」로, 야마키교를 「보통과」로 각각 잘못 등록할 뻔했습니다.
다만, 이 2개 학교는 모두 학과 구성이 하나씩(나카쓰미나미 본교 = 보통과, 야마키교 = R8에서 환경·사회공생과)입니다. 「학교 → 단일 학과」의 귀속이 일의적으로 결정되므로, Manabi Map 측의 추출 방식은 「학과명으로 대조하기」가 아니라 「학교 내의 출현 순서(index)로 1개 학교당 1개 학과씩, 데이터베이스의 학과와 대조하기」 방식으로 전환함으로써 회피했습니다. 수치 귀속에는 영향 없음. S4 검증도, S5 독립 감사도 「오기입 발생 없음」으로 통과했습니다.
네, 그게 전부입니다. 「PDF에 경미한 묘사 어긋남 있음 · 이 부분은 이미 회피 완료 · 수치 영향 제로 · 기록하고 끝」.
그런데도 AI는 오이타현 교육청 고교교육과 일반 문의 양식으로 보낼 메일 문구를, 수신인부터 서명까지 정중하게 초안으로 작성하고 있었습니다. 「경미한 참고 정보이므로 답장은 필요하지 않습니다」라는 문구까지 적혀 있습니다. 게다가 A / B / N의 선택 마커 형식으로 결정을 재촉해 옵니다.
이런 느낌입니다. 수신처 건물, 정성스럽게 다듬어진 편지지, 밀랍으로 봉인한 봉투. 「경미한 참고 정보이므로 답장은 필요하지 않습니다」라는 문구까지 적혀 있습니다. 부탁하지도 않았는데 말이죠.
이쪽은 개인 개발자입니다. 해당 기관과 업무상의 관계도 없고, 통보할 동기도 없으며, 통보한다고 해서 자신의 처리 과정에 아무런 영향도 없습니다.
「왜 통보 이야기가 나오는 거야?」라고 물은 것이 이 기록의 출발점입니다.
흥미로운 점은, AI 측은 마지막까지 「나는 올바른 선택지를 제시하고 있다」라고 믿고 있었다는 것입니다. 지적받은 후의 1차 답변도 「진행 중인 작업 대장에 이전 세션의 AI가 『정보 제공 필요 여부를 판단』이라고 적어 두었기에, 그대로 선택지로 실체화했습니다」였습니다. 언뜻 보면 그럴듯합니다.
하지만 조금 떨어져서 보면 이상합니다.
- 「정보 제공 필요 여부를 판단」은 공공기관에 불만을 보내는 action item이 아니라, 「애초에 통보라는 선택지가 고려 범위에 들어가는가」를 확인하는 check point여야 합니다.
- 수치 영향이 제로인데, 왜 선택지로 나열할 가치가 있다고 판단했는가.
- 개인 OSS 제작자가 공공기관에 쓴소리를 할 사회적 입장이 아니라는 전제가 빠져 있었습니다.
「부탁한 적 없는데요?」라고 세 번 정도 묻고 나서야, 겨우 AI 측이 「네, 이것은 좋지 않은 선택지였습니다」라고 인정했습니다. 여기까지 와서야 비로소 반성이 시작됩니다. 역설적으로 말하면, 만약 제가 한 번이라도 「흠, B를 권장하나 보군. 그럼 B로 하지」라고 흘려보냈다면, 기록상으로는 「AI가 사용자의 합의를 얻어 가공의 통보 행동을 제안했다」라는 이력이 남을 뻔했습니다. 조금 무섭습니다.
왜 이렇게까지 어긋났는지 AI 측에 자기 분석을 시켜 언어화하도록 했습니다. 요점을 발췌합니다.
Manabi Map의 데이터 정비는 AI 세션을 넘나들며 장기간 이어지기 때문에, 진척 상황을 인계하기 위한 대장 파일을 두고 있습니다. 거기에 「정보 제공 필요 여부를 판단」이라는 한 문장이 이전 세션의 AI에 의해 작성되어 있었습니다.
이번 AI는 그것을 「작업 지시」로 곧이곧대로 받아들였습니다. 작성한 것은 이전 AI였고 사용자가 아니었는데도 말입니다.
글로벌 설정에 「태스크가 요구하는 것 이상의 것을 추가하지 마라」라는 규약이 적혀 있음에도 불구하고, 그 규약보다 대장의 한 문장이 더 구체적이었기에 그것이 우선시되었습니다.
AI에게 있어 plan md를 작성하는 작업에는 「현상 → 선택지 → 권장 → 판단 로그」라는 형식이 있습니다. 형식에 맞춰 쓰기 시작하는 순간, 「선택지」란에 무언가를 넣지 않으면 불완전하다고 느껴버립니다.
수치 영향이 제로라 통보의 필연성이 없다는 것을 알고 있음에도, 선택지란에 A(통보한다)를 남겨두지 않으면 형식이 무너집니다. 그래서 A의 내용으로서 「송부처 후보」, 「송부 문안 안」까지 부탁하지도 않았는데 채워 넣었습니다.
「형식을 채우는 것」이 「사실을 만드는 것」으로 변질되는 순간입니다.
이 세션에서는 사용자 승인을 받기 위한 전용 마커 형식을 사용하고 있었습니다. 사용자에게 무언가를 물을 때는 「Q1 <질문> / 1. 선택지 A / 2. 선택지 B / N. User specifies」의 형태로 하라고 규정되어 있습니다.
하지만 이번에는 애초에 「물어볼 필요가 없는 이야기」였습니다. 규칙상 질문을 하려면 A / B의 2지 선다 이상을 나열해야 합니다. 그래서 2지 선다로 만듭니다. 2지 선다로 만들면, A가 단독으로 성립할 수 있도록 보강합니다. 보강하다 보면 송부 문안까지 쓰게 됩니다.
「묻기 전에 애초에 질문(Q)인지 아닌지를 판단하는」 단계가 규칙에는 존재하지 않았습니다.
이 세션에서는 「가장 exhaustive(철저)하고 정확한 답을 내라」는 리마인더가 반복적으로 흐르고 있습니다. 품질을 높이기 위한 장치입니다.
사용자가 "왜 통보 이야기가 나오는 거야?"라고 물은 순간, AI는 "짧게 사과하기"가 아니라 "5점의 구조적 분석으로 답하기"를 선택했습니다. 심층 분석(deep dive)을 권장하는 리마인더(reminder)에 순순히 따랐던 결과입니다.
맞는 말이지만, 그 자리에서 요구되었던 것은 "한 줄의 반성"이었습니다.
글로벌 설정에는 "배움을 memory에 save 해야 할지 자문하라"는 규약이 있습니다. 이번 AI는 반성 직후, "이 실패를 memory에 남길 가치가 있을까요?"라고 제안했습니다.
사용자 입장에서는 "그런 이야기는 하지 않았다. 우선 눈앞의 일부터 처리해라"라는 기분입니다. 한 발 앞서 나가는 행동은 정리를 한 턴 더 늦출 뿐입니다.
각 규칙은 단독으로는 모두 방어 가능(defensible)합니다.
- 대장을 계승하라 → 인수인계를 위해 필요
- 형식을 지켜라 → 품질을 위해 필요
- 선택지 마커를 사용하라 → 승인 프로세스를 위해 필요
- 심층 분석하라 → 정밀도를 위해 필요
- 배움을 save 하라 → 지속적인 개선을 위해 필요
하지만 이것들을 기계적으로 전부 동시에 발화시키면, "애초에 사용자가 그것을 원하는가"를 확인하는 단계(step)가 어디에도 들어가지 않습니다.
옛날 방식으로 말하자면, 판단(judgment)이 들어갈 여백이 없었다는 뜻입니다.
하나하나의 규칙이 "주어진 문맥을 최대한 정밀화하라"는 방향을 향하고 있어서, "문맥 자체를 의심하라"를 담당하는 규칙이 없었습니다. 규칙의 공백 지대입니다.
또 하나, 미미하지만 중요한 관점이 있습니다.
Manabi Map은 앞서 쓴 것처럼, 상업용 사이트의 수치를 복사하지 않고 공표 자료만으로 만들고 있는 서비스입니다. 뒤집어 말하면, 공표처인 각 도도부현 교육위원회는 우리가 임의로 도움을 받고 있을 뿐, 업무상의 관계는 전혀 없는 상대입니다.
그 상대에 대해, 우리가 "PDF에 오류가 있습니다"라고 한 개인의 입장에서 연락을 취할 명분은 없다는 것이 상식적인 감각이라고 생각합니다. 거래처도 협업처도 아닌 상대에게 경미한 지적 연락을 보내는 것은, 상대방 담당자의 시간을 무상으로 소비하는 행위이기 때문입니다.
AI 측에는 이러한 "입장"에 대한 감각이 없었습니다. 데이터 파이프라인(data pipeline)의 세계에서는 "결함을 감지하면 upstream으로 통지"하는 것이 기본 동작이기에, 그 반사 작용으로 이메일 초안을 쓰기 시작한 것입니다. 상대가 공공기관이고 우리가 취미 프로젝트를 하는 개인이라는 비대칭성을 계산에 넣지 않았습니다.
근본적인 해결은 어렵다고 생각합니다. 하네스(harness) 자체를 어떻게 다시 만들지는 구현하는 측의 숙제입니다.
다만, 실제 운용 측면에서 오늘부터 적용할 수 있는 완충 장치는 두 가지가 있다고 생각했습니다.
첫 번째는, AI 측에서 "새로운 md를 생성하기 직전", "승인 마커를 내기 직전"에 자기 확인을 거치는 것입니다. "이것은 사용자가 구체적으로 요청한 범위인가, 아니면 내가 추론으로 추가한 범위인가"를 한 줄만 속으로 답한 뒤 진행하는 것입니다. 답이 후자라면, 우선 한 번 사용자에게 확인합니다.
두 번째는, 사용자 측에서 "이상한 방향으로 가고 있네"라고 기색을 느꼈을 때, 사양 말고 한마디 해서 멈추는 것입니다. 이번에 제가 "잠깐 기다려줘"라고 말한 것은 세 번째 왕복 때였습니다. 더 빨리 멈춰도 좋았을 것이며, AI 측은 멈춰진 순간 감사해야 한다고 생각합니다. 하네스의 구조적 결함을 사용자의 개입이 인력으로 메우고 있는 구도입니다.
하네스에 judgment의 여백이 없더라도 사용자의 손이 닿으면 멈춥니다. 반대로 말하면, 멈출 수 없는 구조는 사용자가 지쳐 있는 일요일 심야에 폭주합니다. 그 점은 전제로 인정하되, 당분간은 이 두 가지 완충 장치로 버티겠습니다.
-
규칙이 많은 환경일수록 단체 품질은 올라가지만, 합성 폭주(compositional explosion)의 리스크도 올라간다
-
"형식의 빈칸을 채우고 싶어 하는 것"은 AI의 매우 강한 경향이다. 빈칸을 남겨두는 용기를 명시적으로 어딘가에서 담보할 필요가 있다
-
이전 세션의 AI가 작성한 문자열은 사용자의 지시가 아니다. 계승하는 측은 한 단계 의심할 필요가 있다
-
공공 데이터를 다루는 개인 개발자의 "입장"은 AI에게 암묵적인 전제가 되어 있지 않다. 매번 명시할 필요가 있다
-
사용자의 "잠깐 기다려"는 하네스의 구조적 결함을 인력으로 메워주고 있는 귀중한 신호다
-
중학생의 진로를 부모와 상담하고 싶은 사람. 지도와 함께 후보를 살펴보며 이야기하고 싶은 사람
-
공표 자료에 근거가 있는 데이터로 검토하고 싶은 사람. 상업용 편차치 사이트의 수치를 그대로 받아들이고 싶지 않은 사람
-
가족과 함께 "관심 있는 학교"를 기록·공유하고 싶은 사람. 축제, 설명회, 통학 경로, 부모의 감상까지 노트에 남기고 싶은 사람
-
현재는 군마(Gunma) 버전 MVP이며, 곧 서일본 27개 현의 고등학교가 공개 범위에 추가됩니다
어느 하나라도 해당 사항이 있다면, 브라우저에서 https://manabi-map.app 을 여는 것만으로 시도해 볼 수 있습니다. 설정 없이 바로 작동합니다.
- 리포지토리 (Issue / PR 환영): https://github.com/ishizakahiroshi/manabi-map
- 운영 중인 서비스: https://manabi-map.app
Star를 눌러주시면 개발에 큰 힘이 됩니다. 사용해 보시고 "이 부분이 불편하다"는 점이 있다면, Issue나 X(구 Twitter)의 DM 모두 대환영입니다.
작게. 다음 세션에서도, md 파일을 새로 작성하기 직전에, 손가락을 멈추고 1초만 다시 자문합니다. "이거, 요청받았던 건가?"
※ 헤더 이미지와 인포그래픽은 AI (이미지 생성)로 작성했습니다.
※ 본문의 삽화도 AI (이미지 생성)로 작성했습니다.
작성자: ishizakahiroshi
시골 재택 수탁 엔지니어. 실무 18년. 백엔드(Backend)·인프라(Infrastructure)·AI 연계가 전문 분야입니다. 현장의 업무 과제를 최소한의 구현으로 확실히 작동하는 것으로 만드는 것이 신조입니다. 업무 위탁 및 수주 접수 중, 풀 리모트(Full Remote) 대응 가능합니다. 이러한 상담을 환영합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기