본문으로 건너뛰기

ADR 0005 — 서류 자동 생성 아키텍처 · RAG 파이프라인 · 비식별화 · 품질 평가

2026-04-20

  • 상태: Accepted
  • 날짜: 2026-04-20
  • 회의: #006 서류 자동 생성 아키텍처 (Tier A, R1·R3 — R2 생략)
  • 참여자: Chair · P1 변호사 · P12 AI 아키텍트 · P15 RAG 품질 (신규) · P16 한국어 법률 LLM (신규) · P17 ML 엔지니어 (신규) · P7 보안/컴플라이언스 (원격)
  • 선행 ADR: 0001 · 0002 · 0003 · 0004

결정

1. RAG 파이프라인 — 12 블록 아키텍처

Phase 0 ~ Phase 3 점진적 구축. 모든 블록은 Firebase AI Logic (Gemini) 기반, 국산 소버린 AI 전환 대비 어댑터 경유.

#블록Phase 0Phase 1Phase 2
1수집HWP hwp.js 텍스트만 + HWPX·DOCX·PDF + Document AI OCR자동 축적 (사건 종결 훅) · HWP 5.0 pyhwp Cloud Function집단 소송 배치 수집 (Phase 4 직전)
2전처리·비식별화정규식 + Gemini zero-shot NER + k≥5 재식별 스캐너 + 수동 검토 큐 (회로차단기 fail-closed)Tier 1 운영 · 자동 마스킹 신뢰도 스코어Tier 2 옵트인 UI · 개인정보위 사전 협의
3청킹char/sentence 기반 (토크나이저 불일치 대비) · 조 경계 hard boundary · 512 token · overlap 15%의미 단위 semantic splitterPhase 4 원고별 청킹 (집단소송)
4임베딩Gemini text-embedding-004 (768 dim) 단일 · embeddingVersion Day 0embeddingVersion bump (프롬프트 개선)KURE-v1 앙상블 재검토 (문서 50만+ or 변호사 recall 불만 10건/월 트리거)
5인덱싱Vertex AI Vector Search 단일 인덱스 + restricts: tenantId 필수 · shard 1·replica 1 · docType namespace 논리 분리 (memory·publicCase·statute·template)shard 2·replica 1 · 추가 메타필터 (docType·year·caseType·outcome)shard 4·replica 2 · CMEK 일괄
6쿼리 확장없음 (원질의)법률 용어 동의어 사전 1,500개 (국가법령정보 Open API) · Pack 별 100단어LLM HyDE (weight 2 예산 내)
7검색top-K=20 · assertTenantFilter 강제 검증 (CI·런타임·Sentry 3중)필터 확장Phase 3+ 크로스 Pack 추천
8Rerank없음 (Phase 0 비용·latency)Gemini Flash 자체 cross-encoder (쌍비교 JSON 배열, top-20→top-5)KoBERT distill self-host (소버린 정합)
9컨텍스트 조립사무실 기억 + 사건 요약+ 조문·판례 실재 확인 · referencedLegacyDocIds 표시+ 집단소송 공통 청구원인 캐시 (Phase 4)
10생성Gemini Flash structured JSON + Zod 검증Gemini Pro 분기 (전략 보고서)tool-use (조문·계산 도구)
11후처리실재성 3단 방어 (사건번호 대법원 HEAD + 조문 국가법령정보 API + 변호사 체크리스트) · "AI 초안 · 변호사 검토 필수" 워터마크 고정환각 자동 샘플링 주 50건 변호사 검토 큐인용 역추적 UI (span-level citation)
12Audittenants/{tid}/auditLog/ 구조화 로그 (prompt hash·response hash·cost·latency·userId·embeddingVersion·retrieved docIds)BigQuery export · retrieval precision 로깅개인정보위 제출 포맷 · 90일 보관 자동 삭제

2. AiProvider 인터페이스 + weight 2 신설

AiProvider (Phase 0 신설):

// apps/web/lib/ai/provider.ts
export type ProviderId = "gemini" | "hyperclova" | "solar";

