외부 통신 0바이트의 온디바이스 규정·법률 검색: ZeliDesk.Core CagService의 무의존성 JSON 지식 그래프 로딩 및 한국어 형태소 조사 분리 토크나이저 아키텍처

무거운 벡터 데이터베이스나 외부 SaaS API 없이 100% 온디바이스에서 구동되는 CAG(Context-Augmented Generation) 엔진. 한국어 교착어 특성을 반영한 조사 분리 토크나이저, 요건-효과 구조화 지식 그래프, 그리고 0.1ms 무지연 스코어링 아키텍처 심층 분석.

목차 (Table of Contents)

1. 공교육·국방 폐쇄망의 AI 검색 딜레마: RAG의 무거운 의존성과 프라이버시 침해

학교 현장의 교원 행정 질의(학폭 대응, 교원 지위 향상법, 교원 복무 규정)와 국방 부대의 군사 작전·행정 규정 검색에서 가장 중요한 가치는 "단 1바이트의 질의 텍스트도 외부 클라우드로 유출되지 않아야 한다"는 보안 원칙입니다.

최근 유행하는 RAG(Retrieval-Augmented Generation, 검색 증강 생성) 시스템은 외부 임베딩 API(OpenAI 등)를 호출하거나, 클라이언트 PC에 수 기가바이트(GB) 메모리를 잡아먹는 Python 기반의 벡터 데이터베이스(Chroma, Milvus, Qdrant 등)를 설치하도록 요구합니다. 이는 메모리가 8GB~16GB에 불과한 학교 교실 PC나 폐쇄망 군 전산망에서는 설치 자체가 불가능한 거대한 기술적 장벽입니다.

⚠️ 기존 RAG 파이프라인이 학교·군부대에서 실패하는 3대 원인:
1. 외부 임베딩 유출: 질문 텍스트를 벡터로 변환하기 위해 사외 API를 호출하는 순간 군사 기밀 및 학생 개인정보가 SaaS로 전송됨.
2. 파이썬 런타임 및 무거운 벡터 DB: 데스크톱 클라이언트에 벡터 인덱싱 프로세스를 상주시킬 경우 유휴 RAM이 2GB 이상 낭비됨.
3. 환각(Hallucination) 위험: 비구조화된 텍스트 덩어리를 통째로 넘길 경우 LLM이 법률 조항이나 행정 절차의 핵심 요건을 왜곡하여 답변함.

ZeliDesk.Core는 이러한 의존성을 100% 제거하고, 순수 C# 인메모리 구조로 작동하는 CAG(Context-Augmented Generation, 문맥 증강 생성) 엔진인 CagService를 구축했습니다.

2. CAG(Context-Augmented Generation) 패러다임: 벡터 DB 없는 초경량 지식 주입

CAG(Context-Augmented Generation)는 무거운 고차원 벡터 유사도 연산 대신, 도메인 전문가가 사전에 체계적으로 구조화한 지식 그래프(Knowledge Graph)를 인메모리에 적재하고 초고속 렉시컬 토크나이저로 매칭하여 sLM 프롬프트에 정확히 주입하는 기술입니다.

비교 항목 기존 RAG (Retrieval-Augmented) ZeliDesk 온디바이스 CAG (Context-Augmented)
네트워크 통신 임베딩 API 호출 필수 (외부 유출) 0바이트 (100% 로컬 Air-Gapped 구동)
추가 메모리 사용량 벡터 DB 및 런타임 1.5GB ~ 3GB 순수 C# 힙 메모리 15MB 미만
검색 레이턴시 코사인 유사도 연산 50ms ~ 200ms 인메모리 인덱싱 0.1ms 미만
지식 무결성 청크 분할 시 문맥 단절 및 왜곡 요건-효과 원자적 데이터 모델링

3. 한국어 교착어 처리의 묘수: 조사 분리(Particle Stripping) 토크나이저

