한 텀을 돌고 나서 – walkthrough 후기

(이 글은 마인크래프트 AI주지스님 워크스루 1~7편에서 이어지는 글이다.)

워크스루로 시작한 이유

마인크래프트에 SLM으로 주지스님을 만들어 심어볼까 생각한 후, 처음엔 뭘해야 할지 몰라서 클로드에게
내가 이걸 해보고 싶은데, 왜 하고 싶은지 어떤 결과물을 원하는지 자원은 이미 내가 가진 걸 최대한 이용하는 방향으로 하고 싶다 등등을 구구절절 썼다.

그러자, 클로드는 일단 니가 가진 컴퓨터로 ollama를 깔아서 소형모델들이 돌아가는지부터 확인해 봐라, 그 다음엔 이걸 이렇게 테스트해 봐라.. 이런 식으로 한가지씩 순서대로 내가 확인해 봐야 할 것들을 알려줬다.
난 그 순서에 따라서 확인해보고 결과를 클로드와 정리하고, 그 결과에 따라 다음번 할 일이 정해지고.

클로드가 알려준 두 번째 확인해 볼 것-프롬프트에 수기로 참고자료를 질문과 함께 직접 넣어서 모델 크기별로 답을 어떻게 하는지 확인해 보라고 한 것-이 결국 RAG를 수기로 만들어 본 것과 같다는 걸 테스트 결과를 글로 정리하며 이해하고 나서야, 지금 내가 클로드와 워크스루를 하고 있구나 깨달았다.
워크스루는 감사(audit)를 할 때 본격적인 실증감사 등에 앞서 업무와 내부통제 프로세스를 파악하고 설계된 대로 실제 운영되고 있는지를 먼저 확인하기 위해 한 개의 실제 거래를 처음부터 끝까지 직접 따라가 보는 절차이다.

아.. 그래. 그렇게 미리 얕게라도 전체를 한번 빠르게 훑어보고 나면 내가 저걸 만들기 위해 어떤 개념을 알아야 하고 뭘 해야하는지, 그 중 내가 뭘 모르고 있는지, 그래서 뭘 더 깊이 파고 고민해야 하는지가 빠르게 정리되겠구나.
워크스루가 단순히 감사 기법으로서만이 아니라, 공부방법으로도 괜찮은 방법이겠구나 생각했다.
두꺼운 책부터 들고 있거나 강의부터 듣다가 이게 지금 내가 하려는 것과 어떤 관련이 있는 건지, 내가 지금 어디까지 한 건지 감을 잡지 못하고 포기하거나, 진도를 다 나간 후에도 이걸 어디에 어떻게 써먹어야 할지 맹한 경우.
겪어보지 않았나? 난 꽤 겪어봤다.

이번 워크스루에서는,
내 서피스프로8에서 소형 모델인 8B 모델까지는 어느 정도 돌아간다는 걸 확인해 본 것을 시작으로,
반야심경 15구절을 소절로 나누고, 임베딩의 개념을 이해하고, 1B와 3B와 8B에게 같은 질문을 던져보고..
그렇게 하나씩 따라가다 보니 어느새 RAG 파이프라인 하나가 완성돼 있었다.

오늘은 이 워크스루 한 텀을 돌면서 뭘 알게 됐는지, 다음 계획은 뭔지 정리하려고 한다.

이번 워크루에서 배운 것들, 그 큰 얼개

검색-조립-생성, RAG의 뼈대

질문이 오면 자료창고에서 가까운 구절을 찾고(검색),
그 구절과 질문을 합쳐서 프롬프트로 만들고(조립),
그걸 모델에게 넘겨 답을 받는다(생성).

이게 RAG다.

이걸 손으로 한 번 해보고 나니, 반야심경 해설을 프롬프트 창에 직접 복붙하고 “이걸 참고해서 설명해줘”라고 했던 게 바로 저 2단계였다는 걸 알았다.
RAG프로그램은 그 귀찮은 복붙을 자동으로 해주는 것뿐이다.

환경 세팅에서 생각보다 많이 헤맸다.
파이썬이 실제로는 설치가 안 되어 있었던 것도, 포트 충돌도, 폴더 구조도 – 코드를 아는 것과 내 컴퓨터에서 실제로 돌아가게 만드는 건 다른 문제였다.

1B, 3B, 8B — 크기가 답을 갈랐다

같은 질문, 같은 자료, 같은 지시문을 주고 모델 크기만 바꿔봤다.
참고자료에 있는 내용으로만 답하고 없으면 모른다고 답하라 했는데, 결과는 확실히 갈렸다.

  • 1B: 다국어가 섞여 나오고, 지시를 무시했다
  • 3B: 미세한 창작이 끼어들었다 (“오른쪽과 왼쪽 모두에” 같은, 참고자료에 없고 뜻을 알 수 없는 말)
  • 8B: 지시를 구분해서 따르고, 그나마 신뢰할 만했다