export interface AiProvider {
readonly providerId: ProviderId;
readonly embeddingVersion: string;
generate(contents, opts?): Promise<GenerateResult>;
embed(texts): Promise<EmbedResult>;
rerank(query, candidates): Promise<RerankResult>; // Phase 1+
}
  • Phase 0: GeminiProvider 단일 구현. lib/ai/client.tslib/ai/providers/gemini.ts 리팩터 6 eng-day (기존 8곳 호출부는 얇은 배럴 래퍼로 변경 최소화).
  • Phase 2 shadow traffic 5% (HyperCLOVA X·Upstage Solar) · Phase 3 점진 전환.
  • 대체 provider (OpenAI·Anthropic 등) 금지 (ADR 0004 §4, memory project-ai-stack.md).

weight 체계 확장:

weight기능실비 (Gemini Flash)
0대시보드 브리핑 (공유 캐시)$0.003
1문서·증거 요약$0.008
2 (신설)RAG 참조 (top-20 → rerank top-5 → 생성)$0.018
3전략 보고서$0.035

apps/web/types/ai-assist.ts:

export const ASSIST_WEIGHTS = {
dashboardBriefing: 0,
simple: 1,
ragReference: 2, // 신설
strategyReport: 3,
} as const;

assistLimit 재정의 (전 기능 무료 하 쓰로틀·어뷰징 방지):

ADR 0002 "모든 기능은 전 사용자에게 무료·한도 차별 없음" 정합. 플랜 차별 한도 (free/starter/pro) 폐기. 기존 CLAUDE.md 에 남은 3·35·140 수치는 ADR 0002 전 잔존으로 삭제 대상.

Chair 2026-04-20 확정 — 전 사용자 동일 한도 + 어뷰징 방어 단일값:

  • 단위: 사무소당 (Pool 모델, ICP 5인 이하 정합, Firestore 테넌트 카운터 재사용)
  • 초기 수치: 월 200 weight · 일 soft cap 40
  • 재조정: Phase 0 3개월 실사용 데이터 후 p99 × 1.5 로 정교화

산정 근거:

  • 변호사 1인 월 45150 weight 사용 추정 (Pack 1 사건 1020건 × AI 3~5회 × weight 평균 1.5)
  • ICP 평균 3인 사무소 × 70 ≈ 210 → 200 근접
  • 5인 사무소 여유 · 1인 사무소 일 soft cap 40 으로 악용 방지

목적: 플랜 차별이 아닌 AI 호출 비용 폭주 방지 + 어뷰징 방어 (ADR 0002 허용 범위).

Phase 2 후반 비용 시뮬레이션:

  • 2,000 사무소 × 월 200 상한 × 가동률 60% = 월 240,000 weight
  • Gemini 혼합 단가 $0.013 × 240K = 월 ~$4,680
  • Vector Search·Firestore 포함 월 $15,000~$18,000 (ADR 0004 $20,300 대비 ↓)
  • 5단 비용 통제 (§11) 적용 후 월 $10,000~$12,000 달성 가능

Latency 목표 (SLO):

  • weight 1: p50 1.5s / p99 5s
  • weight 2: p50 3s / p99 8s
  • weight 3: p50 10s / p99 30s
  • p99 30% 초과 시 Cloud Monitoring alert → degraded mode

3. 비식별화 4단 파이프라인 (회로차단기 fail-closed)

1단 — 정규식 (필수, 실패 시 중단):

  • 주민번호·여권·운전면허·외국인등록번호: 원칙 처리 금지, 마스킹 실패 = 파이프라인 즉시 중단
  • 계좌·카드: 완전 제거
  • 법적 근거: 개인정보보호법 제23조·제24조

2단 — NER (가명처리):

  • Phase 0: Gemini zero-shot structured output (few-shot 20예시) + klue/roberta-base 정규식 보조
  • Phase 2: 자체 Ko-BigBird 파인튜닝 (AI-Hub 행정문서 NER + 모두의 말뭉치 + 자체 라벨링 판례 500건)
  • 신뢰도 < 0.85: 수동 큐 강제
  • 미탐 <1% (주민번호·계좌 0%), 오탐 <15%

3단 — 재식별 스캐너 (k-익명성):

  • k ≥ 5 기본 (개인정보위 가이드 표준)
  • 고위험 문서 k ≥ 10 조건부 (법률 도메인·금액 > 1억·소액 원고·판례번호 인용 시)
  • 자동 플래그 조합:
    • 지명(동 단위) + 금액(1천만+) + 날짜(월 단위)
    • 사건번호 + 법원 (패턴 매칭 자동 마스킹)
    • 직업 + 연령대 + 구 단위 지역
    • 판례번호 직접 인용
  • LLM-as-judge 병행: Gemini 에게 "특정 개인 식별 가능 조합 나열" 프롬프트

