"근거 법령을 확인했습니다"라고 쓰기 전에, LLM이 조문 번호와 내용을 그럴듯하게 지어내는 환각이 법령·SOP 영역에서 가장 위험합니다. RAG(검색 증강 생성)는 답을 만들기 전에 먼저 공식 문서에서 근거를 검색해 고정하고, 그 근거로만 답하며, 답이 근거에 충실한지 평가로 검증하는 방식입니다.
이 안내서를 끝내면 문서를 검색 가능한 형태로 정리하고, 법령에 맞는 조문 단위 청킹을 적용하고, 답변에 근거 링크를 강제하고, 충실도를 Ragas로 검증할 수 있습니다.
RAG 4단
| 단계 | 무엇을 | 핵심 원칙 |
|---|---|---|
| 1 정리 | 문서 → 텍스트 | 출처·확인일을 메타로 보존 |
| 2 청킹 | 텍스트 → 검색 조각 | 임의 분할 금지, 조/항 경계 |
| 3 생성 | 근거 → 답변 | 검색된 근거에만 기반, 링크 강제 |
| 4 검증 | 답변 → 점수 | 충실도·맥락정밀도 + 골든셋 회귀 |
1. 문서 정리
PDF 법령·매뉴얼을 검색 가능한 텍스트로 바꿉니다.
→ 안전한 AI 운영 도구의 MarkItDown·Unstructured를 쓰고, 어떤 문서를 모을지는 소방 공공데이터·API 지도의 공식 법령 출처를 따르세요. 공개 법령·SOP만 쓰고, 내부 비공개 문서는 권한·보안을 따로 설계합니다.
2. 청킹 — 법령은 조문 경계로
일반 RAG는 텍스트를 일정 토큰으로 자르지만, 법령을 토큰 수로 자르면 한 조문이 두 조각으로 쪼개져 근거가 깨집니다. 법령은 조/항 경계로 나누고, 조문번호·출처·확인일을 메타로 같이 저장합니다.
PYTHON
import re # '제3조', '제3조의2' 경계로 분할 — 조문이 잘리지 않게 ARTICLE = re.compile(r"(제\s?\d+조(?:의\s?\d+)?)") parts = ARTICLE.split(law_text) chunks = [] for i in range(1, len(parts), 2): no = parts[i].strip() body = parts[i + 1].strip() if i + 1 < len(parts) else "" chunks.append({ "text": f"{no} {body}", "article": no, "source": source_url, # 공식 원문 링크 "checked_on": "2026-06-29", # 확인일(법령은 개정된다) })
3. 근거 강제 생성
검색된 근거 조각만 컨텍스트로 주고, 답에 조문·출처를 붙이게 강제하며, 근거가 없으면 답하지 말고 "확인 필요"로 두게 합니다.
TEXT
아래 [근거]는 공식 문서에서 검색된 조문입니다. [근거]에 있는 내용만으로 답하세요. 근거에 없으면 지어내지 말고 "확인 필요"라고 답하세요. 답의 각 문장 끝에 근거가 된 조문번호와 출처 링크를 붙이세요. 처분·과태료·의무 여부를 단정하지 말고, 해당 조문을 가리키며 "원문 확인 필요"로 안내하세요.
→ 이 단계의 출력은 법령 근거 확인 브리프의 입력이 됩니다. RAG는 조문 후보를 빠르게 모아 줄 뿐, 처분·해석의 최종 판단은 사람이 원문을 보고 합니다.
4. 검증 — 충실도와 맥락 정밀도
답이 정말 근거에 충실한지(faithfulness), 검색이 관련 조문을 잘 가져왔는지(context precision)를 Ragas로 점수화합니다. 자주 묻는 질문으로 골든셋을 만들어, 프롬프트·청킹을 바꿀 때마다 회귀로 돌립니다.
PYTHON
from ragas import evaluate from ragas.metrics import faithfulness, context_precision # eval_dataset: question / answer / contexts(검색된 근거) / ground_truth(정답 근거) result = evaluate(dataset=eval_dataset, metrics=[faithfulness, context_precision]) print(result) # 평균 점수 df = result.to_pandas() # 항목별 점수 — 낮은 질문부터 사람이 원인을 본다
▸ 소방 활용 포인트
근거 링크가 달린 질의응답 초안을 빠르게 만들어 검토 시간을 줄입니다. 단 처분·과태료·의무 여부 단정은 절대 자동화하지 말고, RAG가 가리킨 조문을 사람이 공식 원문으로 확인한 뒤 확정합니다.사람 검토 체크리스트
TEXT
- [ ] 공개 법령·SOP만 사용했고, 비공개 문서는 권한·보안을 따로 설계했습니다. - [ ] 청크에 조문번호·출처 링크·확인일이 보존돼 있습니다. - [ ] 답변마다 근거 조문·출처가 붙어 있고, 근거 없는 답은 "확인 필요"입니다. - [ ] faithfulness·context precision이 낮은 질문을 사람이 원인 분석했습니다. - [ ] 처분·과태료 같은 단정 표현이 사람 검토 없이 나가지 않습니다.
⚠️ 흔한 실수
RAG도 검색이 빗나가면 환각합니다 — 근거를 못 찾으면 답하지 않게 하세요. 법령은 개정되므로 확인일이 지난 근거는 다시 받아야 하고, 최종 법적 판단은 언제나 사람이 공식 원문으로 합니다.