여기서 제일 중요했던 건 사실 답변의 정확도가 아니라 “모른다”고 말할 줄 아는가였다.
작은 모델일수록 자기가 뭘 모르는지도 몰랐다.
소크라테스가 너 자신을 알라고 했던 그 얘기를, AI를 통해 다시 보게 될 줄은 몰랐다.

RAG는 만능이 아니었다

RAG로 근거자료를 줘도, 8B가 그걸 위트있게 표현하는 능력 자체는 그대로 8B의 한계였다.
꽤.. 아쉬웠다.
근거자료를 주는 것과 그걸 잘 활용하는 능력은 다른 층위의 문제였다.

이걸 구분해서 정리하면.

8B를 더 똑똑하게 만드는 방법(=파인튜닝)
vs. 8B가 똑똑해진 것처럼 보이게 컨닝페이퍼를 잘 만들어주는 방법(=RAG)

RAG는 추론 시점 개입이고, 파인튜닝은 학습 시점 개입이다.
둘 다 “큰 모델의 능력을 작은 모델에게 넘겨준다”는 철학은 같은데,
RAG는 모델은 그대로 두고 참고자료만 바꾸는 거라 모델이 타고난 표현력 자체는 못 건드린다.

데이터 품질

기본 개념들을 이해한 후 고민하게 된 다음 지점은, “자료를 어떻게 창고에 쌓을 것인가”였다.
원문을 어떤 단위로 끊을지, 어떤 번역본을 쓸지, 태그는 어떻게 붙일지..
결국 이게 흔히 말하는 “데이터 품질”의 문제이다.

자료가 15개면 사람이 다 태그를 달아도 되는데, 나중에 자료가 15,000개가 되면 그럴 수가 없다.
그래서 실습해본 방법이 이거다.

임베딩으로 비슷한 것끼리 자동으로 묶고(클러스터링),
각 그룹의 대표 몇 개만 사람이 보고 이름을 붙이면(태깅),
나머지는 그 이름을 자동으로 상속받는다.

이 부분은 클로드가 간략하게 샘플을 만들어줘서 그걸 보고 이해만 하고 넘어가서, 내 몸과 머리로 흡수하진 못했다.
앞으로 더 많은 실제 데이터로 구현해보며 추가적인 이해가 필요한 부분이다.

임베딩, 오해하면서 이해하기

“글자를 숫자로 바꾸는 것”이라길래 아스키코드 같은 건가 싶었다. 아니었다.
아스키코드는 글자 하나하나를 정해진 숫자로 치환하는 것 뿐이고,
임베딩은 학습된 AI모델을 통과시켜 입력된 텍스트(문장, 구절, 단어) 전체의 의미를 숫자 벡터로 압축하는 것이었다.
“관자재보살”과 “관세음보살”은 의미가 가까우니 벡터도 가깝고, “관광버스”의 “관”은 첫글자가 같아도 의미가 다르니 벡터도 멀다.

이 벡터가 384개의 숫자로 이뤄졌는데, 384라는 숫자를 처음엔 “가중치 개수”라고 생각했다.
이것도 아니다.
그건 출력층 노드 개수였고, 진짜 가중치는 노드와 노드 사이의 연결선 개수라서 훨씬 많다.

더 깊이 공부할 지점들

이번 텀에서 “이건 나중에 제대로 봐야겠다” 싶었던 지점들을 모아보면 이렇다.

  • 왜 하필 코사인 유사도인가.
    질문과 가까운 구절을 자료창고에서 찾을 때 코사인 유사도를 사용했다. 방향이 비슷하면 의미가 가깝고, 내적(dot product)이 그 방향성을 재는 데 적합하다는데, 그건 선형대수를 공부해야 이해할 수 있겠다.
  • 파라미터 수와 능력의 관계.
    1B가 왜 그렇게 지시를 못 따르는지 “작아서”라고 뭉뚱그렸는데, 정확히 어떤 능력이 어느 규모에서 나타나는지(emergent ability)는 논문을 봐야 제대로 이해될 것 같다.
  • RAG로 안 되는 것, 학습 시점 개입으로 되는 것. 8B의 표현력 한계를 자료만으로 못 넘는다는 걸 확인했으니, 그럼 학습 시점 개입은 구체적으로 어떻게 하는 건지 질문이 남는다. 최예진 교수님의 ProRL은 이 중 강화학습이라는 한 갈래를 보여주는 논문이고(원리를 이해하는 이론 공부), 실제 주지스님에게 적용할 방법은 아마 SFT(지도학습 방식 파인튜닝) 쪽이 될 것 같다. 학습시점에 개입하는 서로 다른 이 두가지 방법을 더 깊이 공부해 봐야겠다.
  • 양자화가 만드는 손실과, 모델 크기가 만드는 한계를 구분하기.
    로컬에서 4비트로 양자화된 모델을 돌리다 보니, 지금 보이는 문제가 “작아서 그런 건지” “압축돼서 그런 건지” 아직 명확히 구분이 안 된 부분이 있다. 확인해 봐야지.