4단 — 수동 검토 큐:

  • 사무소 변호사만 검토 (사무원 금지 — 변호사법 제26조 비밀유지의무 주체 아님)
  • 너홀로 DPO 월 5% 스폿체크 (수임약정서 조항 동의 전제)
  • 큐 1건당 15초 목표 (P1 현장 요구)
  • 신뢰도 < 0.9 문서 강제 경유

강도 레벨 법적 지위:

  • aggressive = 익명처리 (외부 송출·파인튜닝·연구 공개 가능)
  • moderate 기본 = 가명처리 (사무소 내 + 동의 내부 연구)
  • minimal = 개인정보 (Tier 1 참조만, 외부 송출 절대 금지, UI 선택지 제공 금지 — 오판 방지)

Phase 0 moderate 강제. Phase 2 Tier 2 RAG 는 aggressive 기본 + moderate 옵션.

4. 품질 평가 프레임워크

Ragas + 자체 Citation Validator:

  • tools/eval/citation_validator.py — 국가법령정보 Open API + 대법원 종합법률정보 HEAD
  • CI 통합: .github/workflows/rag-quality.yml — PR 라벨 needs-rag-eval 시 Ragas 실행
  • 회귀 임계: Faithfulness -3%p 하락 시 머지 차단

Ko-LegalQA 자체 벤치:

Phase문항구성평가자
0 (4주)100판례 40 · 조문 30 · 청구원인 20 · 계산 10시니어 변호사 2명 + P15 검수
1 (18M)300+ 절차·집단·adversarial+ 외부 자문 2명
2 (36M)500+ 도메인 확장도메인별 전문가

예산: 변호사 인당 20만원 × Pack 5 × Phase 3 = 600만원.

Phase 별 품질 목표 (hard gate):

지표Phase 0Phase 1Phase 2소버린 Go
Faithfulness0.850.920.950.90+
Citation Precision0.95 (hard, non-negotiable)0.970.980.95+
Citation Recall0.750.850.900.80+
Ko-LegalQA F10.700.800.880.80+
Retrieval Recall@100.850.920.950.90+
변호사 editRatio 중앙값<0.35<0.20<0.12<0.20

소버린 Go 조건 3개 동시 충족 (단일 지표 cherry-pick 금지): Ko-LegalQA F1 0.80+ AND Faithfulness 0.90+ AND Citation Precision 0.95+.

5. Hallucination 방어 3단

단계검증구현LatencyUX
1. 사건번호 재조회정규식 (\d{4}(가|다|나|고)(단|합|정)\d+) → 대법원 HEAD 병렬+200~400ms자동 삭제 + inline 경고
2. 조문 실재 확인국가법령정보센터 OpenAPI + 24h 캐시 (hit rate 95%+)+50~100ms하이라이트 경고 (자동 삭제 금지, 개정 false positive 대비)
3. 변호사 서명 전 체크리스트DocSignGate 컴포넌트 — 인용 3종 체크 안 하면 제출 불가UX ~15초미체크 강조

False positive 대응:

  • 조문 개정: HEAD 실패 시 3초 재시도 1회 → 경고만 (자동 삭제 X)
  • 폐지 조문: status=repealed 배지, 생성 허용
  • 관리자 화이트리스트: config/citationOverrides/{citationKey} Firestore 수동 승인

6. 변호사 수정 diff — 수집·활용 분리 (Chair 결정)

Chair 2026-04-20 결정: diff 수집은 Phase 0 즉시, 파인튜닝 활용은 Tier 3 (1년 유예 후, 변호사 개별 + DPA 2중 동의) 까지 금지.

수집 (Phase 0 부터):

  • 목적: 회귀 탐지·품질 모니터링·A/B 테스트
  • 스키마: cases/{id}/aiDrafts/{id}:
    {
    originalText, finalText,
    diff: {
    levenshtein, editRatio,
    sectionEdits: Record<string, number>,
    fullReplace: boolean,
    citationChanges: { added, removed, modified }
    },
    modelVersion, promptVersion, experimentId?,
    consentToTraining: boolean // Tier 3 진입 시 활용 가능
    }
  • 비식별화 4단 통과 후 저장 (P7 권고 수용)

