프롬프트가 놓이는 '책상 위 서류철'—참조자료·이력·도구설명·예시—을 무엇을 넣고 뺄지 설계하는 기술.
4컷으로 보기 — 민원을 처리하기 전 담당자가 책상에 올려두는 관련 서류철이다—해당 법령

- 11컷: 서류 산더미에 파묻힌 민원 담당자
- 22컷: '서류철 설계사' 등장, 필요한 서류만 선별
- 33컷: 표준조례집은 캐비닛에 고정, 회의록은 요약카드로, 조문마다 출처 태그 부착
- 44컷: 깔끔한 서류철로 민원 정확히 처리, 웃는 담당자와 민원인
왜 중요한가
모델의 실제 성능은 '무엇을 아느냐(학습된 지식)'보다 '지금 창(context window)에 무엇을 보여주느냐'가 좌우하는 경우가 많다. 관련 근거를 곁에 두면(RAG) 최신·기관 고유 정보를 정확히 반영하고 환각을 줄인다. 반대로 불필요한 정보로 창을 채우면 비용·지연이 늘고 핵심이 묻혀 오류가 는다(맥락 소실·중간부 망각). 비식별·출처관리 같은 행정 안전선도 결국 '창에 무엇을 넣느냐'의 문제다. 이 계층이 부재하면: 모델이 기관 규정을 모른 채 그럴듯한 오답을 지어내고(환각), 최신 개정 법령을 반영하지 못하며, 근거 없는 답에 출처를 붙일 수 없어 검증·감사가 불가능해지고, 매 호출마다 같은 배경을 반복 입력해 비용이 폭증한다.
행정 실무 비유
민원을 처리하기 전 담당자가 책상에 올려두는 관련 서류철이다—해당 법령·과거 처리사례·표준서식·첨부증빙. 관련 없는 서류까지 잔뜩 쌓으면 정작 핵심 조문을 못 찾고, 꼭 필요한 판례가 빠지면 오판한다. 서류철에는 '오늘 이 민원에 필요한 것만' 골라 담아야 하며, 자주 보는 표준 조례집은 매번 복사하지 않고 늘 같은 자리(캐시)에 둔다. 두꺼운 회의록은 요지만 간추린 요약본(압축)으로 대체하고, 인용한 조문에는 반드시 출처 페이지(근거장·provenance)를 적어 두어 나중에 감사에서 되짚을 수 있게 한다. 법령대조와 근거 첨부가 정확할수록 처리도 정확하다.
🖐 실무 따라하기 — 복붙해서 따라 하면 됩니다
- 1서류철 재료 만들기 — 합성 규정집을 6개 청크로 쪼개기
메모장(또는 /playground 편집창)을 열고, 아래 합성 규정집 6개 청크를 그대로 붙여넣어 'reg.txt'라는 이름으로 저장합니다. 각 조문을 [C1]~[C6]처럼 번호가 붙은 작은 덩어리(청크)로 나눈 것이 핵심 — 뒤에서 이번 민원에 필요한 덩어리만 골라 쓰기 위함입니다. [C6](수수료)은 이번 민원과 무관한 '함정' 조문으로, Step 3에서 걸러지는지 확인하는 대조군입니다. 반드시 6개 줄이 모두 저장돼야 Step 3의 필터링 시연이 재현됩니다. (실제 법령이 아닌 학습용 합성 텍스트입니다.)
설정[C1] 옥외광고물 관리 조례(합성) 제3조(정의) '현수막'이란 천·비닐 등에 문자·도형을 표시하여 지정게시대가 아닌 장소에 설치한 광고물을 말한다. [C2] 제7조(허가·신고) 지정게시대 외의 장소에 현수막을 표시하려는 자는 사전에 관할 시장에게 신고하여야 한다. 신고 없이 설치한 현수막은 불법광고물로 본다. [C3] 제12조(철거) 시장은 불법광고물에 대하여 계고 없이 즉시 철거할 수 있으며, 철거에 든 비용은 설치자에게 청구할 수 있다. [C4] 제15조(과태료) 제7조를 위반하여 신고 없이 현수막을 설치한 자에게는 1차 위반 시 10만원의 과태료를 부과한다.(합성 금액) [C5] 제20조(민원처리 기한) 광고물 관련 신고민원은 접수일부터 7근무일 이내에 처리결과를 회신한다. [C6] 제25조(수수료) 옥외광고 사업자 등록 수수료는 2만원으로 한다.(합성 — 이번 민원과 무관한 함정 조문)
→ 결과 reg.txt 파일이 저장되고, 열어 보면 [C1]부터 [C6]까지 정확히 6줄이 보입니다. [C6](수수료)은 이번 민원과 무관한 함정 조문 — Step 3에서 상위 결과에 빠지는지 확인할 대조군입니다. 6줄이 다 있는지 눈으로 세어 보세요(있으면 정상).
- 2few-shot 서식과 비식별 규칙 준비하기
회신문의 톤·형식을 고정하기 위한 '좋은 예시 1건'(few-shot)과 개인정보를 지우는 비식별 규칙을 아래 그대로 붙여넣어 'example.txt'로 저장합니다. 좋은 예시가 단 1개만 있어도 AI 출력 형식이 눈에 띄게 안정됩니다. 이 파일은 Step 4에서 프롬프트에 함께 붙여 씁니다.
설정# 회신 표준서식 예시(few-shot) [제목] ○○ 관련 민원 회신 [접수번호] MW-0000-0000 [결론] (된다/안 된다/조치예정) 한 문장 + 근거 [C?] [근거] 조문 인용 + [C?] 출처 표기 [안내] 신청인이 할 일 / 처리 기한 [담당] 부서·연락처 # 비식별 규칙 - 성명 -> OOO, 전화 -> 010-0000-0000, 상세주소 번지 -> OO로 마스킹 - 접수번호(MW-2026-0001)는 업무 추적용으로 유지 - 실무에서는 접수번호도 다른 정보와 결합 시 개인 식별이 가능하므로 대외 공개본에서는 [접수번호]로 가림
→ 결과 example.txt 파일에 표준서식 골격 6줄과 비식별 규칙이 저장됩니다. Step 4에서 AI가 이 형식을 그대로 흉내 내게 됩니다.
- 3RAG 흉내 — 민원과 관련된 청크만 골라내기(재순위·압축)
규정집 전체를 넣지 말고, 이번 민원 키워드('현수막, 신고, 철거, 과태료, 기한, 불법')에 맞는 청크만 고릅니다. 로컬 Python이 있으면 아래 명령을 터미널(Windows: cmd 또는 PowerShell / Mac: 터미널)에서 reg.txt가 있는 폴더로 이동한 뒤 그대로 붙여넣어 실행합니다. Python이 없으면(무설치 PC) 아래 코드를 실행하지 말고, reg.txt를 눈으로 보며 키워드가 들어간 [C2][C3][C4][C5]만 손으로 골라 표시하면 됩니다(수동 대안 — 결과는 동일).
터미널 명령python3 - <<'PY' kw = ['현수막','신고','철거','과태료','기한','불법'] chunks = open('reg.txt', encoding='utf-8').read().split(' ') hits = [c for c in chunks if c.strip() and any(k in c for k in kw)] # 키워드가 많이 맞은 순으로 재순위 hits.sort(key=lambda c: -sum(k in c for k in kw)) print('=== 상위 관련 조문(재순위 결과) ===') for c in hits[:5]: print(c[:120]) print('=== 제외된 조문(키워드 0개) ===') for c in chunks: if c.strip() and not any(k in c for k in kw): print(c[:120]) PY→ 결과 '상위 관련 조문'에 [C2][C3][C4][C5](신고·철거·과태료·기한)만 출력되고, '제외된 조문'에 [C6](수수료)이 찍힙니다. 무관한 C6이 상위에서 빠지는 것이 '서류철 다이어트' — 토큰예산을 아끼는 핵심입니다. (Windows에서 python3가 인식 안 되면 python으로 바꿔 실행)
- 4컨텍스트를 조립해 회신 초안 생성(근거인용 강제)
채팅창(/playground 또는 ChatGPT·Claude 웹)에 아래 프롬프트를 통째로 붙여넣습니다. Step 3에서 고른 청크만 넣고, 서식 예시와 비식별 규칙, 민원 내용을 함께 올립니다. '모든 결론 문장 끝에 근거를 반드시 [C?]로 표기'라는 지시가 출처 유지의 핵심입니다.
프롬프트 (복사해서 AI에 입력)당신은 시청 옥외광고물 담당 주무관입니다. 아래 [서류철-관련조문]에 있는 조문만 근거로 사용하고, 서류철에 없는 내용은 지어내지 말고 '규정 확인 필요'라고 쓰세요. 모든 결론·근거 문장 끝에는 반드시 근거 조문을 [C?] 형태로 표기하세요. 개인정보는 [비식별 규칙]대로 마스킹하세요. [민원] 접수번호: MW-2026-0001 / 신청인: 홍길동 / 연락처: 010-0000-0000 내용: "우리 상가 앞 인도에 걸린 불법 현수막을 철거해 주세요. 과태료도 부과되나요? 언제까지 답 받나요?" [서류철-관련조문] [C2] 신고 없이 설치한 현수막은 불법광고물로 본다. [C3] 시장은 불법광고물을 계고 없이 즉시 철거할 수 있고 비용을 설치자에게 청구한다. [C4] 신고 없이 설치한 자에게 1차 위반 시 과태료 10만원. [C5] 광고물 신고민원은 접수일부터 7근무일 이내 처리결과 회신. [표준서식 예시] [제목]/[접수번호]/[결론]/[근거]/[안내]/[담당] 형식을 따르세요. [비식별 규칙] 성명->OOO, 전화->010-0000-0000, 주소 번지->OO로 마스킹. 위 형식으로 민원 회신 초안 1건을 작성하세요.
→ 결과 표준서식대로 초안이 나옵니다. 예: 결론 '불법 현수막은 즉시 철거 대상입니다[C3]', 과태료 '1차 위반 10만원[C4]', 기한 '접수일부터 7근무일 이내 회신[C5]'. 신청인은 'OOO', 전화는 '010-0000-0000'으로 마스킹되어 표기됩니다. 모든 결론 문장 끝에 [C2]~[C5] 중 하나의 출처가 붙어 있으면 정상.
- 5환각·출처 검증 — 서류철에 없는 근거는 걸러내기
생성된 초안을 그대로 신뢰하지 말고, 아래 검증 프롬프트를 같은 대화에 이어서 붙여넣어 '근거 표기가 실제 서류철 청크에 있는지'를 스스로 대조하게 합니다. 서류철에 없는 인용([C1],[C6] 등)이 튀어나오면 환각이므로 삭제합니다.
프롬프트 (복사해서 AI에 입력)방금 작성한 초안을 검증하세요. 표에 두 열을 만드세요: (1)초안이 인용한 [C?] 번호, (2)그 번호가 위 [서류철-관련조문]에 실제로 존재하는지(있음/없음). '없음'인 인용이나, 서류철에 근거가 없는 문장을 모두 찾아 목록으로 표시하고, 해당 문장을 '규정 확인 필요'로 바꾼 최종본을 다시 출력하세요.
→ 결과 인용-출처 대조표가 나오고, 실제 제공한 [C2][C3][C4][C5]만 '있음'으로 확인됩니다. 만약 초안에 [C1]이나 [C6], 또는 지어낸 금액이 있었다면 '없음'으로 잡혀 '규정 확인 필요'로 교체된 최종 회신본이 출력됩니다.
- 6재사용 — 컨텍스트 압축 요약으로 다음 민원에 캐싱
이번에 고른 서류철을 매번 다시 만들지 않도록, 자주 쓰는 조문을 4줄 이내로 압축 요약해 'context-옥외광고.txt'로 저장해 둡니다. 아래 프롬프트를 채팅창에 붙여넣어 요약을 만든 뒤, 나온 4줄을 파일로 저장하세요. 다음 유사 민원에서는 Step 1~3을 건너뛰고 이 요약 블록만 Step 4에 붙여넣으면 되므로 토큰과 시간이 절약됩니다(프롬프트 캐싱의 수동 버전).
프롬프트 (복사해서 AI에 입력)다음 옥외광고 민원에서 재사용할 '표준 근거 요약'을 4줄 이내로 만들어 주세요. 각 줄 끝에 출처 [C?]를 유지하세요. 아래 예시 형식을 따르세요: - 신고 없는 현수막=불법[C2] / 즉시 철거·비용청구[C3] / 1차 과태료 10만원[C4] / 회신기한 7근무일[C5]
→ 결과 출처가 붙은 4줄 요약 블록이 나옵니다. 이 블록을 context-옥외광고.txt로 저장해두면 다음 민원 처리 시 Step 1~3을 건너뛰고 바로 Step 4에 붙여 재사용할 수 있습니다.
스택 내 위치
AI 엔지니어링 스택의 ②계층. 안쪽 ①프롬프트(한 장의 지시서)를 감싸는 '서류철' 계층으로, 같은 지시서라도 곁에 놓인 자료·이력·예시에 따라 결과가 갈린다. 위로는 ③하네스(이 서류철을 반복적으로 구성·주입하는 처리절차)와 맞닿는다. 경계: '한 번의 요청 문구를 다듬는 것'은 ①프롬프트, '그 요청에 어떤 자료를 얼마나 곁들일지 설계·검색·정제하는 것'이 ②컨텍스트, '그 구성을 자동으로 반복 실행하는 틀'은 ③하네스다. 검색(RAG)·캐싱·압축은 이 계층에 산다.
핵심 개념 (14)
모델이 한 번의 호출에서 실제로 '볼 수 있는' 텍스트의 총량. 프롬프트·자료·이력·도구설명·모델의 답변이 모두 이 한정된 토큰 예산을 나눠 쓴다.
💡 창은 유한한 책상 넓이다. 넘치면 오래된 것이 밀려나거나 잘리고, 꽉 채우면 핵심이 묻히고 비용·지연이 는다. 무엇을 넣을지 결정하려면 먼저 예산 개념이 필요하다.
질문에 답하기 전, 외부 지식원(문서·DB)에서 관련 조각을 검색해 창에 넣고 그 근거로 답하게 하는 기법. 답에 출처를 붙일 수 있다.
💡 모델 학습에 없던 최신·기관 고유 정보를 정확히 반영하고, 근거 인용으로 환각을 줄이며 검증을 가능케 한다. 컨텍스트 계층의 핵심 실천.
긴 문서를 검색·주입하기 좋은 크기의 조각(chunk)으로 나누는 작업. 조각 크기·경계(문단/조항 단위)·중첩(overlap) 설계가 검색 품질을 좌우한다.
💡 너무 크면 창을 낭비하고 관련 없는 내용이 섞이며, 너무 작으면 문맥이 끊긴다. 법령을 '조·항' 단위로 자르는 것처럼 자연 경계를 살려야 한다.
텍스트를 의미를 담은 숫자 벡터로 바꿔, 표현이 달라도 뜻이 가까운 문서를 거리로 찾는 방식(의미 검색). 키워드 검색과 함께 쓰기도 한다(하이브리드).
💡 '출산 지원금'과 '양육 보조'처럼 단어가 달라도 같은 뜻을 찾아낸다. 관련성 판단의 기반이며, 검색이 부실하면 RAG 전체가 무너진다.
1차 검색으로 넉넉히 후보를 뽑은 뒤, 더 정교한 모델로 질문과의 관련성을 다시 매겨 상위 소수만 창에 넣는 2단계 정제.
💡 1차 검색은 빠르지만 거칠다. 재순위화로 정말 관련 있는 조각만 남겨야 창을 아끼고 '핵심이 묻히는' 문제를 막는다.
여러 호출에 걸쳐 변하지 않는 접두부(시스템 지시·표준 규정·긴 참조문서)를 재사용하도록 캐시해, 매번 다시 처리하지 않게 하는 최적화.
💡 매 호출 같은 배경을 다시 넣으면 비용·지연이 누적된다. 자주 보는 표준 조례집을 늘 같은 자리에 둬 재복사를 없애는 것과 같다. 변하는 내용은 뒤에 배치해야 캐시가 유효하다.
길어진 자료·대화 이력을 요지만 남기고 압축·요약해 창을 절약하는 기법. 원문 대신 요약본을, 전체 대화 대신 누적 요약을 싣는다.
💡 두꺼운 회의록을 요지로 줄이듯, 세부는 버리되 결정·사실·미결과제는 보존해야 한다. 과압축은 정보 손실을 부르므로 무엇을 지킬지 규칙이 필요하다.
멀티턴 대화에서 누적되는 이력이 창을 넘지 않도록 오래된 턴을 요약·폐기·선별 유지하는 전략(슬라이딩 윈도우, 누적 요약 등).
💡 긴 대화는 반드시 창을 넘친다. 그냥 잘라내면 앞서 정한 규칙을 잊고, 다 넣으면 넘친다. 무엇을 기억으로 남길지가 대화형 시스템의 품질을 좌우한다.
모델이 쓸 도구(함수·API)의 이름·설명·입력 스키마도 창을 차지하는 컨텍스트다. 명확하고 간결한 도구 설명이 올바른 도구 선택을 유도한다.
💡 도구 설명이 모호하거나 너무 많으면 잘못 고르거나 창을 낭비한다. 하네스·헤르메스로 이어지는 다리로, 도구 사용(tool use)의 품질은 여기서 시작된다.
원하는 출력의 형식·톤·판단 기준을 보여주는 소수의 모범 예시를 창에 함께 넣는 것. 예시 선택·순서·개수가 결과를 좌우한다.
💡 '표준서식 견본'을 곁들이면 담당자가 형식을 맞추듯, 좋은 예시는 규칙 백 줄보다 강하다. 다만 나쁘거나 편향된 예시는 그대로 학습되므로 큐레이션이 중요하다.
창이 길수록 모델이 중간에 놓인 정보를 놓치기 쉬운 현상. 앞·뒤는 잘 보되 가운데는 흐려진다. 관련 없는 내용이 많을수록 심해진다.
💡 '많이 넣을수록 좋다'는 착각을 깨는 핵심 개념. 그래서 재순위화·압축으로 '적게, 관련 있게, 좋은 위치에' 넣어야 한다. 중요한 것은 창의 앞이나 끝에 배치한다.
이름·주민번호·연락처 등 개인·민감정보를 창에 넣기 전에 걸러내거나 가명·마스킹으로 대체하는 안전 조치.
💡 '창에 무엇을 넣느냐'는 곧 프라이버시·보안 문제다. 공공 업무에서는 특히 입력단에서 비식별해야 유출·오남용을 원천 차단한다. 컨텍스트 설계의 안전선.
창에 넣은 각 조각이 '어느 문서 몇 조·몇 페이지'에서 왔는지 꼬리표를 붙여, 답에 출처를 달고 사후 감사에서 되짚을 수 있게 하는 것.
💡 공공 결정은 근거 추적이 생명이다. 출처장이 있어야 인용 검증·재현·책임 소재 확인이 가능하다. RAG의 신뢰성을 완성하는 조각.
실제 민감 문서 대신, 통계·구조는 닮았지만 실인물·실사건이 아닌 가짜 문서·질문 세트를 생성해 개발·실습·평가에 쓰는 것.
💡 실데이터 없이도 파이프라인을 만들고 평가할 수 있다. 개인정보 위험 없이 마음껏 실험하려면 필수. 평가(eval) 계열과 이어지는 다리.
학습 목표
- 컨텍스트 창·토큰 예산의 개념을 이해하고 '많이 넣을수록 좋다'가 왜 틀린지 맥락 소실로 설명한다
- RAG가 무엇이며 왜 최신·기관 고유 정보 반영과 환각 감소에 필요한지 행정 비유로 설명한다
- 비식별·출처관리가 '창에 무엇을 넣느냐'의 문제임을 이해하고 민감정보를 넣기 전 걸러야 함을 안다
- 문서를 자연 경계로 청킹하고 임베딩 기반 의미 검색으로 관련 조각을 뽑는 간단한 RAG 파이프라인을 구성한다
- 프롬프트 캐싱을 적용해 반복 접두부의 비용·지연을 줄이고, 압축·요약으로 긴 이력을 창 안에 유지한다
- 재순위화로 검색 결과를 정제하고, 각 조각에 출처 꼬리표를 붙여 답에 근거 인용을 단다
- 관련성·창 예산·비용·지연·근거 추적을 함께 고려한 기관용 컨텍스트 파이프라인을 설계하고, 합성 데이터셋으로 검색·인용 품질을 평가한다
- 맥락 소실·과압축·캐시 무효화 같은 실패 모드를 진단하고, 청크 크기·재순위·배치·압축 규칙을 데이터로 튜닝한다
- 비식별·출처·거버넌스 정책을 파이프라인에 내재화해 감사 가능하고 재현 가능한 컨텍스트 설계를 제도화한다(메타 계층으로 연결)
세션 구성
| 회차 | 주제 | 시수 | 내용 | 산출물 |
|---|---|---|---|---|
| 1 | 서류철의 원리 — 컨텍스트 창과 토큰 예산 | 2h | 컨텍스트 계층이 프롬프트를 어떻게 감싸는지, 같은 지시서라도 곁 자료에 따라 결과가 갈림을 시연. 컨텍스트 창=책상 넓이, 토큰 예산 개념. '많이 넣을수록 좋다'의 함정과 맥락 소실·중간부 망각을 실물 예제로 관찰. 무엇을 넣고 뺄지의 원칙. | 동일 프롬프트에 서로 다른 서류철(자료 구성)을 넣어 결과 차이를 기록한 비교표 |
| 2 | RAG 기초 — 청킹·임베딩·의미 검색 | 3h | 검색증강생성의 전체 흐름(적재→청킹→임베딩→검색→주입→생성). 문서를 조·항 등 자연 경계로 청킹, 임베딩 의미 검색 vs 키워드 검색, 하이브리드. 관련성이 왜 품질의 병목인지. 근거 인용의 기본형. | 기관 규정 문서(또는 합성 문서) 1건을 청킹·임베딩해 질문에 관련 조각을 반환하는 최소 검색기 |
| 3 | 관련성 정제 — 재순위화와 창 예산 배치 | 2h | 1차 검색의 한계와 2단계 재순위화. 넉넉히 뽑아 정교히 추리기. 맥락 소실을 줄이는 배치 전략(중요 조각을 앞/끝에). 창 예산을 지키며 상위 소수만 남기기. 관련성-비용-지연의 삼각 균형. | 재순위화 전/후 답변 정확도·인용 정확도를 비교한 실험 노트 |
| 4 | 비용·지연 최적화 — 프롬프트 캐싱과 압축·이력 관리 | 3h | 변하지 않는 접두부를 캐싱해 재처리 제거(캐시가 유효하려면 변하는 내용은 뒤로). 긴 자료·대화 이력의 압축·요약(무엇을 지키고 무엇을 버릴지 규칙). 슬라이딩 윈도우·누적 요약으로 창 넘침 방지. 도구 설명·스키마도 컨텍스트임을 인식. | 캐싱·압축 적용 전후의 토큰·비용·지연 측정 표와 압축 규칙 문서 |
| 5 | 안전선과 신뢰 — 비식별·출처장·합성 데이터 | 2h | 입력단 비식별·민감정보 마스킹, 출처·근거장(provenance) 유지로 감사 가능한 인용 만들기, 합성 데이터셋으로 실데이터 없이 개발·평가하기. few-shot 예시 큐레이션의 원칙과 편향 주의. | 비식별 규칙 + 출처 꼬리표 스키마 + 합성 질문·문서 20건 세트 |
| 6 | 통합 실습·평가 — 기관용 컨텍스트 파이프라인 | 3h | 앞 세션을 하나로: 적재→비식별→청킹→임베딩→검색→재순위→출처부착→압축→캐싱→생성→인용. 합성 데이터셋으로 검색 적중률·인용 정확도·창 예산·비용을 평가(eval 계열 연결). 실패 모드 진단과 튜닝. 하네스로의 이행 예고. | 근거 인용이 달린 답변을 내는 통합 파이프라인 1식 + 평가 결과 리포트 |
실습 랩
랩 A — 합성 규정집으로 최소 RAG 만들기
목표 · 청킹·임베딩·의미 검색·근거 인용으로 이어지는 RAG의 뼈대를 손으로 만들어 '검색이 답의 근거가 된다'를 체감한다.
- 실습용 합성 규정집을 준비한다: 실제 기관 문서 대신, 구조는 조례를 닮았지만 실인물·실사건이 없는 가짜 '○○군 출산장려금 지원 조례(합성)' 15~20개 조항을 만든다(개인정보 위험 0).
- 각 조항을 자연 경계(조·항)로 청킹한다. 한 조각이 하나의 완결된 규칙이 되도록 나누고, 필요하면 조항 제목을 조각 앞에 붙여 문맥을 보존한다.
- 각 조각에 출처 꼬리표를 단다: {문서명, 조, 항, 원문} 형태의 구조로 저장한다(랩 D의 출처장 기반).
- 각 조각을 임베딩해 벡터로 만들고, '둘째 아이 지원금은 얼마인가?' 같은 질문도 임베딩해 거리로 가장 가까운 상위 5개 조각을 검색한다.
- 검색된 5개 조각을 프롬프트에 넣고 '아래 근거 안에서만 답하고, 각 문장 끝에 (조·항)을 인용하라. 근거에 없으면 모른다고 답하라'는 지시로 답을 생성한다.
- 단어가 다른 질문('셋째 낳으면 받는 돈')으로도 검색이 되는지 확인해 의미 검색의 힘을 관찰하고, 반대로 규정에 없는 질문에 모델이 지어내지 않고 '근거 없음'을 답하는지 검증한다.
✅ 성공 기준 · 질문에 대해 모델이 관련 조항을 근거로 인용(조·항 표기)하며 답하고, 규정에 없는 내용은 '근거 없음'으로 답한다.
↗ 확장 · 키워드 검색을 추가해 의미+키워드 하이브리드로 바꾸고, 순수 의미 검색만 쓸 때보다 숫자·고유명사 질의의 적중이 나아지는지 비교한다.
랩 B — 재순위·압축·캐싱으로 서류철 다이어트
목표 · '적게, 관련 있게, 싸게' 넣는 최적화 3종(재순위화·압축·캐싱)을 적용해 정확도는 지키고 창 예산·비용을 줄인다.
- 랩 A의 검색기에서 1차로 후보를 넉넉히(예: 20개) 뽑은 뒤, 질문-조각 관련성을 다시 매겨 상위 5개만 남기는 재순위 단계를 추가한다.
- 재순위 전(상위 5 그냥 사용) vs 후(20개에서 재순위한 5개)의 답변·인용 정확도를 같은 질문 세트로 비교 기록한다.
- 맥락 소실 실험: 정답 조각을 프롬프트의 '중간'에 묻었을 때와 '맨 앞/맨 끝'에 뒀을 때 정답률을 비교해 배치 효과를 관찰한다.
- 긴 배경(예: 조례 제·개정 이유서 원문)을 요약해 요지만 남기는 압축 단계를 넣되, '결정·금액·시행일은 반드시 보존'이라는 압축 규칙을 명시하고 과압축으로 금액이 사라지지 않는지 점검한다.
- 변하지 않는 접두부(시스템 지시 + 표준 규정집 전문)를 프롬프트 앞에, 변하는 질문을 뒤에 배치하고 프롬프트 캐싱을 켠다. 캐시 적중 시 토큰·지연이 주는지 측정한다.
- 최적화 전/후의 토큰 수·예상 비용·지연·정확도를 한 표로 정리한다.
✅ 성공 기준 · 재순위와 배치 조정으로 인용 정확도가 유지되거나 오르고, 캐싱·압축으로 토큰·비용이 눈에 띄게 줄어든 비교표를 만든다.
↗ 확장 · 멀티턴 대화를 이어가며 슬라이딩 윈도우+누적 요약으로 창 넘침을 막고, 10턴 뒤에도 1턴에서 정한 규칙을 모델이 지키는지 확인한다.
사례 연구
상황 · 한 기초자치단체가 주민 출산·양육 지원 문의에 답하는 상담 보조 챗봇을 도입하려 했다. 초기 버전은 모델의 학습 지식에만 의존했다.
초기 챗봇은 '둘째 지원금은 얼마냐'는 질문에 그럴듯한 금액을 술술 답했지만, 그 수치는 다른 지자체 사례가 섞인 환각이었고 최근 개정된 자기 지역 조례를 반영하지 못했다. 담당 공무원이 사후 감사에서 '이 답의 근거가 뭐냐'를 물으면 추적할 방법이 없었다. 팀은 접근을 바꿔 자기 지역 조례를 조·항 단위로 청킹·임베딩하고, 질문마다 관련 조항을 검색해 그 근거 안에서만 답하며 각 문장에 (조·항)을 인용하게 했다(RAG+출처장). 재순위화로 엉뚱한 조항이 섞이는 것을 줄이고, 규정에 없는 질문은 '근거 없음, 담당부서 문의'로 넘기게 했다. 실습·시연에는 실주민 정보 대신 합성 조례·합성 질의를 썼고, 상담 기록의 개인정보는 입력단에서 마스킹했다.
교훈 · 모델의 성능 상한은 '무엇을 아느냐'보다 '지금 무엇을 보여주느냐'가 좌우한다. 근거를 곁에 두고(RAG) 출처를 달아야(provenance) 정확·최신·감사 가능해진다. 비식별과 합성 데이터는 선택이 아니라 공공 실무의 기본 안전선이다.
상황 · 한 기업이 방대한 사내 위키·매뉴얼에 답하는 지원 봇을 만들며 '컨텍스트 창이 크니 관련 문서를 최대한 많이 넣자'고 결정했다.
팀은 검색 상위 30개 문단을 통째로 창에 밀어 넣었다. 결과는 역설적으로 나빠졌다: 정답 문단이 긴 창의 '중간'에 묻혀 모델이 놓쳤고(맥락 소실), 관련 없는 문단이 노이즈가 되어 오답이 늘었으며, 매 호출 대량 토큰으로 비용·지연이 치솟았다. 개선은 정반대 방향이었다. 1차로 넉넉히 뽑되 재순위화로 정말 관련 있는 5개만 남기고, 긴 문서는 요지로 압축하고, 변하지 않는 시스템 지시·공통 정책은 프롬프트 캐싱으로 재사용했다. 중요한 조각은 창의 앞·끝에 배치했다. 넣는 양을 줄이자 정확도가 오르고 비용·지연이 함께 내렸다.
교훈 · 컨텍스트는 '많을수록'이 아니라 '관련 있을수록' 좋다. 재순위·압축·배치·캐싱은 품질과 비용을 동시에 개선하는 지렛대다. 큰 창은 게으르게 채워도 된다는 허가증이 아니다.
흔한 실패 · 안티패턴
- 창을 관련성 낮은 자료로 가득 채우기 — 정답이 노이즈에 묻히고(맥락 소실) 비용·지연만 는다. '많이'가 아니라 '관련 있게'.
- 정답 조각을 긴 창의 중간에 배치 — 중간부 망각으로 놓치기 쉽다. 중요한 것은 앞이나 끝에.
- 청크를 뜻과 무관하게 고정 길이로 자르기 — 조·항 같은 자연 경계를 무시하면 규칙이 반토막 나 검색·인용이 어긋난다.
- 1차 검색 결과를 재순위 없이 그대로 신뢰 — 빠른 검색은 거칠다. 정제 없이는 엉뚱한 조각이 섞인다.
- 변하는 내용을 캐시 접두부에 섞기 — 캐시가 매번 무효화돼 캐싱 이득이 사라진다. 고정부는 앞, 가변부는 뒤.
- 과압축으로 핵심 사실 유실 — 요약이 금액·시행일·결정 같은 결정적 정보를 지우면 답이 틀린다. '무엇을 반드시 보존할지' 규칙을 명시.
- 근거 없이 답하고 출처를 안 붙이기 — 감사·검증이 불가능하고 환각을 잡을 수 없다. RAG의 답에는 반드시 출처장을.
- 실민감정보를 그대로 창에 투입 — 입력단 비식별 없이 개인정보를 넣으면 유출·오남용 위험. 실습엔 합성 데이터를.
- 도구 설명·스키마를 장황하게 나열 — 도구 설명도 창을 먹는 컨텍스트다. 많고 모호하면 잘못 고르고 예산을 낭비한다.
- '검색만 붙이면 RAG 끝'이라 여기기 — 청킹·관련성·재순위·인용 중 하나만 부실해도 전체가 무너진다. 파이프라인 전체를 평가해야 한다.
평가
| 평가 기준 | 초급 | 능숙 | 전문 |
|---|---|---|---|
| 컨텍스트 창·예산 이해와 '적게 관련 있게' 원칙 | 창이 유한하다는 것은 알지만 '많이 넣을수록 좋다'고 생각하며 맥락 소실을 설명하지 못한다. | 토큰 예산을 의식해 관련 조각만 선별하고, 맥락 소실·중간부 망각을 근거로 배치·분량을 조정한다. | 관련성·비용·지연·근거추적을 함께 최적화하는 예산 정책을 설계하고, 실패 모드를 데이터로 진단·튜닝한다. |
| RAG 구성 능력(청킹·임베딩·검색·인용) | RAG의 개념은 설명하나 직접 청킹·검색 파이프라인을 만들지 못한다. | 자연 경계로 청킹하고 의미 검색으로 관련 조각을 뽑아 근거를 인용하는 동작하는 RAG를 만든다. | 하이브리드 검색·재순위·출처장을 결합하고 검색 적중률·인용 정확도를 평가·개선하는 파이프라인을 설계한다. |
| 최적화(캐싱·압축·이력 관리) | 캐싱·압축이라는 말은 알지만 언제 왜 쓰는지, 캐시 무효화·과압축의 위험을 모른다. | 고정부를 캐싱하고 긴 자료·이력을 규칙 있게 압축해 비용·지연을 줄이면서 정확도를 유지한다. | 가변부 배치·압축 보존규칙·슬라이딩 요약을 데이터로 튜닝해 품질-비용 곡선을 최적점으로 옮긴다. |
| 안전·신뢰(비식별·출처·합성 데이터) | 개인정보를 그대로 창에 넣고 답에 출처를 붙이지 않는다. | 입력단에서 민감정보를 비식별하고, 답에 출처 꼬리표를 달며, 실습에 합성 데이터를 쓴다. | 비식별·출처·거버넌스를 파이프라인에 내재화해 감사 가능·재현 가능한 컨텍스트 설계를 제도화한다. |
- '컨텍스트 창'이 무엇인지, 자료를 많이 넣으면 항상 답이 좋아지는지 자기 말로 설명해 보시오.
- AI가 우리 기관의 최신 조례를 반영해 답하게 하려면 어떤 방법이 필요할지 아는 대로 적으시오.
- AI 답변에 '이 답의 근거가 어디서 왔는지'를 붙이는 것이 왜 공공 업무에서 중요한지 서술하시오.
- 긴 문서를 청킹할 때 '조·항 같은 자연 경계'를 지켜야 하는 이유를 맥락 소실·검색 품질과 연결해 설명하시오.
- 검색 상위 30개를 통째로 넣었더니 정확도가 떨어졌다. 원인(2가지 이상)과 개선책(재순위·압축·배치·캐싱 중 택해 근거와 함께)을 제시하시오.
- 실주민 상담 데이터로 RAG 챗봇을 개발할 때 지켜야 할 컨텍스트 안전선(비식별·출처·합성 데이터)을 각각 왜·어떻게 적용할지 서술하시오.
- 프롬프트 캐싱이 효과를 내려면 프롬프트의 고정부와 가변부를 어떻게 배치해야 하며, 잘못 배치하면 무슨 일이 생기는지 설명하시오.
읽을거리 · 도구
- 각 모델 제공사의 '프롬프트 캐싱' 공식 문서 — 캐시가 어떻게 접두부를 재사용하는지, 고정부/가변부 배치와 캐시 유효 조건을 정확한 최신 사양으로 확인하기 위해. (수치·정책은 자주 바뀌므로 기억이 아니라 반드시 공식 문서에서 현재 값을 확인할 것.)
- 'Lost in the Middle' 계열의 긴 컨텍스트 성능 연구 — 창이 길수록 중간 정보가 흐려지는 현상을 실험으로 이해하고, 왜 '많이 넣기'가 역효과인지 근거를 얻기 위해. (제목·저자를 지어내지 말고 검색해 원문을 확인하라. 핵심 교훈은 '위치와 관련성이 분량보다 중요'.)
- RAG의 원 개념을 제시한 검색증강생성 논문/해설 — 검색으로 외부 지식을 끌어와 생성에 결합하는 아이디어의 출발점과 한계를 이해하기 위해. (이후 청킹·재순위·하이브리드 등 실무 기법은 별도로 최신 자료를 볼 것. 개념의 뿌리를 잡는 용도.)
- 임베딩·의미 검색·재순위화 실무 가이드(검색엔진/벡터DB 문서) — 청크 크기·중첩, 하이브리드 검색, 2단계 재순위의 실전 설정값과 트레이드오프를 익히기 위해. (특정 제품에 종속되지 말고 '왜 그렇게 하나'의 원리에 집중해 읽을 것.)
- 공공 데이터 비식별·개인정보 보호 지침(국내 가이드라인) — 입력단 비식별·가명처리의 법·실무 기준을 확인해, 컨텍스트에 무엇을 넣어도 되는지 판단 근거를 마련하기 위해. (기관 내부 규정과 최신 지침을 우선 확인하라. 실습은 합성 데이터로 대체하는 습관을 들일 것.)