숙제를 풀 수 없는 AI 튜터를 만들다
요약
ADHD를 가진 자녀의 학습을 위해, LLM이 정답을 직접 제공하지 못하도록 설계된 독특한 AI 튜터 시스템 아키텍처를 소개합니다. 이 시스템은 교과서 기반 콘텐츠 파이프라인과 '정답을 질문으로 끝내게 하는' 엄격한 제약 조건을 통해 교육적 효과를 극대화하는 엔지니어링 접근 방식을 제시합니다.
핵심 포인트
- LLM이 정답을 직접 풀도록 허용하지 않는 구조적 아키텍처가 핵심입니다.
- 프롬프트는 답변을 질문 형태로 끝내게 하여, 최종 답안 유출을 원천 차단합니다.
- 콘텐츠 파이프라인은 페이지 스캔과 좁은 단일 작업 프롬프트를 결합하여 신뢰성을 확보했습니다.
- 교육학적 접근(Pedagogy)에 따라 '후크'와 연결된 종속성 그래프로 학습 내용을 구성합니다.
제 아들은 초등학교 2학년이고, ADHD가 있습니다. 계산은 할 수 있지만, 시중에 판매되는 트레이너 앱들은 이해도가 아니라 터치 횟수를 보상하고, 결국 매일 밤 추측으로 끝냅니다. 그래서 저는 우리만의 튜터를 만들었는데, 이건 아이의 실제 학교 교과서를 기반으로 합니다 (겉모습은 우주학교입니다: 미션이 Apollo 11 경로를 따르며, 컬렉션에 로켓 15개가 있습니다). 그리고 이 전체 아키텍처는 단 하나의 금지 사항을 위해 존재합니다. 바로 LLM이 문제를 풀도록 허용하지 않는 것입니다.
이 글은 저의 엔지니어링 이야기입니다: 모든 것을 형성하는 제약 조건, 콘텐츠 파이프라인, 데이터에 인코딩된 교수법, 그리고 놀라운 부분인 공책에 관한 내용입니다.
아키텍처를 형성하는 금지 사항
시중에 나와 있는 대부분의 AI 숙제 도우미들은 실제로 숙제를 풀어줍니다. 제 것은 그럴 수 없는데, 이건 단순히 정중한 시스템 프롬프트 때문이 아닙니다. 디자인 자체가 구조적이며, '정중함'에 의존하지 않습니다:
- 멘토 엔드포인트는 오직 과제 텍스트만 받습니다. 정답은 LLM 레이어가 절대 읽지 않는 테이블 안에 존재하므로, 유출될 것이 없고 해킹할 곳도 없습니다.
- 프롬프트는 모든 답변을 아이가 다음 단계로 나아갈 수 있는 질문으로 끝내야 합니다. 최종 답안이나 '정답은 ~입니다'라는 문구는 금지됩니다.
- 유사 예시 모드는 다른 숫자를 사용한 유사 문제를 통해 작동합니다. 이 예시의 정답을 언급할 수는 있지만, 원래 과제의 정답은 절대 언급하지 않습니다. 제 이야기에서 한 가지를 얻으신다면: 모델로부터 답을 분리하고, 질문으로 끝내는 규칙 주변에 프롬프트를 설계하세요. 코드로 검증 가능한 금지 사항은 프로 문장으로만 작성할 수 있습니다. 저는 전자의 방식을 신뢰합니다.
콘텐츠 파이프라인: 교과서가 진실의 원천입니다
숙제는 특정 교과서에서 나오기 때문에, 데이터셋도 그것을 문자 그대로 일치시켜야 합니다: 우리의 번호 매김 방식, 우리의 문구까지요. 그래야 아침에 선생님께 공책을 보여줄 수 있습니다. 저는 생성적 의역(generative paraphrase)을 금지하며, 파이프라인이 이를 강제합니다: 페이지 스캔 (PNG, 300 dpi) -> 좁은 프롬프트가 적용된 비전 모델:
좁은 단일 작업 프롬프트(Narrow one-task prompts)는 신뢰성이 높기 때문에, 제 파이프라인은 페이지를 조각조각 읽습니다. 제가 왜 이렇게 편집증적일까요? 첫 몇 주 동안 겪었던 실제 사례가 있습니다: 외부 에이전트가 한 페이지에 대해 다섯 가지 작업을 준비했고, 스캔본과 비교 검증하는 과정에서 하나가 플래그 처리되었습니다. 각도를 세는 작업에서 에이전트는 잘못된 그림을 선택하여 육각형에서 직각을 '찾았'지만, 실제 스캔본 상의 직각은 오각형에 속했습니다. 이 확인 절차가 없었다면 제 아들은 잘못된 사실을 암기하여 학원에 가져갔을 것입니다. 6주가 지났습니다: 두 권의 교과서에 걸쳐 22페이지, 117개의 연습 문제, 그리고 제가 임의로 만든 문구는 단 하나도 없습니다.
데이터에 인코딩된 교육학, 픽셀이 아닌 학습 방법론 (Pedagogy encoded in data, not in pixels)
제가 의존하는 방법은 오픈 러닝(open learn) 방식(amosblomqvist/learn 리포지토리)에서 가져왔습니다. 이해는 사실들의 더미가 아니라 연결된 종속성 그래프이기 때문입니다. 무조건적인 진리부터 먼저 제시하고, 파생 단계는 두 번째로 다루며, 모든 노드는 확립되기 전에 동기 부여되고, 이전 노드와 연결되며, 퀴즈를 통해 고정됩니다. 제 앱에서는 대략적으로 작업 스키마(task schema)에 존재합니다:
{
"text": "스캔본의 문구 그대로",
"hook": "이 기술이 왜 중요한지, 한 문장"
...
}
세 개의 필드가 교육을 수행합니다. 실제로는 '후크(hook)'가 동기를 부여합니다(
제 아들이 초등학교 1학년 때 깨달은 큰 사실이 있습니다. 반 아이들 중 절반에게는 문제가 산수 자체가 아니라 형식(formatting)이라는 것입니다. 선생님은 앱이 아니라 공책을 채점하십니다. 그래서 과제를 풀 때마다 앱이 모델 양식을 종이에 출력합니다. 네 칸짜리 여백에 빨간 줄, 11번째 셀에 날짜가 적히고, 세 칸 간격의 열들이 페이지 너비로 감싸지며, 파란색 잉크로 손글씨체로 되어 있습니다.
제 아들은 앱에서 풀면서 입력이 쉽고 피드백도 즉각적으로 받습니다. 그리고 나서 그 모델 양식을 따라 종이에 옮겨 적습니다. 숙제는 여전히 학교가 원하는 방식으로 제출되어야 하고, 이것은 협상의 여지가 없습니다.
의도적으로 지루한 기술 스택
React 18, TypeScript, Vite, Tailwind를 사용합니다. Express와 better-sqlite3, 쿠키 세션(cookie sessions), pm2, 그리고 nginx가 있습니다. 멘토 버튼 뒤에는 LLM이 작동합니다 (설명하기(Explain), 힌트(Hint), 유사 예시(Similar example); z.ai API를 통한 GLM 사용). 답변은 음성 합성(speech synthesis)을 통해 소리 내어 말해집니다. 콘텐츠는 위 파이프라인을 따라 IDE에서 에이전트에 의해 준비되며, 최종 출판은 사람이 승인합니다. 이는 제가 어른이 되어 만든 자동화 시스템과 같은 원칙입니다: 에이전트가 준비하고, 인간이 결정하는 것입니다.
이런 시스템이 희귀한 이유
저는 한 번에 충족되어야 하는 다섯 가지 조건이 있으며, 이 조합 자체가 드물다고 생각합니다:
- 게임화(gamification)로 PDF 위에 덧칠하는 방식이 아니라, 교수법 자체가 데이터 필드에 적용되는 것.
- 스캔 검증 기능이 있는 에이전트 콘텐츠 파이프라인이 필요한데, 이게 없으면 LLM은 일주일 만에 교과서를 환각(hallucinates)으로 만들어내기 때문입니다.
- LLM의 규율: 멘토가 모델 자체를 중심으로 설계되었으며, 정답은 모델로부터 분리되어 있습니다.
- 학교 표준 존중: 종이 공책도 여전히 제대로 보여야 합니다.
- 엔지니어 학부모인 제가 매일 저녁 시스템이 실패하는 것을 지켜보는 것입니다. 에듀테크(edtech) 시장은 거대하지만, 제 관점에서는 대부분 AI 루프가 없는 콘텐츠 플랫폼이거나 아이의 숙제를 대신 풀어주는 AI 솔버들입니다. 이 중간 영역, 즉 자신의 교과서로부터 학습하는 방법을 가르쳐주는 기계는 거의 비어 있습니다.
다음 단계
생활 멘토 키(live mentor key), 학교 프로그램이 진행됨에 따라 새로운 페이지가 추가되는 것, 그리고 주요 실험: 전체 학급을 위한 동일한 콘텐츠 모델을 구축하고 교사들이 공개 링크를 통해 진도를 지켜보는 것입니다. 만약 여러분도 자녀들을 위해 이와 비슷한 것을 만들고 있다면, 기꺼이 의견을 나누고 싶습니다. --- 본 기사는 AI의 도움(초안 작성 및 각색)으로 준비되었으며 출판 전 저자가 검토했습니다. 원래 게시된 곳: https://automata.sale/en/blog/ai-automation/space-academy-ai-tutor-from-a-textbook/ 태그: aiagents, edtech, llm, react
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기