활용 (파인튜닝) (Tier 3, ~1년 유예):

  • 조건: 변호사 개별 동의 + 사무소 DPA 동의 2중
  • Phase 2 까지는 수집만, 파인튜닝 데이터로 절대 미사용
  • Tier 3 진입 시 ADR 별도 발행

회귀 탐지:

  • baseline: 직전 30일 editRatio 중앙값 (문서 유형별)
  • 알람: rolling 7일 editRatio +15%p 상승 → Slack #p11-rag-alerts
  • citationChanges.removed > 0 비율 5% 초과 → hallucination 회귀 경보
  • fullReplace rate 10% 초과 → 프롬프트 롤백

A/B 인프라 (Phase 1+):

  • config/appMetadata.features.ai.experiments.{name}.rollout
  • deterministic bucketing: hash(tenantId + experimentId) % 100 < rollout * 100
  • 최소 샘플 200건/variant (statistical power 0.8)

7. Vector Search 격리 강화

  • 단일 인덱스 + restricts: tenantId 메타필터 (Pro tier 분리 폐기, ADR 0004 정합)
  • namespace 논리 분리: docType ∈ {memory, publicCase, statute, template}. 공용 판례는 tenantId=PUBLIC 부여, 쿼리 시 tenantId IN [myTid, PUBLIC]
  • assertTenantFilter 3중 방어:
    1. 유닛 테스트 (__tests__/tenant-isolation.test.ts)
    2. CI 차단 (apps/web/scripts/check-tenant-filter.ts AST 파서 → build fail)
    3. 런타임 guardedQuery + Sentry 즉시 알림
  • embeddingVersion 필수 필터assertEmbeddingVersion(query, current) 유닛 테스트 Phase 0 (silent corruption 방어)
  • Phase 2+: CMEK 테넌트별 암호화 전 tenant 일괄 (플랜 차별 없음)

8. 한국어 법률 특화

HWP 파싱 (Chair 결정 절충):

  • Phase 0: hwp.js 텍스트만 + "HWP 는 텍스트만 인식, HWPX·DOCX 권장" UI 경고 배너
  • Phase 1: pyhwp Cloud Function 분리 (표 추출 95%+)
  • Phase 2: OCR 폴백 (Document AI) 스캔 HWP
  • DOCX (mammoth) · HWPX 자체 XML 파서 · PDF (pdf-parse) 는 Phase 0 모두 지원

임베딩 모델 전환 계획:

  • Phase 0: Gemini text-embedding-004 단일 (768 dim) — 인프라 단순, Vertex 네이티브
  • Phase 1 트리거: 문서 50만+ OR 변호사 recall 불만 10건/월 달성 시 nlpai-lab/KURE-v1 (bge-m3 한국어 법률 파인튜닝) 앙상블 도입 (RRF)
  • 전환 시 embeddingVersion bump + 2-phase dual-write

한자·법원 정규화 (Phase 0 필수):

  • 한자 → 한글 변환 (hangul-js + 법률 한자 사전 10K)
  • 법원 명칭 변경 alias map (서울지법 → 서울중앙·동부, 법원행정처 공개 데이터)

NER:

  • Phase 0: Gemini zero-shot structured output + 정규식 2-pass
  • Phase 2: 자체 Ko-BigBird 파인튜닝 (AI-Hub + 모두의 말뭉치 + 자체 라벨링 500건)

9. 집단소송 모듈 Phase 4 이관 (ADR 0004 §1·§2 정합)

본 ADR 에서는 개별 사건 서류 자동 생성만 다룸. 집단소송 특수 설계 (원고 서브컬렉션·공통 RAG 캐시·배치 오케스트레이션·namespace 격리) 는 Phase 4 착수 시점 ADR 별도 발행.

Phase 0~3 동안 집단소송 기능 비활성. 원고 CSV 업로드·위임장 OCR·배치 생성 UI 차단.

10. Phase 0 fail-closed 우선순위 분리 (Chair 결정)

Chair 2026-04-20 결정: P7 fail-closed 5 조건 중 보험·DPA 만 Phase 0 착수 전 완료, 나머지 3개는 Phase 0 병행.

조건시점비용·기간
사이버 배상책임보험 10억+Phase 0 착수 전4주 · 연 500~800만
수임약정서·DPA 법률자문 완료본Phase 0 착수 전4주 · 200만
회로차단기 비식별화 1·3단계 구현Phase 0 Week 1~35 eng-day
Audit WORM (GCS immutable bucket)Phase 0 Week 2~43 eng-day
재식별 사고 SOP 문서화·교육Phase 0 Week 3~4법무 자문 2일

