생성형 AI, 우리 회사에 어떻게 도입할까? (실제 아키텍처 완전 분석)
생성형 AI, 특히 ChatGPT와 같은 LLM(대규모 언어 모델)의 등장은 산업계에 큰 파장을 일으켰습니다. 많은 기업이 "우리도 AI를 도입해야 한다"는 공감대는 형성했지만, 정작 '어떻게?'라는 질문 앞에서는 막막해하는 경우가 많습니다. 단순히 ChatGPT API를 연동하는 것을 넘어, 우리 회사가 가진 고유한 데이터와 시스템에 AI를 어떻게 안전하고 효과적으로 통합할 수 있을까요?
이 질문에 대한 해답을 『생성형 AI 인 액션』 도서, 특히 10장 '생성형 AI 앱을 위한 애플리케이션 아키텍처' 내용을 기반으로 풀어보겠습니다. 이 글을 통해 기업이 자체 데이터를 활용하는 AI 앱, 즉 RAG(검색 증강 생성) 시스템을 구축하는 과정을 단계별로 명확하게 이해할 수 있을 것입니다.
생성형 AI 도입, 완전히 새로 시작할 필요는 없습니다
가장 먼저 기억해야 할 점은 생성형 AI를 위해 기존의 모든 시스템을 뒤엎을 필요는 없다는 것입니다. 책에서는 생성형 AI 아키텍처가 기존의 클라우드 기반 분산 아키텍처를 토대로 구축되는 진화된 형태라고 설명합니다. 즉, 새로운 패러다임을 기존의 검증된 모범 사례 위에 통합하는 것입니다. 그 중심에는 '생성형 AI 앱 스택' 이라는 개념적 참조 아키텍처가 있습니다.
이 스택은 AI 애플리케이션이 유기적으로 작동하도록 돕는 여러 계층으로 구성됩니다. 지금부터 RAG 시스템 구축 과정을 이 스택의 핵심 계층을 따라 단계별로 살펴보겠습니다.
1단계: 그라운딩 계층 - 우리 회사 데이터를 AI에 연결하기
RAG 시스템의 가장 핵심적인 첫 단계는 바로 그라운딩(Grounding) 계층을 구축하는 것입니다. 이 계층은 생성형 AI 애플리케이션의 기반으로, 우리 회사의 데이터를 수집, 저장, 처리하여 AI 모델이 활용할 수 있도록 준비하는 역할을 합니다.
작동 방식
데이터 통합: 먼저 다양한 내부 시스템(SQL 데이터베이스, 사내 문서, CRM 등)에 흩어져 있는 데이터를 연결해야 합니다. 이를 위해 안정적인 데이터 파이프라인을 구축하여 필요한 데이터를 한곳으로 모으는 작업이 필요합니다.
데이터 전처리: 수집된 데이터는 LLM이 이해할 수 있는 형태로 가공되어야 합니다. 불필요한 정보(HTML 태그 등)를 제거하고, 문서를 의미 있는 단위로 나누는 청킹(Chunking) 작업을 수행합니다.
임베딩 및 벡터화: 전처리된 텍스트 청크를 임베딩 모델을 통해 숫자 형태의 벡터(Vector)로 변환합니다. 이 벡터는 단순한 숫자가 아니라, 텍스트의 의미적 본질을 담고 있는 AI의 언어입니다.
벡터 데이터베이스 저장: 변환된 벡터들은 Redis, Pinecone, Azure AI Search와 같은 벡터 데이터베이스에 저장됩니다. 이 데이터베이스는 텍스트의 의미를 기준으로 매우 빠른 검색을 가능하게 해, RAG 시스템의 핵심 엔진 역할을 합니다.
2단계: 모델 계층 - AI의 '두뇌' 선택 및 조합하기
그라운딩 계층에서 데이터 준비가 완료되면, 이 데이터를 활용할 AI의 '두뇌', 즉 모델 계층을 구성해야 합니다. 이 계층에는 GPT-4와 같은 범용 LLM부터 특정 작업에 특화된 소규모 언어 모델(SLM)까지 다양한 모델이 포함될 수 있습니다.
실전 사례: 모델 앙상블 아키텍처
모든 요청을 강력하지만 비용이 비싼 GPT-4에만 의존하는 것은 비효율적일 수 있습니다. 책에서는 여러 모델의 장점을 조합하는 모델 앙상블(Model Ensemble) 아키텍처를 효과적인 대안으로 제시합니다. 예를 들어, 사용자의 질문 의도를 먼저 파악하는 '분류기' 역할을 가볍고 빠른 SLM(예: Phi-2)에 맡기는 것입니다.
그림과 같이 사용자의 질문이 "판매 실적"과 관련된 정형 데이터에 대한 것인지, 아니면 "제품 기술 사양"과 같은 비정형 문서에 대한 것인지를 먼저 분류합니다. 그 후에야 각 경로에 최적화된 RAG 파이프라인과 LLM을 호출하여 비용과 성능을 모두 최적화할 수 있습니다.
3단계: 오케스트레이션 계층 - AI 워크플로우 지휘하기
오케스트레이션 계층은 AI 앱의 지휘자 역할을 합니다. 사용자의 요청을 받아 어떤 계층의 어떤 기능을 호출하고, 데이터를 어떻게 조합하여 최종적으로 LLM에 전달할지 전체 워크플로우를 관리합니다.
작동 방식
사용자로부터 질문을 입력받습니다.
모델 계층의 '의도 분류기(GPT-3 또는 SLM)'를 호출하여 질문의 의도를 파악합니다. (예: "이 질문은 판매 데이터 관련인가, 기술 문서 관련인가?")
분류된 의도에 따라 그라운딩 계층의 적절한 벡터 데이터베이스에서 관련 문서를 검색(Search)합니다.
검색된 문서(Context)와 사용자의 원본 질문(Question)을 조합하여 LLM을 위한 최종 프롬프트를 생성합니다.
최종 프롬프트를 모델 계층의 주력 LLM(예: GPT-4)에 전달하여 답변을 생성합니다.
실제 코드 예시
책에서는 미세 조정한 GPT-3 모델을 분류기로 사용하는 실제 파이썬 코드 예시를 보여줍니다. 이 코드는 사용자의 질문 유형에 따라 structured, unstructured 등 접근 방식을 결정합니다.
코드 예시: 의도 분류기 실행 코드 (책의 코드 10.7 기반)
Python
# 'classification_response'는 GPT-3 분류 모델로부터 받은 응답입니다.
# 응답이 '1'이면 정형 데이터(SQL)로, '2'이면 비정형 데이터(RAG)로 처리 경로를 결정합니다.
if classification_response == "1":
return ApproachType.structured
elif classification_response == "2":
return ApproachType.unstructured
elif classification_response == "3":
return ApproachType.chit_chat
else:
return ApproachType.unstructured
이러한 판단을 위해 오케스트레이터는 다음과 같은 '메타 프롬프트'를 분류기 모델에 전달합니다.
코드 예시: 분류기를 위한 메타 프롬프트 (책의 코드 10.8 기반)
당신은 Microsoft Surface 제품의 영업 및 마케팅 팀을 위한 의도 분류기입니다.
사용자가 문장을 입력하면, 그 문장의 주요 의도에 집중해 아래 다섯 가지 값 중 하나만 응답해야 합니다: '1', '2', '3', '4', '5'.
예시:
사용자: 지금 우리가 얼마나 재고를 가지고 있는지 알려줘
도우미: 1
사용자: 이 제품의 사양을 알려줘
도우미: 2
...
4단계: 응답 필터링 - 신뢰할 수 있는 결과물 만들기
마지막으로, LLM이 생성한 답변을 사용자에게 그대로 전달해서는 안 됩니다.
응답 필터링 계층은 AI가 생성한 결과물의 품질과 안전을 보장하는 최종 관문입니다. 이 계층은 편향적이거나 부적절한 콘텐츠를 걸러내고, 기업의 정책과 윤리 기준에 부합하는지 확인하는 역할을 합니다. 이를 통해 기업은 AI 시스템의 신뢰도를 높이고 책임 있는 AI(RAI) 원칙을 실현할 수 있습니다.
결론: 성공적인 AI 도입을 위한 청사진
지금까지 살펴본 '생성형 AI 앱 스택'은 우리 회사만의 데이터를 활용한 RAG 시스템을 구축하는 구체적이고 실용적인 청사진을 제공합니다. 성공적인 AI 도입은 단순히 강력한 LLM을 선택하는 것에서 그치지 않고, 그라운딩, 모델, 오케스트레이션, 필터링이라는 각 계층을 유기적으로 설계하고 통합하는 데 달려있습니다.
https://wikibook.co.kr/gai-in-action/
이 글은 『생성형 AI 인 액션』이 제시하는 깊이 있는 내용의 일부에 불과합니다. 더 구체적인 코드 예제와 심도 있는 전략이 궁금하시다면, 이 책을 통해 우리 회사에 딱 맞는 AI 시스템 구축의 여정을 시작해 보시길 바랍니다.