e2c5471046
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8.8 KiB
8.8 KiB
id, title, category, status, verification_status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, created_at, updated_at, review_reason, merge_history, tags, raw_sources, applied_in, github_commit
| id | title | category | status | verification_status | canonical_id | aliases | duplicate_of | source_trust_level | confidence_score | created_at | updated_at | review_reason | merge_history | tags | raw_sources | applied_in | github_commit | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| intelligence-verification-layer | Intelligence 검증 레이어 | AI_and_ML | draft | applied |
|
A | 0.93 | 2026-06-13 | 2026-06-13 |
|
|
|
Intelligence 검증 레이어
🎯 한 줄 통찰 (One-line insight)
작은 로컬 LLM 의 환각·오류를 시스템이 잡으려면 "저렴한 결정론적 검사를 항상, 비싼 LLM 검사는 조건부로" 돌리고, 사용자 정정 한 번을 시스템 성장으로 환원하는 폐루프가 핵심이며, ConnectAI 는 Epistemic Guard(사전 억제)·Confidence Engine(측정)·Critic(사후 검수)·Correction Loop(학습)로 이를 계층화한다 [S1][S2][S3][S4].
🧠 핵심 개념 (Core concepts)
- Epistemic Guard (사전): 시스템 프롬프트에 "확실/추정/모름 3등급" 을 강제하는 블록을 주입. 검색 근거가 없을수록 지시가 강해진다("지어내지 말고 질문하라") [S3].
- Confidence Engine (측정): LLM 호출 없이 검색 그라운딩 신호 + 답변 텍스트 신호(정규식)만으로 0~100 확신도를 결정론적 산출. latency 0 [S2].
- Critic Agent (사후): 결정론적 검사가 문제를 신호할 때만 LLM 검수 1회 — 조건부 1-pass. 누락·근거 없는 단정·미결 구분을 검사 [S1].
- Correction Loop (학습): 사용자 정정을 Ground Truth 로 보고 레슨 저장 + 회귀 케이스 적립 + 약점 프로필 → 다음 턴 프롬프트에 자동 주입 [S4].
- CoVe vs Epistemic Guard 분업: CoVe 는 출처가 있을 때 주장-출처 매핑 검증, Epistemic Guard 는 출처 유무 무관 등급 표시 강제 [S3].
🧩 추출된 패턴 (Extracted patterns)
- 저렴한 것 항상, 비싼 것 조건부: 결정론적(정규식/카운트) 검사는 매 턴, LLM 검수는 신호가 있을 때만 — 로컬 모델 latency 비용 통제 [S1][S2].
- "확신도는 모델 자신감이 아니라 검증 가능성": 모델이 솔직히 "(확인 필요)" 를 쓰면 점수가 내려가는 게 올바른 동작 — 사용자 검토를 유도해야 하므로 [S2].
- 가중치 합산 + factor 기록: 확신도를 요인별 delta 합으로 계산하고 각 factor 를 footer 에 노출 — 점수가 왜 그렇게 나왔는지 설명가능 [S2].
- 정답지를 사람이 안 만든다: 정정 발화 자체가 Ground Truth. 회귀 테스트가 "같은 실수 반복?" 을 LLM-judge 로 판정 [S4].
- 통찰→행동의 기계화: 태그 통계가 리포트에 머물지 않고
buildSelfReviewBlock으로 다음 턴 시스템 프롬프트를 바꾼다(같은 태그 2회+일 때만) [S4]. - JSON 강건 파싱: LLM 의 JSON 출력에 잡설이 섞여도 첫 균형
{}블록을 스캔해 추출 [S1]. - fire-and-forget 캡처: 정정 캡처는 비동기로 흘려 응답 속도에 영향 없음 [S4].
📖 세부 내용 (Details)
Confidence Engine — 결정론적 가중 합산
중립 출발점 55에서 시작해 요인별로 가감한다 [S2]:
- 그라운딩: 청크 3건+ & topScore 0.5+ → +25, 1건+ → +12, 없음 → -15.
- 출처 인용 +8 / 모델 지식만 -5.
- 출처 충돌 건당 -8(최대 -16), 요청 모호성 -10.
- Requirement 커버리지 전부 충족 +10 / 누락당 -6(최대 -18).
- 헤지 표현 개당 -4(최대 -12). 구간: 90+ 높음 / 70-89 보통 / 50-69 낮음 / <50 매우 낮음(에스컬레이션).
Critic — 조건부 1-pass 검수
완전한 작성→비판→재작성 debate 는 로컬 Gemma latency 때문에 미룬다. v1 은 "커버리지 누락 또는 확신도 <70" 일 때만 Critic LLM 1회 호출, 결과를 답변 아래 보완 카드로 표시. maxRounds knob 만 준비해 두고 다회전은 후속 [S1].
Correction Loop — 정정 1회가 3곳을 성장
사용자 정정 → ① 감지(보수적 정규식) + LLM 분류(6개 오류 태그)
├→ 태깅된 레슨 저장 (lessons/)
└→ 회귀 케이스 적립 (.astra/eval/corrections.jsonl)
② 주간 성장 사이클: 회귀 재검사 + 태그 통계 → 약점 프로필
③ 약점 프로필 → 시스템 프롬프트 자기검토 블록 자동 주입
설계 원칙: 정답지는 정정 자체, 통찰→행동은 기계적, 모든 산출물은 사람이 열어 수정/삭제 가능(Permission Based Learning), 캡처는 fire-and-forget [S4].
폭주 방지 장치들
- 자기검토 블록은 같은 태그 2회+일 때만(1회성 실수로 프롬프트 어지럽힘 방지) [S4].
- 지식 공백 학습 큐는 같은 질문 1회만 등록(해시 id) + proposed 20건 쌓이면 사람이 정리할 때까지 중단 [S4].
⚖️ 모순 및 업데이트 (Contradictions & updates)
- 휴리스틱 가중치의 임시성: Confidence 가중치는 "휴리스틱 v1" 으로, 골든셋이 쌓이면 사람 평가와의 상관으로 보정 예정 — 현재 절대 점수보다 상대 비교 와 추세에 의미가 있다.
- 정규식 정정 감지의 한계: 보수적이라 미묘한 정정("음 그건 좀…")은 놓친다. 오탐이 레슨 노이즈를 만들기에 의도적으로 보수적.
- Critic 의 1-pass 한계: 다회전 debate 가 더 정확하지만 비용 때문에 보류 — 정확도 vs latency 트레이드오프의 현실적 타협.
🛠️ 적용 사례 (Applied in summary)
ConnectAI/src/intelligence/confidenceEngine.ts— 결정론적 확신도 + footer [S2].ConnectAI/src/intelligence/criticAgent.ts— 조건부 검수 + 균형 JSON 파싱 [S1].ConnectAI/src/intelligence/epistemicGuardBlock.ts— 사전 억제 프롬프트 [S3].ConnectAI/src/intelligence/correctionLoop.ts— 정정→레슨→약점프로필→프롬프트 폐루프 [S4].
💻 코드 패턴 (Code patterns)
// 1) 결정론적 확신도 — 요인별 delta 합산 + 설명가능 (src/intelligence/confidenceEngine.ts)
let score = 55; // 중립 출발점
if (retrieval.chunkCount >= 3 && retrieval.topScore >= 0.5) factors.push({ label: '검색 근거 강', delta: +25 });
else if (retrieval.chunkCount >= 1) factors.push({ label: '검색 근거 있음', delta: +12 });
else factors.push({ label: '검색 근거 없음', delta: -15 });
if (answer.hedgeCount > 0) factors.push({ label: '불확실 표시', delta: -Math.min(12, answer.hedgeCount * 4) });
for (const f of factors) score += f.delta;
score = Math.max(0, Math.min(100, Math.round(score))); // 0~100 clamp
// 2) 균형 괄호 JSON 추출 — LLM 잡설 내성 (src/intelligence/criticAgent.ts)
let depth = 0, end = -1, inString = false, escaped = false;
for (let i = start; i < raw.length; i++) {
const ch = raw[i];
if (escaped) { escaped = false; continue; }
if (ch === '\\') { escaped = true; continue; }
if (ch === '"') { inString = !inString; continue; }
if (inString) continue;
if (ch === '{') depth++; else if (ch === '}' && --depth === 0) { end = i; break; }
}
// 3) 통찰→행동 — 약점 통계를 다음 턴 프롬프트로 (src/intelligence/correctionLoop.ts)
const significant = profile.tagCounts.filter(t => t.count >= 2).slice(0, 2); // 2회+만
// → "너는 최근 '사실오류' 정정을 N회 받았다. 수치·날짜는 근거 없으면 '확인 필요'로 표시하라."
✅ 검증 상태 및 신뢰도
- 상태: draft
- 검증 단계: applied
- 출처 신뢰도: A
- 신뢰 점수: 0.93
- 중복 검사 결과: 신규 생성 (New discovery)
🔗 지식 그래프 (Knowledge Graph)
- 상위/루트: ConnectAI 아키텍처 개요
- 관련 개념: 의존성 주입과 서비스 인터페이스, 프롬프트 엔지니어링 패턴, Agent 오케스트레이터 분해
- 참조 맥락: 로컬 LLM 이 자기검증·환각 억제·피드백 학습 루프를 설계할 때 참조.
📚 출처 (Sources)
- [S1] ConnectAI/src/intelligence/criticAgent.ts — 조건부 검수, 균형 JSON 파싱, 함수 주입
- [S2] ConnectAI/src/intelligence/confidenceEngine.ts — 결정론적 확신도 산출
- [S3] ConnectAI/src/intelligence/epistemicGuardBlock.ts — 3등급 인식론 가드
- [S4] ConnectAI/src/intelligence/correctionLoop.ts — 정정 폐루프, 약점 프로필, 폭주 방지
📝 변경 이력 (Change history)
- 2026-06-13: ConnectAI 코드 분석 기반 초안 생성.