"법령 인용한 척"하는 LLM의 흔한 패턴을 막기 위해, 모델이 만든 답변에서 인용된 조문/판례를 거꾸로 우리 DB에 다시 조회합니다.
1QA Self-Critique
같은 모델에게 "이 답변에 누락이나 오류가 있다면?"이라고 다시 묻고, 빠진 쟁점이 있으면 보강 답변을 생성합니다.
2법령 교차검증
답변에서 인용한 법령·조문을 추출 → DB에서 다시 검색 → 누락된 조문이 있으면 자동 보강합니다.
3판례번호 실재 검증
verify_precedent_citations()가 답변 텍스트에서 사건번호 패턴(예: 2018두12345)을 추출 → ChromaDB urbanlaw_precedents 컬렉션에서 실제 존재 여부 조회.
DB에 있음 → ✅ DB 확인완료 마크 자동 삽입
DB에 없음 → ⚠️ 검증 필요 마크 자동 삽입
판례 환각 100%까지는 못 막아도, 답변 안에서 검증 결과를 그대로 노출하기로 했습니다. 사용자가 직접 보고 판단하시라는 뜻입니다.
+실증 모순 가드 (deterministic)
LLM을 거치지 않는 코드 레벨 가드도 하나 더 있습니다. 판정이 "불가"인데 그 필지에 준공된 건물이 등재돼 있으면, 결과 화면에 ⚠️ 경고 배너를 띄워 "판정 근거에 규제 강화 이력이 인용됐는지 확인"을 권장합니다. 판정을 코드가 뒤집지는 않되, 실증과의 모순을 사용자에게 그대로 보여줍니다.
왜 이렇게까지 합니까
법규 검토 영역에서 LLM이 가장 자주 틀리는 패턴이 조문 번호 환각과 판례 인용 환각입니다. 그래서 우리는 두 가지를 정한 뒤 출시했습니다 — (1) DB에 없는 법령은 인용하지 않는다, (2) 검증 결과는 답변 안에 그대로 노출한다. 깔끔한 답변보다 거짓을 줄인 답변이 우선이라고 봅니다.
10 / SINGLE PARCEL
단일 획지 검토는 "주소 한 줄"로 시작합니다.
가장 많이 쓰이는 검토 유형입니다. 주소 하나만으로 토지정보부터 법령·판례까지 한 번에 검토합니다.
POST /api/analyze SSE 스트림 → 위 03·04·05 섹션의 검색·전문가 패널·검증 절차 그대로 수행
최종 보고서 + 후속 채팅(/api/chat/stream) + 재분석(/api/reanalyze) + 내보내기(/api/export/docx) 가능
소스: routes/land.py, routes/analyze.py
11 / BLOCK
블록 단위 분석은 GIS 집계 + 단일 분석을 합칩니다.
한 필지가 아니라 여러 필지를 한꺼번에 봐야 하는 사업형 검토용입니다.
처리 흐름
주소 검색 → 블록 후보 로딩 (POST /api/block-parcels)
지도에 parcel GeoJSON 표시 → 사용자가 다중 선택
필요 시 POST /api/multi-parcel-zoning · POST /api/block-zoning 호출
서울: UPIS ArcGIS proxy로 지구단위계획·용적률·건폐율 overlay 계산
비서울: VWorld WFS로 PNU·필지경계 조회
선택 필지 속성을 합쳐 블록용 landInfo 재구성 (대지면적 합산, 평균 용적률 등)
이후 단일 분석과 동일한 POST /api/analyze 또는 /api/block-analyze 사용
소스: routes/block.py (707 LOC)
12 / GENERAL Q&A
일반 법령 질의는 우리 DB 안에서만 답합니다.
"역세권 청년주택의 인센티브 한도?"처럼 토지 맥락이 없는 제도 자체에 대한 질문 모드입니다.
특이점
토지정보 없음 — land_info=None으로 분석 진입
대신 일반질문 전용 AI 플래너 (_parse_general_planner)가 질문을 법령 검색용 쿼리로 분해
기본 BM25 직접 검색 레이어(Layer 1.9)도 추가로 돌려, 정확한 법령명·조문번호로 질문하면 즉시 매칭
Pass 2 보충 검색 + 조건부 심화(dive) — 근거가 부족할 때만 자동 추가 라운드(고정 횟수 아님) + QA + 교차검증 + 판례검증 모두 동일하게 수행
버그 히스토리 (정직한 고지)
2026-04-17 이전까지 후속 채팅(/api/chat/stream)에서 법령 검색 결과가 항상 0건으로 반환되는 버그가 있었습니다. search_laws() 반환 타입을 dict로 잘못 가정한 코드가 try/except로 숨겨져 있던 것이 원인이었고, 발견 즉시 수정·배포했습니다. 이후로 후속 질문도 정상 인용됩니다.
소스: routes/analyze.py · core/search.py
13 / GUIDELINE PDF
지침서 PDF는 텍스트 추출 + 세션화로 분석합니다.
설계공모 지침서, 사업 설명서 PDF를 올리면 핵심 조건·법적 한도·인센티브·리스크를 자동으로 정리합니다.
처리 흐름
PDF 업로드 → POST /api/competition/analyze
PyMuPDF로 페이지별 텍스트 추출
Gemini로 핵심 정보 JSON 추출 (대상지·면적·용도·인센티브 등)
주소 추출되면 → get_land_info로 대상지 토지정보까지 보강
search_laws_for_guideline()로 관련 법령 대량 검색
search_legal_limits()로 지침서 수치 vs 법적 한도 비교 (예: 지침서 "용적률 600%" vs 법령 한도)
search_incentives()로 적용 가능한 인센티브 후보 수집
generate_risk_flags()로 누락·재확인 필요 항목 생성
세션 ID 발급 → 이후 POST /api/competition/chat으로 같은 지침서에 대해 후속 질의
소스: routes/competition.py (1,205 LOC)
14 / SCALE & INCENTIVES
규모 검토는 법적 한도와 시뮬레이션을 정량적으로 부딪쳐봅니다.
지침서/대지 조건을 바탕으로 건폐율·용적률·높이·인센티브·최대 규모를 계산합니다. UI는 별도 탭이지만, 백엔드는 지침서 분석(competition)의 구조화 데이터를 재활용합니다.
핵심 endpoint
POST /api/scale-review — 지침서/토지정보 + 사용자 입력 수치 → 법적 한도 비교 → 인센티브 적용 시 가능 규모 시뮬레이션
인센티브 항목별 가능/불가능 사유를 함께 반환 (단순 수치만이 아니라 근거 조문까지)
소스: routes/competition.py · scale 관련 로직
15 / DEV REVIEW
대규모 개발 검토는 지도 라쏘 + 공간 분석으로 시작합니다.
필지 단위가 아닌 구역 단위 가능성 검토용. 정비사업·재개발·도시재생을 염두에 둔 모드입니다.
처리 흐름
지도에서 라쏘 폴리곤 선택 → POST /api/devreview/analyze
입력 폴리곤 면적 계산
VWorld 규제 레이어 병렬 조회 — 용도지역·지구단위계획·개발제한구역 등
용도지역별 면적 비중 + 가중평균 개략 FAR(용적률) 계산
SHP/UPIS 기반 정비사업·지구단위계획 현황 수집
요약된 land context를 다시 routes.analyze.api_analyze()에 넘겨 AI 종합 분석 수행 (검색·전문가 패널·검증 모두 동일)
소스: routes/devreview.py (275 LOC)
16 / CHANGELOG
법규 변경 이력은 조문 단위 diff까지 보여줍니다.
매주 자동 갱신(01-5)에서 축적된 버전 이력을 그대로 열람하는 탭입니다. "법이 언제, 왜, 어느 조문이 어떻게 바뀌었나"를 타임라인으로 봅니다.
제공 기능
일자별 타임라인 — 주간 갱신에서 감지된 실제 개정·폐지를 날짜별로 (신설은 제정일 기준 판별, 조례는 토글로 표시)
조문 단위 diff 3단계 — 조문 → 항·호(줄) → 단어 하이라이트. 바뀐 줄만 이전/개정 대조로 표시하고, 개정일자 표기만 바뀐 조문은 자동 생략
개정이유 — 법제처 제공 개정이유를 diff 상단에 표시 (왜 바뀌었는지)
별표·서식 변경 — 어느 별표가 신설/변경됐는지 + 원본 파일(PDF·HWP·HWPX) 링크
신규 부칙 — 공포번호·시행일·경과조치 내용 표시
법령 검색 → 전체 연혁 — 특정 법령을 검색하면 연도별 개정 빈도 차트 + 제정부터 현재까지 전체 버전 목록, 과거 개정 각각에 대해서도 동일한 조문 diff 열람 (law.go.kr 시행일별 연혁 API 연동)
교차(병렬) 개정 감지 — 두 개정이 병렬 진행돼 통합본이 병합 전인 경우 ⚠️ 배너로 안내 (공포일 기준 정렬로 최신본 판별)
정직한 한계
과거 연혁의 조문 diff는 국가법령(법률·시행령·시행규칙) 중심입니다. 조례·고시는 부칙 목록 기반으로 제한적으로 제공됩니다.