4b86b2a660
- server-dev start/stop/deploy 및 Gitea push 자동 배포 - local-dev 로컬 개발 환경 Co-authored-by: Cursor <cursoragent@cursor.com>
162 lines
4.8 KiB
Bash
Executable File
162 lines
4.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# run-with-excel.sh
|
|
# 엑셀 파일로 RAG 시스템 전체 실행
|
|
|
|
set -e
|
|
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
# 사용법
|
|
if [ "$#" -lt 1 ]; then
|
|
echo "사용법: ./run-with-excel.sh <엑셀파일경로> [옵션]"
|
|
echo ""
|
|
echo "예제:"
|
|
echo " ./run-with-excel.sh data/qa_data.xlsx"
|
|
echo " ./run-with-excel.sh ~/Downloads/customer_qa.xlsx"
|
|
echo " ./run-with-excel.sh data/qa_data.xlsx --rebuild # 이미지 재빌드"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
|
|
EXCEL_FILE=$1
|
|
REBUILD=${2:-""}
|
|
|
|
# 파일 존재 확인
|
|
if [ ! -f "$EXCEL_FILE" ]; then
|
|
echo -e "${RED}❌ 엑셀 파일을 찾을 수 없습니다: $EXCEL_FILE${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}================================================${NC}"
|
|
echo -e "${GREEN}RAG 시스템 자동 실행 (엑셀 파일 사용)${NC}"
|
|
echo -e "${GREEN}================================================${NC}"
|
|
echo ""
|
|
|
|
# 프로젝트 디렉토리로 이동
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
# 1. 엑셀 파일 복사
|
|
echo -e "${GREEN}[1/6] 엑셀 파일 복사 중...${NC}"
|
|
EXCEL_BASENAME=$(basename "$EXCEL_FILE")
|
|
cp "$EXCEL_FILE" "data/$EXCEL_BASENAME"
|
|
echo " ✅ data/$EXCEL_BASENAME"
|
|
echo ""
|
|
|
|
# 2. JSONL 변환
|
|
echo -e "${GREEN}[2/6] JSONL 변환 중...${NC}"
|
|
if python scripts/excel_to_jsonl.py "data/$EXCEL_BASENAME"; then
|
|
echo " ✅ data/qa_raw.jsonl 생성 완료"
|
|
else
|
|
echo -e "${RED} ❌ JSONL 변환 실패${NC}"
|
|
echo ""
|
|
echo "pandas와 openpyxl이 설치되어 있는지 확인하세요:"
|
|
echo " pip install pandas openpyxl"
|
|
exit 1
|
|
fi
|
|
|
|
# 변환된 QA 수 확인
|
|
QA_COUNT=$(wc -l < data/qa_raw.jsonl | tr -d ' ')
|
|
echo " 📊 변환된 QA 쌍: ${QA_COUNT}개"
|
|
echo ""
|
|
|
|
# 3. .env 파일 확인
|
|
echo -e "${GREEN}[3/6] 환경 설정 확인 중...${NC}"
|
|
if [ ! -f ".env" ]; then
|
|
echo -e "${YELLOW} ⚠️ .env 파일이 없습니다.${NC}"
|
|
echo " env.template을 복사합니다..."
|
|
cp env.template .env
|
|
echo ""
|
|
echo -e "${RED} ❗ .env 파일을 수정해주세요:${NC}"
|
|
echo " vi .env"
|
|
echo ""
|
|
echo " 필수 설정:"
|
|
echo " - LLM_HOST=<LLM서버IP>"
|
|
echo " - TEI_EMBED_HOST=<TEI서버IP>"
|
|
echo " - TEI_RERANK_HOST=<TEI서버IP>"
|
|
echo ""
|
|
read -p "지금 수정하시겠습니까? (y/n) " answer
|
|
if [ "$answer" = "y" ]; then
|
|
${EDITOR:-vi} .env
|
|
else
|
|
echo ""
|
|
echo "환경 설정 후 다시 실행하세요:"
|
|
echo " vi .env"
|
|
echo " ./run-with-excel.sh data/$EXCEL_BASENAME"
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# .env 로드
|
|
source .env
|
|
|
|
# API 주소 출력
|
|
echo " 📍 LLM API: ${LLM_BASE_URL:-http://host.docker.internal:16000}"
|
|
echo " 📍 TEI Embed: ${TEI_EMBED_URL:-http://host.docker.internal:16001}"
|
|
echo " 📍 TEI Rerank: ${TEI_RERANK_URL:-http://host.docker.internal:16002}"
|
|
echo ""
|
|
|
|
# 4. Docker 이미지 빌드
|
|
if [ "$REBUILD" = "--rebuild" ] || ! docker images | grep -q "rag-batch-slim"; then
|
|
echo -e "${GREEN}[4/6] Docker 이미지 빌드 중...${NC}"
|
|
docker-compose -f docker-compose-slim.yml build
|
|
echo " ✅ 이미지 빌드 완료"
|
|
else
|
|
echo -e "${GREEN}[4/6] Docker 이미지 확인 완료${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# 5. 기존 서비스 정리
|
|
echo -e "${GREEN}[5/6] 기존 서비스 정리 중...${NC}"
|
|
docker-compose -f docker-compose-slim.yml down 2>/dev/null || true
|
|
echo " ✅ 정리 완료"
|
|
echo ""
|
|
|
|
# 6. Docker 실행
|
|
echo -e "${GREEN}[6/6] Docker 서비스 실행 중...${NC}"
|
|
echo ""
|
|
echo "실행 순서:"
|
|
echo " 1️⃣ 전처리 (LLM 요약)"
|
|
echo " 2️⃣ 임베딩 (TEI API)"
|
|
echo " 3️⃣ 인덱싱 (FAISS)"
|
|
echo " 4️⃣ API 서비스 시작"
|
|
echo ""
|
|
echo -e "${YELLOW}Ctrl+C를 눌러 중단할 수 있습니다${NC}"
|
|
echo ""
|
|
sleep 2
|
|
|
|
# Docker Compose 실행
|
|
if docker-compose -f docker-compose-slim.yml up; then
|
|
echo ""
|
|
echo -e "${GREEN}================================================${NC}"
|
|
echo -e "${GREEN}✅ RAG 시스템 실행 완료!${NC}"
|
|
echo -e "${GREEN}================================================${NC}"
|
|
echo ""
|
|
echo "API 주소: http://localhost:28012"
|
|
echo "API 문서: http://localhost:28012/docs"
|
|
echo ""
|
|
echo "테스트:"
|
|
echo " curl http://localhost:28012/health"
|
|
echo " curl -X POST http://localhost:28012/ask \\"
|
|
echo " -H 'Content-Type: application/json' \\"
|
|
echo " -d '{\"query\":\"테스트 질문\"}'"
|
|
else
|
|
echo ""
|
|
echo -e "${RED}================================================${NC}"
|
|
echo -e "${RED}❌ Docker 실행 실패${NC}"
|
|
echo -e "${RED}================================================${NC}"
|
|
echo ""
|
|
echo "로그 확인:"
|
|
echo " docker-compose -f docker-compose-slim.yml logs"
|
|
echo ""
|
|
echo "문제 해결:"
|
|
echo " 1. .env 파일의 API 주소 확인"
|
|
echo " 2. 외부 API 서버 상태 확인"
|
|
echo " 3. Docker 디스크 공간 확인"
|
|
exit 1
|
|
fi
|
|
|