다음 할 것

다음 순서로는 아래의 세 가지를 공부하고 구현해 볼 계획인데, 각각의 특성에 맞게 순서와 리듬을 살려 진행하려고 한다.

① 먼저, 짧게 — 자료 정리법 정하기
위크스루에서 쓴 방식(소절 단위로 끊고, 임베딩하고, 유사도로 검색)은 RAG의 여러 방법 중 가장 단순한 한 가지였다는 걸 알았다. 내가 앞으로 매일 조금씩 쌓아갈 불교 관련 자료와 생각들은 반야심경처럼 완결된 텍스트랑 성격이 달라서, 끊는 단위나 검색 방식, 계속 쌓이는 자료를 관리하는 방법을 먼저 정해야 할 것 같다. 검색이 가장 효과적이고 효율적일 수 있는 방법이 뭘까, 이걸 먼저 정리하고 넘어갈거다.

② 그 다음, 매일 — 루틴 + ProRL 병행
정한 방법대로 매일 불교책을 조금씩 읽고, 일기 쓰듯 네이버에 정리하고, 자료창고에 쌓아간다. 그 틈틈이 ProRL 논문을 이어서 읽는다. 이론(ProRL)과 실습(자료 쌓기)을 큰 덩어리로 나눠서 하지 않고, 짧은 주기로 번갈아 하는 게 지금까지 해온 방식이랑 잘 맞는다.

③ 짬을 봐서, 블록으로 — 마인크래프트 건축
건축은 매일 조금씩보다는 날을 잡아서 몰아서 하는 게 더 적합한 일이라, 루틴이 자리 잡힌 뒤 틈틈이 진행한다. 여기서 “챗봇 vs 에이전트” 개념도 같이 정리해볼 생각이다 — 코드를 짜주는 챗봇과, 스스로 짓고 스스로 고치는 에이전트는 뭐가 다른지, 내 사찰 건축엔 뭐가 맞을지.
그리고 이 루틴이 자리 잡히면, 반야심경 실습용 RAG 파이프라인을 실제 자료창고로 확장하고, 안정성을 보완하고(모델 자동 다운로드, temperature 조정, 사후검증), 마인크래프트 NPC 이벤트에 이어붙이는 작업으로 넘어간다. 여기서부터가 진짜 “주지스님을 절에 앉히는” 단계다.

한 텀을 돌고 나니, 지도가 좀 보여서 막막하지는 않게 됐다.
공부하고 싶은 부분도 생기고, 다음에 뭘 할지도 보이고.
계속 가보자.

Q. 워크스루(walkthrough)란 원래 어떤 기법인가요?

워크스루는 제가 회계감사에서 활용하던 절차입니다. 본격적인 실증감사에 앞서, 업무와 내부통제 프로세스를 미리 파악하기 위해 실제 거래 하나를 처음부터 끝까지 직접 따라가면서 “전체 프로세스가 실제로 어떻게 돌아가는지” 확인하는 방법입니다.

Q. 워크스루를 공부법으로 쓰면 어떤 점이 좋나요?

두꺼운 책이나 강의부터 시작하면, 그것이 해당 프로젝트를 수행하고 최종 결과물을 만드는 전체 과정 중 어디에 해당되는 건지 감을 못 잡고 지레 포기하기 쉽습니다.
이와 달리, 워크스루는 만들고 싶은 결과물을 일단 처음부터 끝까지 얕게라도 한 번 끝까지 따라가 보는 겁니다. 그 과정에서 결과물을 만들기 위해서 필요한 개념이나 기술이 뭔지, 그 중 내가 뭘 모르는지, 뭘 더 깊이 파야 하는지가 자연스럽게 드러나게 됩니다.
이 글에서 다룬 AI주지스님 워크스루에서도, 8B 모델까지 로컬에서 돌아가는지 확인하는 것부터 시작해서 반야심경 구절을 나누고 임베딩 개념을 익히고 RAG 파이프라인을 완성하기까지, 순서마다 다음에 뭘 봐야 할지가 자연스럽게 이어졌고, 다음 차례로 더 깊이 뭘 공부해야 할지가 정리됐습니다.

관련 글 보기