Files
llm-wiki/rules/extraction-tiering.md
T

42 lines
5.2 KiB
Markdown

# rules/extraction-tiering — Tiered Extraction 계약 (싼 발췌 + 검증 게이트)
> `rules/` 의 방법론 규칙. multi-doc 작업에서 토큰 대부분은 **발췌(다파일 정독 input)** 가 먹는다 — 그런데 발췌 품질은 발췌자의 지능이 아니라 **검증 게이트(결정론 quote-verifier)** 가 보장한다. 따라서 발췌는 가장 싼 엔진에 위임할 수 있고, 비싼 모델(opus)은 *판단* 에만 쓴다.
> 집행 도구: `scripts/deep-research/deep_research/extract.py` (발췌 브로커 드라이버) · `deep_research/vote.py` (cross-vendor 적대 표) · `.claude/hooks/wiki_consistency_check.py --packets` (T0 팩킷) · `.claude/agents/extraction-broker.md` (T2 브로커 agent).
## 4-Tier 표
| Tier | 엔진 | 담당 | 비용 |
|---|---|---|---|
| **T0** | 결정론 (Python) | 린터·검사기·팩킷 빌더 (`wiki_structure_lint.py` · `wiki_consistency_check.py --packets` · quote-verifier) | 0 토큰 |
| **T1** | 외부 구독 CLI | **codex = 구조화 발췌** (`--output-schema` JSON 강제) · **agy = web 조사·요약**. quorum 표결은 **양쪽 1표씩** (cross-vendor 독립 실패 모드) | 별도 구독 |
| **T2** | haiku | 브로커·글루 — `extraction-broker`(드라이버 구동 + 실패분 재발췌) · `wiki-link-verifier` | 저 |
| **T3** | sonnet | **레포 쓰기 에이전트**`wiki-doc-author` · `wiki-source-summarizer`. 쓰기는 반드시 Claude 훅(claim gate / structure lint) 경유 | 중 |
| **T4** | opus | **판단** — 웹조사 방향 결정·작업 지시·모순 판결(`wiki-consistency-auditor`)·판정 3종(`branch-depth-auditor`/`coverage-auditor`/`project-readiness-auditor`) | 고 |
## 5계명 (Hard Rules)
| # | 계명 | 내용 |
|---|---|---|
| **1** | **외부 CLI = read-only 추출기** | 드라이버(`extract.py`/`vote.py`)가 파일 내용을 줄번호 붙여 프롬프트에 내장 — 외부 엔진은 repo 에 접근하지 않는다. **레포 쓰기는 Claude 훅 경유만** (codex/agy 직접 쓰기 금지). |
| **2** | **무검증 발췌 소비 금지** | 외부 발췌의 모든 verbatim 인용은 quote-verifier(결정론 re-grep)를 거친다 — PASS/CORRECTED 통과분만 상위 티어로 올라간다. DROPPED(원문 부재 = 위조·의역)는 폐기. |
| **3** | **engine funnel 필수** | 어떤 엔진이 몇 파일을 처리/실패했는지 항상 기록 — **no silent engine swap**. digest 의 `**Engines:**` 행 + ```wiki-stats``` 블록이 증거. |
| **4** | **opus 컨텍스트에 raw corpus 반입 금지** | opus 는 digest + `file:line` 포인터만 받는다. 판결이 모호한 지점만 해당 라인을 직접 Read (포인터 추적 — 전문 정독 아님). |
| **5** | **fallback 사다리 codex→agy→haiku→sonnet** | 각 단계 실패 시 다음 단계로 — 단계마다 funnel 에 기록. 사다리를 건너뛰거나 기록 없이 갈아타지 않는다. |
## 사용법 표 (작업별 1순위 / 검증 / fallback)
| 작업 | 1순위 | 검증 | fallback |
|---|---|---|---|
| bulk 파일 발췌 (다수 raw 정독 input) | `extraction-broker` → `cd scripts/deep-research && python3 -m deep_research.extract --backend codex ...` (구조화=codex 우선, web성 질문=`--backend antigravity`) | quote-verifier 내장 (PASS/CORRECTED/DROPPED) | 실패 파일은 broker(haiku) 직접 재발췌 → 그래도 실패면 sonnet lane |
| quorum 적대 표결 (lint CRITICAL≥5 등) | `wiki-adversarial-reviewer`(Claude) 1표 + `python3 -m deep_research.vote --backend codex` 1표 + `--backend antigravity` 1표 | `wiki_quorum.py` 결정론 합산 (≥2 REJECT=KILL) | 외부 표 실패 시 해당 표만 Claude 추가 dispatch 로 대체 + funnel 기록 |
| /sync 의미 대조 input | `python3 .claude/hooks/wiki_consistency_check.py --packets [slug]` (T0, 0토큰) | 결정론 추출이므로 검증 불요 | 팩킷 모호 시 auditor 가 해당 원문 라인만 Read |
| 합성·추출 권고 (synthesis) | `wiki-research-lane` — **검증된 digest 를 1차 input 으로 소비** (직접 전수 정독은 broker 불가 시 fallback) | digest 인용은 이미 verifier 통과분 | broker 불가 시 기존 직접 정독 모드 |
| 레포 쓰기 (raw/wiki 문서) | `wiki-doc-author` · `wiki-source-summarizer` (T3 sonnet, 훅 경유) | claim gate + structure lint (PreToolUse/PostToolUse) | — (외부 엔진으로 대체 금지 — 계명 1) |
| 링크·구조 감사 | `wiki-link-verifier` (T2 haiku) + `wiki_structure_lint.py` (T0) | self-grep 카운트 일치 | — |
| 판결·게이트 (모순/깊이/완전성/readiness) | T4 opus 판정 agent 4종 | wiki-verdict 스키마 훅 검증 | 하향 금지 — 판단은 싼 티어로 내리지 않는다 |
## 한계
- **외부 모델 coverage 누락 리스크** — codex/agy 가 관련 라인을 못 찾으면 digest 에 *없는 것* 은 검증 게이트가 못 잡는다 (verifier 는 위조를 잡지, 누락은 못 잡음). 완화: funnel 균형 감시(파일별 인용 0건은 의심) + 핵심 작업은 **cross-vendor 2-pass** (codex·agy 양쪽 발췌 후 합집합).
- **구독 율제한** — 외부 CLI 는 rate limit 이 있다. fan-out 은 bounded (`extract.py` CONCURRENCY=3) — 무한 병렬 금지, 대량 작업은 배치 분할.