11. 비용·인프라 원칙

AI 비용 통제 5단 (월 $20K → $10~12K 압축 목표):

  1. 캐싱 계층화 (Phase 01, 8 eng-day) — weight 0 공유·prompt hash 7일 TTL → 2535% 절감
  2. Rate limit 3단 (Phase 0, 5 eng-day) — per-user·per-tenant·per-feature
  3. Batch 추론 (Phase 1, 10 eng-day) — Gemini Batch API 50% 할인 (야간 drain)
  4. 모델 티어링 (Phase 1, 12 eng-day) — Flash-Lite $0.10 · Flash $0.30 · Pro $2.50
  5. 로컬 추론 (Phase 3, 40 eng-day) — WebLLM · Cloud Run Gemma 2B self-host (Gemini API $8K/월 손익분기)

배포 아키텍처:

  • Cloud Run NER/embedding min=0·max=50 (cold start 3s 감수, idle $0)
  • 핵심 RAG 경로 min=1 warm pool (콜드 스타트 누적 8~12초 방지, 월 $40 추가)
  • Cloud Functions: OCR trigger·인덱싱 trigger·Audit trigger
  • Cloud Tasks: 배치 (Phase 4 집단소송 대비 설계만)
  • Firestore 분산 카운터 10 shard (Phase 1) — 공유 카운터 초당 1회 한계 방어

모니터링 SLO:

지표목표Alert
RAG p99< 3s> 5s 5분
생성 p99< 10s> 15s 5분
error 5xx< 0.5%> 2% 3분
refund rate< 3%> 7% 10분
일 AI 비용예산120% 즉시·150% paging

12. Phase 별 eng-day 추정

PhaseAI 파이프라인 (P12)MLOps (P17)합계
Phase 0282856 (4주 · 2명)
Phase 19560155 (5~6개월 · 2명)
Phase 218075255 (810개월 · 23명)
Phase 312090210 (79개월 · 23명)
총계423253676 eng-day

2명 풀스택 기준 Phase 3 완주 ~17개월.

배경

Pack 1 Phase 0 착수 선행 조건으로 서류 자동 생성 파이프라인 아키텍처를 실행 가능한 수준으로 확정해야 함. ADR 00010004 의 원칙(AX 3A·Firebase AI Logic·Tier 13·비식별화 4단·Vector Search 격리·Audit·무료)을 코드·비용·eng-day 로 구체화.

2026-04-20 Chair 추가 지시:

  1. 집단소송 모듈을 가장 마지막(Phase 4) 으로 이관
  2. 국산 소버린 AI 출시 전까지 Firebase AI Logic 만 사용 (대체 provider 금지)
  3. Phase 0 fail-closed 5 조건 중 보험·DPA 는 착수 전, 나머지 3개는 병행
  4. diff 수집·활용 분리

대안 검토

weight 2 신설 vs 확장 금지

  • 채택: weight 2 (RAG 참조) 신설 $0.018
  • 대안 A: 기존 weight 1 로 처리 → 실질 호출 빈도 부족 (RAG 참조가 주력 기능)
  • 대안 B: weight 3 재사용 → 비용 과다 ($0.035 × RAG 빈도)

임베딩 모델 Phase 0 앙상블 vs 단일

  • 채택: Gemini 단일 Phase 0
  • 대안: Ko-SRoBERTa 앙상블 Phase 0 → 이중 인덱스 비용 2x, 변호사 5명 PoC 에서 품질 차이 미체감

벡터 DB — Pro tier 인덱스 분리

  • 채택: 단일 인덱스 + restricts + namespace 논리 분리 (ADR 0004 §9 정합)
  • 대안: Pro tier 별도 인덱스 (월 $50/tenant) → ADR 0002 전 기능 무료 정합 위반

집단소송 구현 — Phase 2 편입 vs Phase 4 이관

  • 채택: Phase 4 이관 (Chair 결정). 복잡도·법적 리스크·운영 부담 최상
  • 대안: Phase 2 중반 편입 (ADR 0004 원안) → Chair 가 철회

diff 수집·활용

  • 채택: 수집 Phase 0 즉시 + 활용 Tier 3 시점
  • 대안: 수집·활용 모두 Tier 3 (P7 강경) → 회귀 탐지 불가, 품질 관리 실패
  • 대안: 수집·활용 모두 Phase 0 (실무 선호) → 법적 경계 부족