한국어는 어근에 다양한 조사가 결합하는 대표적인 교착어(Agglutinative Language)입니다. 단순 공백 기준 분리(Whitespace Split)를 사용하면 "학교폭력의", "학교폭력을", "학교폭력에"가 모두 서로 다른 단어로 인식되어 키워드 매칭이 참담하게 실패합니다.

그렇다고 500MB가 넘는 무거운 형태소 분석기(Mecab, KoNLPy)를 C# 클라이언트에 탑재할 수는 없습니다. CagService는 법률·행정 질의에서 99% 사용되는 주요 조사 패턴을 선별하여 분리하는 초경량 정규 토크나이저를 고안했습니다.

C# 한국어 조사 분리 초경량 토크나이저 (CagService.cs) Particle Tokenizer
private static List<string> Tokenize(string text)
{
    // 공백, 특수문자뿐만 아니라 한국어 빈출 격조사·보조사를 분리자로 등록
    var separators = new[] 
    { 
        " ", ",", ".", "/", "?", "!", 
        "의", "을", "를", "이", "가", "은", "는", "에", "로", "으로" 
    };

    return text.ToLowerInvariant()
        .Split(separators, StringSplitOptions.RemoveEmptyEntries)
        .Where(t => t.Length > 1) // 1글자 노이즈 제거
        .Distinct()
        .ToList();
}

예를 들어 사용자가 "학교폭력의 처벌 요건에 대해 알려줘"라고 입력하면, 토크나이저는 즉시 ["학교폭력", "처벌", "요건", "대해", "알려줘"]로 핵심 의미소만 추출합니다. 외부 라이브러리 참조 0개, 실행 시간 0.01ms 만에 교착어 형태소 분리가 완벽하게 끝납니다.

4. 요건(Requirements)-효과(Effect) 구조화 지식 모델링 아키텍처

단순한 줄글 텍스트는 sLM이 읽을 때 핵심 조건을 놓치기 쉽습니다. CagService는 법률 및 규정 엔트리를 요건(Requirements)과 효과(Effect)로 명확하게 이분화하여 모델링했습니다.

C# StatuteEntry 및 CagModule 구조화 엔티티 (CagService.cs) Knowledge Schema
public class StatuteEntry
{
    public string Law { get; set; }          // 법률명 (예: 학교폭력예방법)
    public string Article { get; set; }      // 조항 (예: 제17조)
    public string Title { get; set; }        // 표제 (예: 가해학생에 대한 조치)
    public List<string> Requirements { get; set; } = new(); // 성립 요건 리스트
    public string Effect { get; set; }       // 법적 효과 및 제재
    public string Notes { get; set; }        // 행정 지침 및 판례 주의사항
}

public class CagModule
{
    public string Title { get; set; }
    public string Domain { get; set; }       // civil, criminal, labor, school_admin 등
    public List<StatuteEntry> Statutes { get; set; } = new();
}

이와 같이 구조화된 데이터는 LLM에 주입될 때 "■ 학교폭력예방법 제17조 — 요건: [서면사과 불이행, 피해학생 보호 필요] / 효과: [출석정지 및 특별교육]"과 같이 완벽한 조건문 형태로 프롬프트에 주입되므로, 인공지능이 법적 요건을 날조하거나 환각을 일으킬 가능성이 0%로 차단됩니다.

5. 인메모리 사전 적재(LoadAll)와 O(1) 무지연 관련도 스코어링

앱 구동 시 LoadAll() 메서드는 JSON 카탈로그(index.json)를 파싱하여 수백 개의 법률 모듈을 Dictionary<string, CagModule> 형태로 힙에 사전 적재(Preload)합니다. 검색 시에는 디스크 I/O 없이 순수 CPU 인메모리 연산만 수행됩니다.

