Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/pre-processing-service/app/core/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ class BaseSettingsConfig(BaseSettings):
MAX_IMAGE_SIZE_MB: int = 10

# 테스트/추가용 필드
openai_api_key: Optional[str] = None # << 이 부분 추가
OPENAI_API_KEY: Optional[str] = None # << 이 부분 추가

def __init__(self, **kwargs):
super().__init__(**kwargs)
Expand Down
29 changes: 12 additions & 17 deletions apps/pre-processing-service/app/service/blog/blog_create_service.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,27 @@
import json
import logging
import os
from loguru import logger
from datetime import datetime
from typing import Dict, List, Optional, Any

from openai import OpenAI
from dotenv import load_dotenv

from app.core.config import settings
from app.model.schemas import RequestBlogCreate
from app.errors.BlogPostingException import *

# 환경변수 로드
load_dotenv(".env.dev")


class BlogContentService:
"""RAG를 사용한 블로그 콘텐츠 생성 전용 서비스"""

def __init__(self):
# OpenAI API 키 설정
self.openai_api_key = os.getenv("OPENAI_API_KEY")
self.openai_api_key = settings.OPENAI_API_KEY
if not self.openai_api_key:
raise ValueError("OPENAI_API_KEY가 .env.dev 파일에 설정되지 않았습니다.")

# 인스턴스 레벨에서 클라이언트 생성
self.client = OpenAI(api_key=self.openai_api_key)
logging.basicConfig(level=logging.INFO)
self.logger = logging.getLogger(__name__)

def generate_blog_content(self, request: RequestBlogCreate) -> Dict[str, Any]:
"""
Expand All @@ -39,26 +34,26 @@ def generate_blog_content(self, request: RequestBlogCreate) -> Dict[str, Any]:
Dict: {"title": str, "content": str, "tags": List[str]} 형태의 결과
"""
try:
self.logger.debug("[STEP1] 콘텐츠 컨텍스트 준비 시작")
logger.debug("[STEP1] 콘텐츠 컨텍스트 준비 시작")
content_context = self._prepare_content_context(request)
self.logger.debug(f"[STEP1 완료] context length={len(content_context)}")
logger.debug(f"[STEP1 완료] context length={len(content_context)}")

self.logger.debug("[STEP2] 프롬프트 생성 시작")
logger.debug("[STEP2] 프롬프트 생성 시작")
prompt = self._create_content_prompt(content_context, request)
self.logger.debug(f"[STEP2 완료] prompt length={len(prompt)}")
logger.debug(f"[STEP2 완료] prompt length={len(prompt)}")

self.logger.debug("[STEP3] OpenAI API 호출 시작")
logger.debug("[STEP3] OpenAI API 호출 시작")
generated_content = self._generate_with_openai(prompt)
self.logger.debug(f"[STEP3 완료] generated length={len(generated_content)}")
logger.debug(f"[STEP3 완료] generated length={len(generated_content)}")

self.logger.debug("[STEP4] 콘텐츠 파싱 시작")
logger.debug("[STEP4] 콘텐츠 파싱 시작")
result = self._parse_generated_content(generated_content, request)
self.logger.debug("[STEP4 완료]")
logger.debug("[STEP4 완료]")

return result

except Exception as e:
self.logger.error(f"콘텐츠 생성 실패: {e}")
logger.error(f"콘텐츠 생성 실패: {e}")
return self._create_fallback_content(request)

def _prepare_content_context(self, request: RequestBlogCreate) -> str:
Expand Down
5 changes: 2 additions & 3 deletions apps/pre-processing-service/app/utils/llm_extractor.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import os
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()
from app.core.config import settings


class LLMExtractor:
Expand All @@ -13,7 +12,7 @@ def __init__(self, model="gpt-4o"):
:param model: 사용할 LLM 모델 이름
"""

self.client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
self.client = OpenAI(api_key=settings.OPENAI_API_KEY)
self.model = model

def login_extraction_prompt(self, target_description: str, html: str):
Expand Down
Loading