생명과학(Life Sciences) 분야의 대다수 AI 문서 초안 작성 도구들은 컴플라이언스(규제 준수)를 사후 고려 사항 정도로 취급합니다. 유려한 문장을 생성하고 운이 좋으면 몇 가지 출처를 인용하기도 하지만, 결국 QA(품질 보증) 전문가가 감사 준비가 가능한 문서로 역공학(reverse-engineering)해야 하는 텍스트 덩어리를 던져줄 뿐입니다. AI는 빠른 속도로 찬사를 받고, 그에 따른 규제 위험은 품질 팀이 고스란히 떠안게 됩니다.
우리는 전혀 다른 방식을 택했습니다. GxP-RAG는 컴플라이언스 아키텍처가 단순한 기능 플래그(feature flag)가 아닌 시스템의 기반 그 자체인 오픈소스 문서 작성 시스템입니다. 모든 절차적 단계(procedural step)는 명확한 출처를 인용합니다. 모든 전자서명은 SHA-256 다이제스트를 생성합니다. 모든 감사 기록(audit record)은 이전 기록과 암호학적으로 체이닝(chaining)됩니다. 또한 ALCOA+ 평가 엔진은 초안이 사람 검토자에게 도달하기 전에 컴플라이언스 점수를 자동으로 평가합니다.
이는 단순히 규제 관련 프롬프트를 얹은 챗봇이 아닙니다. 모든 계층에 안전장치(가드레일)가 내장된 구조화된 초안 작성 파이프라인입니다.
아키텍처: 5개의 계층, 하나의 절대적 제약조건
이 시스템에는 엄격한 제약조건(hard constraint)이 존재합니다: 인적 검토(human review), 암호학적 출처 검증(cryptographic provenance), 그리고 규제 컴플라이언스 검증 없이는 어떠한 AI 생성 콘텐츠도 승인 상태(approved state)에 도달할 수 없다는 것입니다. 시스템의 모든 아키텍처 결정은 바로 이 제약조건으로부터 출발합니다.
┌─────────────────────────────────────────────────────────────────┐
│ GxP-RAG Architecture │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ PDF / DOCX │ │ Markdown │ │ JSON │ │
│ │ Upload │ │ / Text │ │ Structured │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ └───────────────────┼───────────────────┘ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ GxP Document Parser │ │
│ │ (auto-classify doc │ │
│ │ type, extract ID, │ │
│ │ detect sections) │ │
│ └────────────┬────────────┘ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ Hierarchical Chunker │ │
│ │ (section-aware, 600w, │ │
│ │ 100w overlap) │ │
│ └────────────┬────────────┘ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ FastEmbed (local) │ │
│ │ BAAI/bge-small-en-v1.5 │ │
│ └────────────┬────────────┘ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ Qdrant Vector DB │ │
│ │ (payload indexing + │ │
│ │ metadata filtering) │ │
│ └────────────┬────────────┘ │
│ │ │
│ ┌──────────────────┼──────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Pydantic AI │ │ Compliance │ │ HITL │ │
│ │ Agent │ │ Engine │ │ Approval │ │
│ │ (typed out) │ │ (ALCOA+ │ │ Workflow │ │
│ └─────────────┘ │ scoring) │ │ (e-sig + │ │
│ └──────────────┘ │ SHA-256) │ │
│ └──────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ Tamper-Evident Audit │ │
│ │ Trail (JSONL + SHA-256 │ │
│ │ hash chain) │ │
│ └─────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
여섯 개 계층으로 구성된 이 아키텍처의 각 계층은 규제 기관, 감사관(auditor), 또는 품질 관리자가 이전 계층에서는 답할 수 없는 질문을 던질 때 이를 명확히 입증하기 위해 존재합니다.
레이어 1: RAG 파이프라인 — 로컬 임베딩이 중요한 이유
검색 파이프라인은 벡터 데이터베이스로 Qdrant를 사용하며, FastEmbed를 통해 BAAI/bge-small-en-v1.5 모델로 로컬에서 직접 임베딩을 생성합니다. 이는 외부 API 기반 임베딩 서비스 대신 의도적으로 내린 설계 결정입니다.
그 이유: 규제 환경에서는 모든 외부 API 호출이 잠재적인 데이터 유출 경로이자 반드시 밸리데이션(검증)을 거쳐야 하는 외부 의존성이 됩니다. 오염 사고에 관한 일탈 보고서를 외부 임베딩 API로 처리할 경우 해당 민감 텍스트가 사내 네트워크 외부로 유출됩니다. 반면 FastEmbed를 사용하면 384차원 벡터가 온프레미스(사내 환경)에서 지연 시간(latency) 없이 데이터 유출 위험 0(Zero Data Egress) 상태로 생성됩니다. 모델 크기는 130MB에 불과하며 CPU에서도 가볍게 구동됩니다.
청커(Chunker) 역시 단순한 슬라이딩 윈도우 방식을 사용하지 않습니다. GxP 문서의 특성을 고려하여 섹션을 인식(section-aware)합니다. 즉, ### 1.0 Purpose, ## 7.0 Procedure와 같은 번호 매김 헤더를 기준으로 문서를 분할하며, 표준 제목이 발견되지 않을 때만 문단 분할로 폴백(fallback)합니다. 또한 각 청크 앞에는 컨텍스트 헤더가 자동으로 추가됩니다:
Document: SOP-MFG-014 - Cleanroom Sanitization (Type: SOP, Dept: Manufacturing)
Section: 7.2 Surface Disinfection
7.2.1 Unidirectional Overlapping Wiping Technique...
이러한 컨텍스트 접두사(prefix)는 검색 품질을 극적으로 향상시킵니다. 임베딩 모델이 단순한 원시 문단 텍스트뿐만 아니라 문서의 고유 식별 정보와 섹션 제목을 함께 파악할 수 있기 때문입니다.
**문서 파서(Document Parser)**는 파일명과 문서 앞부분 2,000자의 키워드 휴리스틱을 분석하여 입력 문서를 9가지 GxP 범주(SOP, 작업 지침서(Work Instruction), 일탈 보고서(Deviation Report), 밸리데이션 프로토콜(Validation Protocol), 시정 및 예방조치(CAPA), 변경 관리(Change Control), 배치 제조 기록서(Batch Production Record), 분석 시험법(Analytical Test Method), 규제 가이드라인(Regulatory Guideline))로 자동 분류합니다. 또한 표준 패턴(SOP-XYZ-123, DEV-2024-001, CAPA-2024-012)에서 문서 ID를 추출하고, 마크다운 헤더 또는 Title: 필드에서 제목을, Version: 또는 Rev. 표기에서 버전을 자동으로 추출합니다. 덕분에 다양한 GxP 문서가 혼합된 폴더를 시스템에 그대로 넣더라도 수동 메타데이터 입력 없이 각 문서를 올바르게 분류, 태깅 및 인덱싱할 수 있습니다.
레이어 2: Pydantic AI — 구조화된 출력이 필수적인 이유
초안 작성 에이전트는 LangChain이나 단순 원시 API 래퍼가 아닌 Pydantic AI 기반으로 구축되었습니다. 그 이유는 명확합니다. 출력 스키마가 Pydantic 모델(GxPDocumentDraft)로 정의되어 모든 필드가 타입 검사(typed), 유효성 검증(validated), 문서화(documented)되기 때문입니다.
class GxPDocumentDraft(BaseModel):
doc_id: str
title: str
doc_type: DocumentType
version: str
department: str
purpose: str
scope: str
regulatory_standards: List[str]
responsibilities: Dict[str, str]
procedure_sections: List[GxPSection]
citations: List[Citation]
# ... 20+ more typed fields
GxPSection 내부의 각 ProceduralStep은 다음 속성을 포함합니다:
step_number— 계층적 번호 매김 (예:5.1.2)role_responsible— 권한이 부여된 구체적인 직무 역할 (모호한 “담당자”가 아닌 특정 직무)critical_parameters—"Temperature: 2-8°C","Agitation: 150 RPM"과 같은 주요 공정 매개변수(Critical Process Parameters, CPP)acceptance_criteria— 관찰 가능한 적격/부적격(Pass/Fail) 판정 기준verification_method— 해당 단계의 문서화 및 증빙 방식 ("Initial in batch record","Automated SCADA log")citations— 지식 베이스로 역추적 가능한 단계별 근거 출처
이것이 바로 일반 LLM이 “온도가 허용 범위 내에 있는지 확인한다”와 같이 생성하는 것과, “오토클레이브 챔버 온도가 121.0°C ± 0.5°C에서 최소 15.0분간 유지되는지 확인한다(QC 분석원). 판정 기준: 모든 열전대(thermocouple) 측정값이 120.5°C ~ 121.5°C 범위 내에 있을 것. 검증 방법: SCADA 데이터 로그를 내보내어 부록 A로 첨부함”과 같이 명확하고 통제 가능하게 생성하는 것의 차이입니다.
시스템 프롬프트는 다음 5가지 기본 규칙을 엄격히 강제합니다:
- 근거 기반 출처 추적성(Grounded Provenance) — 초안 작성 전 반드시 지식 베이스를 조회해야 하며, 모든 임계 기준치(critical limit)는 근거 문서, 섹션, 정확한 인용구를 명시해야 합니다.
- 명령문 어조(Imperative Voice) — 특정 역할에 할당된 명확하고 모호함 없는 능동적 지침을 사용합니다.
- 주요 공정 매개변수(Critical Process Parameters) — 모든 작업은 정량화된 허용 오차와 함께 합격/불합격 기준을 명시합니다.
- ALCOA+ 데이터 완전성(Data Integrity) — 동시 기록(contemporaneous recording) 지침 및 일탈 처리 프로토콜을 포함합니다.
- 구조적 완전성(Structural Completeness) — 목적, 적용 범위, 책임과 권한, 절차, 판정 기준, 인용 문헌, 서명 승인 요구사항을 빠짐없이 갖춥니다.
에이전트는 3가지 도구를 사용합니다: search_gxp_knowledge_base(메타데이터 필터링 기반 의미론적 검색), retrieve_document_details(문서 ID 기준 전체 청크 검색), validate_gxp_structure(GxP 구조적 요구사항에 대한 자체 검증). 에이전트는 ’첫째 검색, 둘째 작성, 셋째 검증’의 순서를 철저히 준수하도록 지시받습니다.
레이어 3: ALCOA+ 컴플라이언스 엔진
에이전트가 초안을 생성하면, 컴플라이언스 엔진은 ALCOA+ 원칙에 따라 결정론적(deterministic) 평가를 수행합니다. 이는 또 다른 LLM 호출이 아닙니다. 구조화된 출력물을 직접 검사하는 규칙 기반(rules-based) 채점 엔진입니다.
| ALCOA+ 원칙 | 점검 항목 | 점수 영향 |
|---|---|---|
| Attributable (귀속성) | 모든 절차 단계에 role_responsible이 지정되어 있는지 확인 |
역할이 누락된 단계가 있을 시 -15% |
| Contemporaneous (동시성) | 실시간 동시 기록 지침이 포함되어 있는지 확인 | 상시 통과 (프롬프트 수준에서 강제) |
| Accurate (정확성) | 정량화 가능한 판정 기준(Acceptance Criteria)이 정의되어 있는지 확인 | 기준 미발견 시 -20% |
| Complete (완전성) | 목적(Purpose), 적용 범위(Scope), 절차(Procedure) 섹션이 충실히 작성되었는지 확인 | 누락 섹션당 -10%, 절차 누락 시 -30% |
이 엔진은 컴플라이언스 점수(0~100%)를 산출하고, 중대한 결함(critical deficiencies)에 플래그를 지정하며, 주요 공정 매개변수(CPP)가 포함된 단계에 대한 위험 항목을 생성하고, 4대 규제 표준(FDA 21 CFR Part 211, FDA 21 CFR Part 11, EU Annex 11, ISPE GAMP 5)을 기준으로 평가를 수행합니다.
점수가 80% 미만이거나 중대 결함을 포함한 초안은 즉시 비준수(non-compliant)로 플래그가 지정됩니다. 이는 사람이 문서를 검토하기 전에 거치는 제1차 관문(Gate)입니다.
레이어 4: 21 CFR Part 11 전자서명을 적용한 HITL 승인 워크플로우
승인 워크플로우는 전체 시스템에서 가장 중요한 계층입니다. 전자 기록(electronic records) 및 전자 서명(electronic signatures)에 대한 21 CFR Part 11의 핵심 요구사항을 직접 구현합니다.
워크플로우 상태:
DRAFT → PENDING_APPROVAL → APPROVED / REJECTED / REVISION_REQUESTED
초안이 승인을 위해 제출되면 시스템은 다음 정보를 포함하는 ApprovalRequest를 생성합니다:
- 필수 검토자 역할 (기본값: SME 검토자 + QA 전문가)
- 변경 불가능하게 동결된(frozen) 문서 스냅샷
- 감사 추적(Audit Trail) 항목
검토자가 승인을 진행할 때 다음 항목이 포함된 **전자서명(Electronic Signature)**을 실행합니다:
- 서명자 성명(Printed name) — 서명자의 법적 성명
- 사용자 ID(User ID) — 고유 식별자
- 서명자 역할(Signer role) — 공인된 GxP 역할 (QA 전문가, QA 매니저, SME 검토자, 규제 담당자)
- 서명 의미(Signature meaning) — 공식 선언문 (기본값: “I confirm that I have reviewed this GxP document and approve its scientific, technical, and regulatory compliance”)
- 동시 기록된 UTC 타임스탬프(Contemporaneous UTC timestamp) — 서명 시점에 즉시 기록
- SHA-256 서명 다이제스트(Signature digest) —
{user_id}:{signer_name}:{role}:{meaning}:{timestamp}:{document_content}값을 기반으로 연산
서명 다이제스트는 서명된 정확한 콘텐츠에 대한 암호학적 서약(cryptographic commitment)입니다. 서명 후 문서가 단 한 글자라도 수정되면 다이제스트가 일치하지 않게 됩니다. 이는 단순한 체크박스 클릭이 아닙니다. 암호학적 증명이 뒷받침되는 법적 구속력을 지닌 전자서명입니다.
레이어 5: 위변조 방지(Tamper-Evident) 감사 추적(Audit Trail)
문서 생성, 지식 베이스 질의, 승인 요청, 서명, 반려 등 시스템 내에서 발생하는 모든 이벤트는 JSONL 형식의 감사 추적 파일에 기록됩니다. 각 레코드는 다음 필드를 포함합니다:
{
"event_id": "uuid",
"timestamp": "2026-08-17T07:00:00+00:00",
"event_type": "APPROVAL_GRANTED",
"doc_id": "SOP-MFG-042",
"user_id": "qa_lead_01",
"user_role": "QA_SPECIALIST",
"action_details": { "request_id": "APP-A1B2C3D4", "comments": "..." },
"signature": { "signer_name": "...", "signature_digest": "a3f2..." },
"previous_record_hash": "b7e1...",
"record_hash": "c9d4..."
}
previous_record_hash 필드는 각 레코드를 직전 레코드와 연결합니다. record_hash는 직전 해시를 포함한 레코드 전체에 대한 SHA-256 다이제스트입니다. 이는 블록체인과 개념적으로 동일한 암호학적 해시 체인을 형성하며, 단순하고 견고한 추가 전용(append-only) JSONL 파일 형태로 저장됩니다.
audit-verify CLI 명령어는 전체 체인을 순회하며 다음을 검증합니다:
- 모든
previous_record_hash가 이전 레코드의 실제 해시와 일치하는지 검증합니다. - 모든
record_hash가 레코드 내용으로부터 새로 계산한 해시와 일치하는지 검증합니다.
어떤 레코드라도 무단 수정, 삭제, 또는 중간 삽입되면 해시 체인이 손상되어 검증이 실패합니다. 이것이 바로 21 CFR Part 11에서 요구하는 ’위변조 방지 및 입증 가능성(tamper-evident)’의 본질입니다. 그 누구도 감사 이력을 은밀하게 조작할 수 없습니다.
멀티 LLM 제공업체(Provider) 아키텍처
시스템은 팩토리 패턴(Factory Pattern)을 통해 5가지 LLM 제공업체 제품군을 지원합니다:
| 제공업체 (Provider) | 지원 모델 | 주요 활용 사례 |
|---|---|---|
| OpenAI | GPT-4o, o3-mini, GPT-4.5-preview | 프론티어 품질, 고도화된 추론 |
| Anthropic | Claude 3.7 Sonnet, Claude 3.5 Sonnet, Claude 3 Opus | 복잡한 규제 및 절차적 추론 |
| Gemini 2.0 Flash, Gemini 1.5 Pro | 비용 효율적인 대규모 문서 생성 | |
| Ollama / Local | Llama 3.3, Qwen 2.5 72B, DeepSeek R1 | 에어갭(폐쇄망) 환경, 데이터 외부 유출 제로 |
| TestModel | 결정론적 테스트 출력 | CI/CD 파이프라인, 자동화 단위 테스트 |
Pydantic AI의 FallbackModel은 자동 제공업체 장애 복구(Failover)를 지원합니다. 예를 들어 OpenAI 서비스에 장애가 발생하면 시스템이 사람의 개입 없이 자동으로 Anthropic이나 사내 로컬 모델로 전환됩니다.
규제 환경에서 이것이 중요한 이유: 특정 단일 벤더 종속(Lock-in)을 방지할 수 있습니다. 주력 LLM 제공업체가 서비스 약관을 변경하거나 가격을 인상하거나, 중요한 문서 작성 주기 도중 장애를 겪더라도 환경 변수 하나만 변경하여 즉시 다른 제공업체로 전환할 수 있습니다. 구조화된 Pydantic 출력 스키마 덕분에 어떤 모델이 문서를 생성하든 문서의 형식과 구조는 완전히 동일하게 유지됩니다.
관측 가능성(Observability): Langfuse 연동
모든 초안 작성 세션은 Langfuse에서 계층화된 관측 구조(typed observation hierarchy)를 통해 추적됩니다:
- Agent 스팬(span) — 루트 작성 세션 (입력 프롬프트, 사용 모델, 사용자 컨텍스트)
- Retriever 스팬 — Qdrant 시맨틱 검색 (질의어, 필터 조건, 결과 건수, 유사도 점수)
- Generation 스팬 — Pydantic AI 모델 실행 (모델명, 입출력 토큰 및 데이터)
- Guardrail 스팬 — ALCOA+ 컴플라이언스 평가 (점수, 결함 항목)
- Event — 21 CFR Part 11 전자서명 실행 (SHA-256 다이제스트)
모든 트레이스에는 gxp-compliance-score(0.0~1.0) 및 alcoa-data-integrity-pass(0 또는 1) 품질 점수가 자동으로 기록됩니다. 이를 통해 시간 경과에 따른 컴플라이언스 품질 대시보드를 구축할 수 있으며, 생성된 초안의 품질이 향상되고 있는지, 어떤 모델이 가장 높은 규제 준수 점수를 산출하는지, RAG 검색이 관련 소스 문서를 정확히 찾고 있는지(또는 누락하고 있는지)를 정밀하게 모니터링할 수 있습니다.
CLI 및 웹 스튜디오(Web Studio)
시스템은 두 가지 인터페이스를 제공합니다:
CLI (gxp-rag) — 스크립트 작성, CI/CD 통합 및 배치 작업용:
gxp-rag ingest ./sample_data # 파싱, 청킹, 임베딩 및 인덱싱
gxp-rag search "autoclave validation" # 시맨틱 검색
gxp-rag draft "Draft an SOP for..." --type SOP --model openai:gpt-4o
gxp-rag approvals sign APP-A1B2C3D4 --name "Jane Smith" --role QA_SPECIALIST
gxp-rag audit-verify # SHA-256 체인 무결성 검증
Web Studio (gxp-rag serve) — 다음 기능을 갖춘 FastAPI 웹 애플리케이션:
- 모델 선택 및 실시간 구조화된 출력을 지원하는 초안 작성 스튜디오(Drafting Studio)
- 드래그 앤 드롭 문서 업로드를 지원하는 지식 베이스(Knowledge Base) 관리자
- 원문 인용 대조 검토 및 전자서명 다이얼로그를 갖춘 승인 센터(Human Approval Center)
- 실시간 암호화 체인 검증을 지원하는 감사 추적(Audit Trail) 뷰어
기본 제공되는 샘플 데이터
저장소에는 다양한 문서 유형을 망라하는 6개의 현실적인 GxP 문서가 샘플로 기본 제공됩니다:
- SOP-MFG-014 — 클린룸 위생 관리 및 미생물 소독 (ISO Class 5/7 클린룸, 소독제 교대 사용 주기, 접촉 평판 배지 적격 판정 기준)
- CAPA-2024-012 — 정제수 시스템의 미생물(Bioburden) 기준 일탈에 대한 시정조치 (Burkholderia cepacia 균 조사, 데드레그(Deadleg) 배관 개선, 오존 살균)
- SOP-LAB-XXX — HPLC 시스템 적합성 시험(System Suitability Testing)
- VAL-XXX — 오토클레이브 IQ/OQ 밸리데이션 프로토콜
- WI-XXX — 피펫 교정 작업 지침서
- DEV-XXX — 저온실(Cold Room) 온도 일탈 보고서
이 샘플 데이터는 상용 전자 문서 관리 시스템(EDMS) 없이도 자동 분류, 섹션 인식 청킹, 시맨틱 검색, 구조화된 초안 작성, 컴플라이언스 채점에 이르는 전체 파이프라인을 온전히 시연할 수 있을 만큼 정교하게 구성되어 있습니다.
시작하기
git clone https://github.com/saram-io/gxp-rag.git
cd gxp-rag
uv venv --python python3.12
source .venv/bin/activate
uv pip install -e ".[dev]"
# Ingest sample documents
gxp-rag ingest ./sample_data
# Draft a document
gxp-rag draft "Draft an SOP for Cleanroom Disinfection after microbial excursion in ISO Class 5 filling suite" --type SOP --model openai:gpt-4o
# Run the test suite
pytest -v
테스트 스위트는 16가지 주요 시나리오를 검증합니다: Pydantic AI 에이전트 도구 호출, 구조화된 출력 검증, Qdrant RAG 수집 및 시맨틱 검색, 21 CFR Part 11 전자서명 생성, SHA-256 해시 체이닝, 멀티 프로바이더 모델 해석, FastAPI 엔드포인트 렌더링 등이 포함됩니다.
요약 및 결론
규제 환경을 위한 AI를 구축하는 핵심은 단순히 LLM을 더 똑똑하게 만드는 데 있지 않습니다. LLM 주변에 컴플라이언스를 구조적으로 강제하는 인프라를 구축하는 것이 핵심입니다. 모델은 콘텐츠를 생성하고, 스키마는 유효성을 검증하며, 컴플라이언스 엔진은 규제 준수성을 채점하고, 사람은 암호학적 서명으로 최종 승인하며, 감사 추적은 그 누구도 시스템을 위변조하지 않았음을 증명합니다.
GxP-RAG는 이러한 스택을 구현한 참조 아키텍처(Reference Architecture)입니다. 오픈소스로 공개되어 있고 사내 로컬 환경에서 완전히 독립 구동되며, QA 감사관이 생성된 문서의 모든 진술을 특정 소스 문서, 섹션, 정확한 원문 인용구까지 SHA-256 암호화 검증을 통해 역추적할 수 있을 만큼 엄격하게 규제 요건을 충족합니다.
GitHub 저장소: github.com/saram-io/gxp-rag
Saram Consulting