결정 근거

  • Firebase AI Logic 단일: Chair 2026-04-19·04-20 재확인 + memory project-ai-stack.md 정합. 대체 provider 도입은 memory 위반.
  • char 기반 청킹: 소버린 AI 전환 시 토크나이저 불일치로 청크 경계 shift (P16 숨은 폭탄) 방어. Phase 0 부터 char/sentence 기반 강제.
  • k=5 기본 + k=10 조건부: P16 표준 + P7 보수 균형. 고위험 문서만 엄격.
  • HWP 텍스트만 + 경고 UI: 변호사 HWP 의존 현실 + Phase 0 범위 제한. Phase 1 pyhwp 로 완성.
  • 사무소 변호사만 검토: 변호사법 제26조 비밀유지 주체. 사무원 대리 불가.
  • Citation Precision 0.95+ hard: Mata v. Avianca 교훈, 변호사 과실 배상 직결. Phase 0 hard gate.
  • 집단소송 Phase 4 이관: 시장 기회 (쿠팡 등) 가 있으나 제품 안정성·법적 리스크·운영 부담 우선. Phase 1~3 기본기 완성 후 재평가.

Minority Report (반대의견 보존)

P7 컴플라이언스 — k≥10 법률 도메인 보수 권고

"법률 도메인 특수성(소액 사건 원고 1~2명)고려 시 k≥5 는 너무 느슨. k≥10 권장."

현재 상태: k=5 기본 + 고위험 문서 k=10 조건부. Phase 2 DPIA 수행 시 재평가.

P7 컴플라이언스 — diff 활용 Tier 3 까지 완전 금지

"diff 에 적용되는 원문은 의뢰인 PII. diff + 원문 결합 시 재식별 가능. 파인튜닝 학습은 변호사 개별 + 사무소 DPA 2중 동의 필수."

현재 상태: 수집은 허용 (비식별화 통과 후), 파인튜닝 활용은 Tier 3 까지 금지. P7 권고 실질 수용.

P1 변호사 — Citation Precision 99.9% 미만 시 feature flag off

"초안 판례 인용 3회 연속 오류 = 영구 이탈. 99.9% 미만이면 베타 중단해야."

현재 상태: 0.95 hard gate 채택. 99.9% 는 aspirational 목표로 Phase 1 달성 시도. 95% 미만 시 feature flag off 자동화.

P17 ML 엔지니어 — 콜드 스타트 8~12초 UX 치명

"min=0 체인 시 첫 RAG 요청 8~12초. UX 치명."

수용: 핵심 경로 min=1 warm pool (월 $40 추가) 결정. ADR §11 반영.

P16 한국어 법률 LLM — 토크나이저 불일치 소버린 전환 폭탄

"Gemini SentencePiece → Solar BPE 전환 시 청크 경계 shift. 동일 500 token 이 380/580 변동."

수용: char/sentence 기반 청킹 Phase 0 강제 결정. ADR §1 블록 3 반영.

후속 과제

Phase 0 착수 전 (필수 선행)

  1. 사이버 배상책임보험 10억+ 가입 (4주·500~800만)
  2. 수임약정서·DPA 법률자문 완료본 배포 준비 (4주·200만)
  3. 외부 법률자문 — AI 기본법 2026.1 시행 고영향 AI 지정 여부 검토
  4. 국가법령정보센터 Open API 키 발급 (5일)
  5. Ko-LegalQA v0.1 100문제 변호사 섭외 착수

Phase 0 Week 1~4 (병행)

  1. embeddingVersion 필드 전 Firestore 컬렉션 도입 (1 eng-day)
  2. AiProvider 인터페이스 + GeminiProvider 구현 (6 eng-day)
  3. assertTenantFilter 3중 방어 (유닛·CI·런타임) (5 eng-day)
  4. assertEmbeddingVersion 유닛 테스트 (1 eng-day)
  5. 비식별화 4단 파이프라인 (정규식 + Gemini NER + 재식별 스캐너 + 수동 큐) (12 eng-day)
  6. 회로차단기 1·3단계 구현 (5 eng-day)
  7. Audit 로그 tenants/{tid}/auditLog/ 구조 (3 eng-day)
  8. Audit WORM (GCS immutable bucket) (3 eng-day)
  9. Cloud Run NER·embedding 서비스 배포 + min=0 (5 eng-day)
  10. 핵심 RAG 경로 warm pool min=1 설정 (1 eng-day)
  11. Cloud Logging·Monitoring SLO 대시보드 (5 eng-day)
  12. 재식별 사고 SOP 문서 + 전 직원 교육 (법무 2일)
  13. Ragas CI 파이프라인 (.github/workflows/rag-quality.yml) (3 eng-day)
  14. citation_validator.py (국가법령정보 API) (4 eng-day)
  15. 한자·법원 alias map (Phase 0 필수) (2 eng-day)

