RAG 간단 구현기

MJ·2025년 8월 13일
post-thumbnail

멋쟁이사자처럼에서 파이썬으로 RAG를 구현하게 되었다
주제로는 TRPG 의 필수요소이자 꽃인 GM 을 ai로 구현하여 언제든지 편하게 TRPG를 하는 건 어떨까 란 주제였다

문제

문제로는 항상 ai 응답을 다르게해서 응답을 일관시키거나 특정엔딩으로 달려나가야하는데 그렇지 않은 문제가 있었다.

해결

RAG 를 써보는건 어떨까란 생각이 들어서 사용해보았다. 다음은 RAG와 프로그램에 대한 설명이다.

개요

던전톡 AI 서비스는 Spring Boot 백엔드와 연동되는 독립적인 Python AI 마이크로서비스입니다.

아키텍처 다이어그램

┌─────────────────────────────────────────────────────────────────┐
│                    던전톡 시스템 아키텍처                          │
└─────────────────────────────────────────────────────────────────┘

┌──────────────────┐    HTTP API     ┌─────────────────────────────┐
│   Spring Boot    │◄──────────────►│     Python AI Service      │
│   백엔드 서버     │   (Port 8001)   │      (FastAPI)             │
│   (Port 8080)    │                │                             │
└──────────────────┘                └─────────────────────────────┘
         │                                        │
         │                                        │
         ▼                                        ▼
┌──────────────────┐                 ┌─────────────────────────────┐
│   PostgreSQL     │◄────────────────│       RAGEngine             │
│   (dungeondb)    │   pgvector      │   ┌─────────────────────┐   │
│   Port 5432      │   embeddings    │   │   Vector Store      │   │
└──────────────────┘                 │   │   (PGVector)        │   │
                                     │   └─────────────────────┘   │
                                     │   ┌─────────────────────┐   │
                                     │   │   LLM Provider      │   │
                                     │   │   - DeepSeek        │   │
                                     │   │   - Claude (백업)    │   │
                                     │   │   - OpenAI (백업)    │   │
                                     │   └─────────────────────┘   │
                                     │   ┌─────────────────────┐   │
                                     │   │   Embeddings        │   │
                                     │   │   - OpenAI          │   │
                                     │   │   - HuggingFace     │   │
                                     │   └─────────────────────┘   │
                                     └─────────────────────────────┘
                                                  │
                                                  ▼
                                     ┌─────────────────────────────┐
                                     │       Documents             │
                                     │   ┌─────────────────────┐   │
                                     │   │ NPC 정보            │   │
                                     │   │ 세계관 설정         │   │
                                     │   │ 게임 규칙           │   │
                                     │   │ 시나리오            │   │
                                     │   │ 아이템 정보         │   │
                                     │   └─────────────────────┘   │
                                     └─────────────────────────────┘

컴포넌트 상세

1. Spring Boot 백엔드

  • 역할: 게임 로직, 사용자 관리, 채팅 시스템
  • 포트: 8080
  • AI 연동: HTTP API를 통해 Python AI 서비스 호출

2. Python AI Service (FastAPI)

  • 역할: AI 응답 생성 전용 마이크로서비스
  • 포트: 8001
  • 주요 기능:
    • RAG 기반 AI 응답 생성
    • 문서 임베딩 및 벡터 검색
    • 다중 LLM 제공자 지원

3. RAGEngine

  • 핵심 컴포넌트: AI 응답 생성 엔진
  • 기능:
    • 컨텍스트 기반 응답 생성
    • 문서 검색 및 임베딩
    • LLM 프롬프트 최적화

4. PostgreSQL + pgvector

  • 역할: 벡터 데이터베이스
  • 스키마: dungeontalk_rag
  • 테이블:
    • langchain_pg_collection: 문서 컬렉션
    • langchain_pg_embedding: 벡터 임베딩 저장

사용한것

LLM 제공자

  • 기본: DeepSeek (deepseek-chat)
  • 백업: Claude (claude-3-haiku-20240307)
  • 백업: OpenAI

임베딩 모델

  • 원격: OpenAI (text-embedding-3-small)
  • 로컬: HuggingFace (intfloat/multilingual-e5-large)

데이터 흐름

  1. Spring Boot → HTTP POST /ai-responsePython AI Service
  2. RAGEngine → 컨텍스트 분석 → Vector Store 검색
  3. Vector Store → 관련 문서 검색 → RAGEngine
  4. RAGEngine → LLM 호출 → DeepSeek/Claude/OpenAI
  5. LLM → AI 응답 생성 → RAGEngine
  6. Python AI Service → JSON 응답 → Spring Boot

문서 관리

자동 스캔 대상

  • documents/ 폴더 내 .txt, .md, .csv 파일
  • 파일 변경 감지 (해시 기반)
  • 자동 임베딩 및 벡터 저장

확장성 고려사항

마이크로서비스 분리

  • AI 서비스 독립적 운영 가능
  • 수평 확장 지원
  • 서비스별 개별 배포 가능
profile
..

0개의 댓글