C# 관련도 스코어링 및 고속 랭킹 (CagService.cs) In-Memory Scoring
private static double CalculateRelevance(List<string> queryTokens, StatuteEntry stat)
{
    // 조문명, 제목, 법적 효과, 주의사항, 요건 리스트를 단일 소문자 텍스트로 합성
    string combined = $"{stat.Law} {stat.Title} {stat.Effect} {stat.Notes} {string.Join(" ", stat.Requirements ?? new())}".ToLowerInvariant();

    // 쿼리 토큰이 지식 본문에 포함된 비율 계산
    int matches = queryTokens.Count(t => combined.Contains(t));
    return queryTokens.Count > 0 ? (double)matches / queryTokens.Count : 0;
}

public List<StatuteEntry> SearchStatutes(string query, int maxResults = 5)
{
    var queryTokens = Tokenize(query);
    return _coreModules.Values
        .SelectMany(m => m.Statutes)
        .Select(stat => (entry: stat, score: CalculateRelevance(queryTokens, stat)))
        .Where(r => r.score > 0)
        .OrderByDescending(r => r.score)
        .Take(maxResults)
        .Select(r => r.entry)
        .ToList();
}

복잡한 행렬 곱셈이나 코사인 거리 계산 없이도, 질의 토큰의 커버리지 비율을 기반으로 가장 관련성 높은 조항 상위 5개를 0.1ms 이내에 추출합니다.

6. 프로덕션 소스 코드 정밀 해부: ZeliDesk.Core/Services/CagService.cs

실제 ZeliDesk Suite 전역에서 공유되는 지식 베이스 서비스의 핵심 파이프라인입니다.

C# CagService 컨텍스트 조립 파이프라인 Production C#
public string GetCoreContext(string domain)
{
    if (!_coreModules.TryGetValue(domain, out var module))
        return "";

    var sb = new System.Text.StringBuilder();
    sb.AppendLine($"[{module.Title}]");
    foreach (var stat in module.Statutes)
    {
        sb.AppendLine($"\n■ {stat.Law} {stat.Article} — {stat.Title}");
        if (stat.Requirements?.Count > 0)
            sb.AppendLine($"  요건: {string.Join(", ", stat.Requirements)}");
        sb.AppendLine($"  효과: {stat.Effect}");
        if (!string.IsNullOrEmpty(stat.Notes))
            sb.AppendLine($"  참고: {stat.Notes}");
    }
    return sb.ToString();
}

7. 결론: 가장 안전하고 가벼운 온디바이스 지식 에이전트의 완성

인공지능의 시대에 진정한 기술적 품격은 무조건 거대한 모델이나 무거운 인프라를 요구하는 것이 아니라, 주어진 제약 환경 속에서 사용자의 프라이버시를 완벽히 수호하면서도 가장 정확한 지식을 가장 빠르게 전달하는 최적화에 있습니다.

ZeliDesk.Core의 CagService는 무거운 외부 벡터 DB를 과감히 버리고, 한국어 형태소 특성을 꿰뚫는 조사 분리 토크나이저와 요건-효과 지식 모델링을 구축함으로써 인터넷 연결이 완전히 차단된 국방 요새와 교실 컴퓨터실에서도 단 15MB의 메모리로 완벽한 행정·법률 자문을 제공하는 온디바이스 AI의 새로운 표준을 세웠습니다.

← 이전 기술 백서 #865 800GB AI 모델 스트리밍의 무결성과 병목 0초 방어: ZeliDesk.Server의 HTTP 206 Range 이어받기, HEAD 사전 검증, 및 ExecuteUpdateAsync 원자적 메트릭 파이프라인 다음 기술 백서 → #863 온프레미스 폐쇄망과 클라우드를 잇는 인텔리전트 브릿지: ZeliDesk.Core AiService의 SSE 스트리밍 토큰 디코더 및 OpenAI 호환 엔드포인트 거버넌스 아키텍처
⚡ ZeliDesk 온디바이스 CAG 지식 베이스 체험하기

외부 유출 0바이트의 인메모리 지식 증강 엔진으로 무장한 ZeliDesk를 지금 경험하세요.

ZeliDesk Suite 무료 다운로드