전사 지식베이스 — privacy-safe 컴파일 파이프라인
바딧 · 2026.07 – 현재 · 1인 설계·구현·운영 · 수집·비식별 운영 중 · 주간 컴파일 일시 중지
- Python
- GPU NER
- Claude API
- cron
사내 대화를 LLM이 컴파일해 유지보수하는 지식베이스. 검색이 아니라 컴파일된 문서에서 답하도록 설계했다.
- 12채널 수집사내 메신저
- 비식별화 2레이어정규식 + GPU NER
식별번호는 평문 차단, 농장명은 단방향 해시 코드. 공공기관명 과마스킹은 해제
- LLM 컴파일원문 → 유지보수되는 문서
- 사람 검토·머지NER 정확도 < 95%
개인정보 최종 게이트는 자동화하지 않는다고 판단한 지점
- 위키
- 에이전트 질의컴파일된 문서에서만 답
컴파일은 초안 브랜치까지만 자동이다. 머지는 사람이 하고, 성공도 알린다 — 조용한 성공은 또 다른 정지다.
문제
축적된 사내 대화에 답이 있는데 찾을 수가 없었다. 흔한 처방은 대화를 그대로 임베딩해 검색하는 것이다. 그런데 원문 대화는 서로 모순되고, 번복되고, 맥락이 빠져 있다. 검증되지 않은 원문을 근거로 답하면 확신에 찬 오답이 나온다.
그리고 대화에는 사람·농장·개체 식별자가 섞여 있다. 외부 LLM에 그대로 보낼 수 없었다.
한 일
검색이 아니라 컴파일로 갔다. 원문에서 답하지 않고, LLM이 원문을 읽어 유지보수하는 문서에서 답하게 했다.
파이프라인: 채널 수집 → 비식별화 2레이어(정규식 + GPU NER) → LLM 컴파일 → 위키 → 에이전트 질의
- 비식별화 정밀도를 양방향으로 손봤다. 식별번호 평문 노출을 181건에서 0건으로 막고, 농장명은 하나의 자리표시자로 뭉개지 않고 단방향 해시 코드(고유 135개)로 바꿔 문서 안에서 서로 구분되게 했다. 반대로 공공기관명처럼 가리면 안 되는 것을 가리던 규칙은 풀었다 —
축산물품질평가원이 “축산” 때문에 농장명으로 가려지고 있었다. 과마스킹은 문서를 쓸모없게 만든다. 어느 쪽이든 규칙을 문서로 남기고 회귀 assert 20건으로 묶었다. - 컴파일을 주간 배치로 자동화했다. 손으로 돌리던 컴파일이 2주 동안 멈춰 있었고, 그 사이 답변 근거가 전부 검증 안 된 원문으로 퇴화해 있었다. 자동화는 초안 브랜치까지만 하고, 성공도 알림을 보낸다.
- 최종 검토·머지는 사람이 유지하기로 했다. NER 정확도가 90~95%에 머물러서, 개인정보의 마지막 게이트는 자동화하지 않는 게 맞다고 판단했다.
결과
자동화할 것과 사람이 잡을 것의 경계를 감이 아니라 정확도 수치로 그었다.
첫 백로그 컴파일(12분 · $7.34)로 문서가 5페이지에서 13페이지가 됐고, 리뷰에서 개인정보 유출은 0/6이었다. 질문하면 원문 검색이 아니라 컴파일된 페이지를 인용해 답한다. 지금은 수집·비식별 단계는 매일 돌고, 유료인 주간 컴파일만 멈춰 두었다. 자동화할 것과 사람이 잡을 것의 경계를 정확도 수치로 그은 것이 이 프로젝트에서 가장 중요한 결정이었다.
홍길동 님, 한빛농장 COW-000000 개체 알림입니다. 문의는 010-0000-0000 또는 farm@example.com 으로 주세요.
아직 식별자가 남아 있다 — 외부 LLM 전송 차단
정규식은 형태가 고정된 식별자(전화·이메일·개체번호)를 잡는다. 사람 이름과 농장명은 형태가 없어 문맥으로만 알 수 있고, 그래서 NER 레이어가 따로 필요하다. 예시 문장은 형태만 본뜬 가공 데이터다.
측정 조건
- 대상
- 사내 메신저 12채널 대화
- 표본
- 첫 백로그 컴파일 1회 — 12분 · $7.34 · 문서 5 → 13페이지
- 검증
- NER 정확도가 90~95%라 개인정보 최종 게이트는 자동화하지 않고 사람 검토를 유지. 리뷰에서 개인정보 유출 0/6
비식별 규칙 변경은 정밀도와 과마스킹을 함께 봤다. 한쪽만 보면 문서가 쓸모없어지거나 식별자가 샌다.