Phase 5 · 실전 자동화 플랫폼 제작

회계사무소의 모든 지식을 AI의 머릿속에

32단계에서는 DB에 저장된 '숫자(정형 데이터)'를 분석하는 챗봇을 만들었습니다. 이번 단계에서는 회계사무소의 내부 업무매뉴얼, 과거 검토의견서, 계약서(PDF) 등 비정형 문서를 파싱하고 벡터화(Vectorize)하여, AI가 회계사무소 내부의 지식을 바탕으로 똑똑하게 답을 해주는 RAG(검색 증강 생성) 시스템을 구축합니다.

예상 학습 시간 : 300분
난이도 : ★★★★★
사전 단계 : 대화형 AI 비서 (Step 32)
다음 단계 : 자동 업무처리 Agent (예정)
01

문서를 읽고 답하는 AI, RAG란?

RAG (Retrieval-Augmented Generation, 검색 증강 생성)는 현재 비즈니스 AI 시장을 지배하는 가장 핵심적인 기술입니다. 기업의 내부 문서를 AI(LLM)에 재학습(Fine-tuning)시키는 대신, "문서를 검색 가능한 형태로 저장해두고, 질문이 들어오면 관련 문서를 찾아내어 그 문서를 기반으로 AI가 답을 생성하게" 만드는 방식입니다.

Fine-tuning vs RAG

수강생들이 가장 많이 오해하는 부분입니다. "우리 사무실 5년치 문서를 챗GPT에 학습시킬래!" (Fine-tuning)는 엄청난 비용과 환각(Hallucination) 리스크가 따릅니다.
대신 RAG를 사용하면, 매일 새로 업데이트되는 결산 매뉴얼이나 검토의견서를 실시간으로 검색하여 근거(문서명, 페이지)와 함께 100% 신뢰할 수 있는 답변을 받아낼 수 있습니다.

02

RAG 시스템 전체 파이프라인

파이썬을 이용해 PDF 문서를 올리고, AI가 대답하기까지의 일련의 과정입니다.

[문서 적재 단계 (Indexing)] 100페이지 매뉴얼 PDF ↓ (Text Extraction) 텍스트 추출 및 정제 ↓ (Chunking) 의미 단위로 쪼개기 (약 500 토큰씩 200개 조각으로) ↓ (Embedding) 각 조각을 고차원 숫자(벡터)로 변환 : [0.12, -0.43, 0.77...] ↓ Vector DB (FAISS, Chroma, Milvus 등)에 저장 [질문 답변 단계 (Retrieval & Generation)] 회계사의 질문: "ABC기업 임원 차량 비용 처리 기준은?" ↓ (Embedding) 질문을 벡터로 변환 ↓ (Vector Search) Vector DB에서 "의미"가 가장 유사한 조각(Top-K) 5개 추출 ↓ (Prompt) 추출된 문서 5개 + 회계사의 질문 ➡️ LLM (ChatGPT 등) ↓ AI의 답변 생성 및 출처 명시
03

단순 자르기를 넘어: Chunking과 Metadata

문서를 무작정 1,000자씩 자르면(Chunking) 안 됩니다. 문장이 중간에 잘려나가면 AI가 맥락을 이해하지 못합니다. 제목 ➡️ 문단 ➡️ 문장 단위로 의미를 보존하며 잘라내는 파이썬 기술(Recursive Text Splitter)을 사용합니다.

🐍 python
# Chunk에 반드시 포함되어야 할 Metadata 예시
metadata = {
    "office_id": 1,                    # 데이터 격리를 위한 최중요 키
    "customer_id": 25,                 # 소속 거래처 (공통 매뉴얼이면 NULL)
    "filename": "ABC기업_결산검토.pdf",
    "page": 12,
    "section": "매출채권"
}

이렇게 Metadata를 붙여두어야 나중에 AI가 "이 답변은 ABC기업_결산검토.pdf 12페이지를 참고했습니다"라고 출처를 댈 수 있습니다.

04

임베딩(Embedding) 기반 검색의 강력함

기존 DB의 LIKE '%단어%' 검색은 질문에 해당 단어가 없으면 문서를 찾지 못합니다.
하지만 임베딩 모델(OpenAI text-embedding-3-small 등)을 거쳐 문장을 벡터화하면 "의미(Context)" 기반 검색이 가능해집니다.

사용자 질문: "외상매출금 회수 문제가 있는 거래처 찾아줘" (단어: 외상매출금, 회수, 문제) ↕ (의미적 유사도 0.95 매칭!) Vector DB 내 조각: "매출채권의 회수가능성을 집중 검토한다." (단어: 매출채권, 회수가능성, 검토)
05

궁극의 시너지: SQL(DB)과 Vector DB의 결합

32단계와 33단계가 합쳐지는 순간입니다. "ABC기업 매출채권 증가 원인을 과거 검토자료와 비교해줘"라는 질문이 들어오면 시스템은 두 갈래로 찢어집니다.

  1. Python ➡️ SQL DB: "당월 채권 1.5억, 전월 1.1억 (36.4% 증가)" 팩트(숫자) 연산
  2. Python ➡️ Vector DB: "과거 결제조건 변경으로 회수 지연된 적 있음" 텍스트 추출
  3. Python ➡️ LLM: 두 정보를 합쳐 프롬프트 생성 후 종합 답변 도출
06

SaaS의 생명: 사무소별 데이터 격리 (Metadata Filtering)

SaaS 플랫폼에서 A사무소의 문서를 B사무소가 검색할 수 있다면 회사가 문을 닫아야 합니다. Vector DB 검색 시에도 반드시 강제 필터링을 걸어야 합니다.

# Vector DB (예: ChromaDB) 쿼리 시 무조건 필터 강제 삽입
results = vector_db.similarity_search(
    query="차량 비용 처리 기준",
    k=5,
    filter={"office_id": current_user.office_id}  # 🛡️ 철통 보안
)
07

환각 방지를 위한 5대 프롬프트 수칙

검색된 문서(Context)를 AI에게 전달할 때 시스템 프롬프트를 엄격하게 제어합니다.

RAG 프롬프트 지침

1. 주어진 [검색된 문서]만을 근거로 답변할 것.
2. 문서에 관련 내용이 없다면 반드시 "내부 자료에서 확인되지 않습니다"라고 명시할 것.
3. 확인되지 않은 사실을 절대 추측하여 생성하지 말 것.
4. 최종적인 회계적 판단은 보류할 것.
5. 답변 생성 시 참조한 문서명과 페이지 번호를 반드시 하단에 병기할 것.

08

34단계 예고: 묻기 전에 행동하는 "AI 에이전트"

33단계까지 우리가 만든 AI는 "무언가 물어보면 자료를 찾아 대답해 주는 훌륭한 비서" 였습니다.

하지만 다음 34단계부터는 차원이 달라집니다.
회계사가 "이번 달 결산 준비해 줘" 라고 한 마디만 던지면, AI가 스스로 미처리 거래를 찾고 ➡️ 증빙 없는 거래 리스트를 뽑고 ➡️ 이상 거래를 요약하여 ➡️ 회계사에게 결재를 올리는 능동적인 자동 업무처리 에이전트(Autonomous Agent) 단계로 진입합니다.

Step 32 : 대화형 AI 회계비서 Phase 6 공사중