Phase 0 종료 시 Go/No-Go 관문

  • 대여금 계산 정확도 99.5%
  • 내부 변호사 3명 dogfood 주 3회+
  • Ko-LegalQA v0.1 Faithfulness 0.85+ · Citation Precision 0.95+
  • 비식별화 4단 파이프라인 End-to-End 작동
  • Audit 로그 완결성 검증
  • assertTenantFilter CI 0건 우회

Phase 1~3 상세는 각 Pack 출시 시점에 별도 체크리스트.

Phase 4 착수 조건 (집단소송)

  • Phase 1~3 모두 안정화 (AX L3+ 30%+·NRR 120%+)
  • 소버린 AI 전환 완료 (Go 조건 3개 동시 충족)
  • 변협 공식 협력 확보
  • 개인정보위 사전 협의
  • 사이버 보험 한도 30억+ 상향

변경 이력

  • 2026-04-20: 초안 작성 (Accepted). #006 R1 + R3 수렴 결과 반영. R2 생략 (합의 25개 두터움, Chair 선결정 2건).
  • 2026-04-20 (Amended, 같은 날): Chair 지적 반영 — §2 assistLimit "free 6 / starter 60 / pro 220" 플랜 차별 한도 삭제. ADR 0002 "전 사용자 무료·한도 차별 없음" 정합으로 전 사용자 동일 한도 + 어뷰징 방어 목적 단일값 으로 재정의.
  • 2026-04-20 (Amended, 같은 날): Chair 확정 — assistLimit = 사무소당 월 200 weight · 일 soft cap 40 · Phase 0 3개월 후 p99×1.5 재조정.
  • 2026-05-13 (Amended): Feature Registry STALE drift 분석에서 config/citationOverrides/{citationKey} collection 이 코드 미구현 (Pack 1 citation-verification 의 관리자 화이트리스트 계획상 placeholder) 로 식별됨. 현재 외부 API 누락 조문 예외 처리는 수동 (운영팀 직접 처리). 자동 화이트리스트는 Pack 1 confidence threshold 운영 데이터 축적 후 별도 PR 거리. 본 ADR 의 언급은 향후 계획 placeholder 임을 명시.
  • 2026-05-14 (Amended): 출시 1주일 전 AI 어시스트 한도 검증 sweep 에서 drift 식별. 위 2026-04-20 amendment 의 "사무소당 월 200 weight · 일 soft cap 40" 은 Chair 확정 시점 의도값 이지만 실제 런타임은 다름:
    • 현재 런타임 SSoT (Firestore + apps/web/lib/metadata/defaults.ts): assistLimit = 60, 일 cap 미구현. PR #273 (Task #28 Step 2, 2026-04-19) 의 ADR 0002 정합 ("어뷰징 방어 보수적 단일값 — Pro 최대값 아닌 중간값") 으로 60 으로 설정 후 갱신 안 됨.
    • 운영 정책: 출시 시점 보수적 60 운영. Phase 0 3개월 사용자 데이터 축적 후 200 + 일 cap 40 재조정 검토. 한도 변경은 CLAUDE.md "스키마 변경 시 4곳 + Firestore 동기화 필수" 절차 따름.
    • 모든 한도 동작 검증 통과 (PR #2277): atomic 트랜잭션 check+increment · weight 0/1/3 분기 · 부분 차감 금지 · feature kill switch · tenant aiBanned · 환불 · 텔레메트리 · 월간 자동 reset (monthKeyKST) · executeAiAction wrapper 7+ 호출처. 11 unit test cover.
    • 비용 영향 (60 한도 기준): 사용자당 월 최대 약 1,500-2,000원 AI 비용 (Vertex AI Gemini). 50 사무소 = 약 10만원/월. 진짜 한도 200 으로 올리면 사용자당 약 6,000원, 50 사무소 약 30만원/월.