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 0 | Phase 1 | Phase 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 splitter | Phase 4 원고별 청킹 (집단소송) |
| 4 | 임베딩 | Gemini text-embedding-004 (768 dim) 단일 · embeddingVersion Day 0 | embeddingVersion 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 추천 |
| 8 | Rerank | 없음 (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) |
| 12 | Audit | tenants/{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.ts→lib/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인 월 45
150 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 0 | Phase 1 | Phase 2 | 소버린 Go |
|---|---|---|---|---|
| Faithfulness | 0.85 | 0.92 | 0.95 | 0.90+ |
| Citation Precision | 0.95 (hard, non-negotiable) | 0.97 | 0.98 | 0.95+ |
| Citation Recall | 0.75 | 0.85 | 0.90 | 0.80+ |
| Ko-LegalQA F1 | 0.70 | 0.80 | 0.88 | 0.80+ |
| Retrieval Recall@10 | 0.85 | 0.92 | 0.95 | 0.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단
| 단계 | 검증 | 구현 | Latency | UX |
|---|---|---|---|---|
| 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] assertTenantFilter3중 방어:- 유닛 테스트 (
__tests__/tenant-isolation.test.ts) - CI 차단 (
apps/web/scripts/check-tenant-filter.tsAST 파서 → build fail) - 런타임
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:
pyhwpCloud 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~3 | 5 eng-day |
| Audit WORM (GCS immutable bucket) | Phase 0 Week 2~4 | 3 eng-day |
| 재식별 사고 SOP 문서화·교육 | Phase 0 Week 3~4 | 법무 자문 2일 |
11. 비용·인프라 원칙
AI 비용 통제 5단 (월 $20K → $10~12K 압축 목표):
- 캐싱 계층화 (Phase 0
1, 8 eng-day) — weight 0 공유·prompt hash 7일 TTL → 2535% 절감 - Rate limit 3단 (Phase 0, 5 eng-day) — per-user·per-tenant·per-feature
- Batch 추론 (Phase 1, 10 eng-day) — Gemini Batch API 50% 할인 (야간 drain)
- 모델 티어링 (Phase 1, 12 eng-day) — Flash-Lite $0.10 · Flash $0.30 · Pro $2.50
- 로컬 추론 (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=1warm 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 추정
| Phase | AI 파이프라인 (P12) | MLOps (P17) | 합계 |
|---|---|---|---|
| Phase 0 | 28 | 28 | 56 (4주 · 2명) |
| Phase 1 | 95 | 60 | 155 (5~6개월 · 2명) |
| Phase 2 | 180 | 75 | 255 (8 |
| Phase 3 | 120 | 90 | 210 (7 |
| 총계 | 423 | 253 | 676 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 추가 지시:
- 집단소송 모듈을 가장 마지막(Phase 4) 으로 이관
- 국산 소버린 AI 출시 전까지 Firebase AI Logic 만 사용 (대체 provider 금지)
- Phase 0 fail-closed 5 조건 중 보험·DPA 는 착수 전, 나머지 3개는 병행
- 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 착수 전 (필수 선행)
- 사이버 배상책임보험 10억+ 가입 (4주·500~800만)
- 수임약정서·DPA 법률자문 완료본 배포 준비 (4주·200만)
- 외부 법률자문 — AI 기본법 2026.1 시행 고영향 AI 지정 여부 검토
- 국가법령정보센터 Open API 키 발급 (5일)
- Ko-LegalQA v0.1 100문제 변호사 섭외 착수
Phase 0 Week 1~4 (병행)
embeddingVersion필드 전 Firestore 컬렉션 도입 (1 eng-day)AiProvider인터페이스 +GeminiProvider구현 (6 eng-day)assertTenantFilter3중 방어 (유닛·CI·런타임) (5 eng-day)assertEmbeddingVersion유닛 테스트 (1 eng-day)- 비식별화 4단 파이프라인 (정규식 + Gemini NER + 재식별 스캐너 + 수동 큐) (12 eng-day)
- 회로차단기 1·3단계 구현 (5 eng-day)
- Audit 로그
tenants/{tid}/auditLog/구조 (3 eng-day) - Audit WORM (GCS immutable bucket) (3 eng-day)
- Cloud Run NER·embedding 서비스 배포 + min=0 (5 eng-day)
- 핵심 RAG 경로 warm pool min=1 설정 (1 eng-day)
- Cloud Logging·Monitoring SLO 대시보드 (5 eng-day)
- 재식별 사고 SOP 문서 + 전 직원 교육 (법무 2일)
- Ragas CI 파이프라인 (
.github/workflows/rag-quality.yml) (3 eng-day) citation_validator.py(국가법령정보 API) (4 eng-day)- 한자·법원 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 로그 완결성 검증
assertTenantFilterCI 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만원/월.
- 현재 런타임 SSoT (Firestore +