Build 03 — RAG 실험: 내 공개 기록에 질문하기
가장 낮은 축(RAG)을 직접 조립해 올리기. 검색·임베딩·환각 가드, 그리고 두 번의 실패.
역량 지도에서 가장 낮은 축이 RAG·Agent(학습 중)다. “학습 중은 공개 기록으로 연결됩니다”라고 사이트에 적어놨으니, 약속을 코드로 지킬 차례다. 이번 빌드는 리포트가 곧 학습 로그다.
RAG가 뭔가 (오픈북 시험)
LLM에게 그냥 물어보는 건 암기 시험이다. 내 블로그를 모르고, 모르면 지어낸다. RAG(검색 증강 생성)는 이걸 오픈북 시험으로 바꾼다: 질문이 오면 먼저 내 자료에서 관련 대목을 찾아 펼쳐놓고, 그것만 근거로 답하게 하는 것.
문제
공개 기록(블로그·포트폴리오)이 쌓이기 시작했는데, “이 사람 ○○ 경험 있나?”를 방문자가 검색할 수단이 없다. 그래서 내 공개 기록을 오픈북 삼아 나에 대해 답하는 파이프라인을 직접 조립한다.
만든 것 / 버린 것
- 만든 것: 스크립트 3개,
ingest(수집·청킹) →index(임베딩) →ask(검색·근거 제한 생성). 외부 DB 없이 numpy 파일 하나. repo - 코퍼스는 공개 자료만. 블로그 글과 사이트 텍스트만 읽는다. 비공개 자료는 코드 경로상 접근 자체가 없다.
- 버린 것: 웹 챗 데모. 정적 사이트엔 서버가 없어 API 키를 숨길 곳이 없다. 프록시 인프라는 이 빌드의 문제가 아니라서 후속으로.
$ python ask.py "황설현은 데이터 대시보드를 직접 만든 적이 있나요?"
🔎 검색 결과 (유사도):
0.373 포트폴리오 원페이지
0.230 역량 지도 상세
💬 네, HRD-Net 성과분석 대시보드를 1인 기획·개발·배포한 경험이 있습니다. ...
📄 출처: 포트폴리오 원페이지 · 역량 지도 상세
막힌 것 — 이번 글의 본론
1. 근거가 있는데 “기록에 없다”고 답했다. 검색은 성공(유사도 0.44)했는데 생성 단계가 거부. 원인은 내가 쓴 환각 방지 지시가 너무 셌던 것. “근거 없으면 없다고 답하라”를 소형 모델이 과잉 적용했다. “부분적 근거라도 있으면 그 범위에서 답하라”로 완화하니 해결. 가드는 세게 걸수록 좋은 게 아니라, 정확히 걸어야 한다.
2. 페이지의 알짜 정보가 통째로 빠져 있었다. HTML에서 텍스트를 뽑을 때 script를 버렸는데, 역량 지도의 상세 내용(증거 목록)이 전부 JS 데이터 안에 있었다. 게다가 문단 경계를 안 살려서 페이지 전체가 1,484자짜리 한 조각이 됐고, 의미가 희석돼 검색 순위가 떨어졌다. 블록 단위 청킹 + JS 문자열 구출로 해결하자 조각이 7→10개가 되고 실패하던 질문 두 개가 정답으로 바뀌었다. RAG의 품질은 모델보다 재료 손질(청킹)에서 갈린다.
3. 가드 발동과 모델 거부가 같은 메시지였다. 어느 단계가 “없다”고 한 건지 구분이 안 돼 디버깅이 막혔다. 메시지를 분리하니 원인이 바로 보였다. 관측 가능성은 기능이다.
4. 잘 되던 게 내 터미널에서는 안 됐다. 프롬프트에 (.venv) (base)가 같이 떠 있었다. venv와 conda가 동시에 활성화되면 python이 엉뚱한 쪽을 가리킨다. .venv/bin/python으로 경로를 명시해 해결. 입문자가 가장 자주 밟는 지뢰라 기록해 둔다.
검증
예시 질문 5개(파이프라인·블로그 기술·대시보드·AI 활용·기술 판단) 전부 출처 표시된 정답 + 기록에 없는 질문(“축구 잘해?”)은 유사도 0.214로 검색 가드가 차단해 지어내지 않았다. 완료 기준 5/5.
Q&A
Q. 공개 데모도 없는데 완성인가 — 실행 가능한 도구 + 공개 repo + 이 리포트가 산출물이다. 웹 데모를 버린 건 회피가 아니라 판단이다. 키를 지키려면 프록시 인프라가 필요하고, 그건 다른 빌드의 문제다.
Q. 왜 개인 자료 전체가 아니라 공개 기록만 쓰나 — 이 도구는 공개될 수 있어야 하고, 그러려면 코퍼스가 공개 가능해야 한다. “무엇을 공개하지 않을지”를 프롬프트가 아니라 아키텍처로 보장하는 쪽을 골랐다.
회고
- 늘어난 것: 역량 지도의 보라색 축(학습 중)에 첫 실증이 생겼다. 청킹·임베딩·유사도 검색을 직접 조립하며 원리로 이해했다. 이제 쓰는 사람이 아니라 설명할 수 있는 사람.
- 다음에 고칠 것: 평가용 질문을 빌드 시작 전에 작성할 것. 이번엔 즉석에서 만들었다. 시험 문제를 먼저 내는 게 교육 기획자답다.