From 81d3d1a8acb4bc689fc06a7936a945e15b139b6a Mon Sep 17 00:00:00 2001 From: OhSeongRak Date: Thu, 12 Jun 2025 13:33:02 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20SNS=20=EA=B2=8C=EC=8B=9C=EA=B8=80?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smarketing-ai/app.py | 2 +- smarketing-ai/services/poster_service.py | 3 ++ smarketing-ai/services/sns_content_service.py | 44 ++++++++++++------- smarketing-ai/utils/ai_client.py | 8 ++-- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/smarketing-ai/app.py b/smarketing-ai/app.py index ebe2175..a88fe1e 100644 --- a/smarketing-ai/app.py +++ b/smarketing-ai/app.py @@ -42,7 +42,7 @@ def create_app(): # ===== 새로운 API 엔드포인트 ===== - @app.route('/api/ai/sns', methods=['POST']) + @app.route('/api/ai/sns', methods=['GET']) def generate_sns_content(): """ SNS 게시물 생성 API (새로운 요구사항) diff --git a/smarketing-ai/services/poster_service.py b/smarketing-ai/services/poster_service.py index 9ebbcb2..4894f8f 100644 --- a/smarketing-ai/services/poster_service.py +++ b/smarketing-ai/services/poster_service.py @@ -161,6 +161,9 @@ class PosterService: - 톤앤매너: {tone_style} - 감정 강도: {emotion_design} +**메뉴 정보:** +- 메뉴명: {request.menuName or '없음'} + **이벤트 정보:** - 이벤트명: {request.eventName or '특별 프로모션'} - 시작일: {request.startDate or '지금'} diff --git a/smarketing-ai/services/sns_content_service.py b/smarketing-ai/services/sns_content_service.py index fc80913..fb248e6 100644 --- a/smarketing-ai/services/sns_content_service.py +++ b/smarketing-ai/services/sns_content_service.py @@ -123,7 +123,7 @@ class SnsContentService: SNS 콘텐츠 생성을 위한 AI 프롬프트 생성 """ platform_spec = self.platform_specs.get(request.platform, self.platform_specs['인스타그램']) - tone_style = self.tone_styles.get(request.toneAndManner, '친근한 어조') + tone_style = self.tone_styles.get(request.toneAndManner, '정중하고 재밌는 어조') emotion_level = self.emotion_levels.get(request.emotionIntensity, '적당한 강도') # 이미지 설명 추출 @@ -146,6 +146,9 @@ class SnsContentService: - 감정 강도: {request.emotionIntensity} ({emotion_level}) - 특별 요구사항: {request.requirement or '없음'} +**메뉴 정보:** +- 메뉴명: {request.menuName or '없음'} + **이벤트 정보:** - 이벤트명: {request.eventName or '없음'} - 시작일: {request.startDate or '없음'} @@ -160,7 +163,7 @@ class SnsContentService: - 형식: {platform_spec['format']} **요구사항:** -1. {request.platform}의 특성에 맞는 톤앤매너 사용 +1. 중요 => {request.platform}의 특성에 맞는 내용 구성 2. {request.category} 카테고리에 적합한 내용 구성 3. 고객의 관심을 끌 수 있는 매력적인 문구 사용 4. 이미지와 연관된 내용으로 작성 @@ -174,29 +177,36 @@ class SnsContentService: """ 생성된 콘텐츠를 HTML 형식으로 포맷팅 """ - # 줄바꿈을
태그로 변환 + # 1. literal \n 문자열을 실제 줄바꿈으로 변환 + content = content.replace('\\n', '\n') + + # 2. 실제 줄바꿈을
태그로 변환 content = content.replace('\n', '
') - # 해시태그를 파란색으로 스타일링 - import re - content = re.sub(r'(#[\w가-힣]+)', r'\1', content) + # 3. 추가 정리: \r, 여러 공백 정리 + content = content.replace('\\r', '').replace('\r', '') - # 이모티콘은 그대로 유지 + # 4. 여러 개의
태그를 하나로 정리 + import re + content = re.sub(r'(
\s*){3,}', '

', content) + + # 5. 해시태그를 파란색으로 스타일링 + content = re.sub(r'(#[\w가-힣]+)', r'\1', content) # 전체 HTML 구조 html_content = f""" -
-
-

{request.platform} 게시물

-
-
-
- {content} +
+
+

{request.platform} 게시물

+
+
+
+ {content} +
+ {self._add_metadata_html(request)}
- {self._add_metadata_html(request)}
-
-""" + """ return html_content def _add_metadata_html(self, request: SnsContentGetRequest) -> str: diff --git a/smarketing-ai/utils/ai_client.py b/smarketing-ai/utils/ai_client.py index d1ef889..b4f032c 100644 --- a/smarketing-ai/utils/ai_client.py +++ b/smarketing-ai/utils/ai_client.py @@ -99,7 +99,7 @@ class AIClient: if self.claude_client: try: response = self.claude_client.messages.create( - model="claude-3-sonnet-20240229", + model="claude-3-5-sonnet-20240620", max_tokens=max_tokens, messages=[ {"role": "user", "content": prompt} @@ -113,7 +113,7 @@ class AIClient: if self.openai_client: try: response = self.openai_client.chat.completions.create( - model="gpt-3.5-turbo", + model="gpt-4o", messages=[ {"role": "user", "content": prompt} ], @@ -138,7 +138,7 @@ class AIClient: if self.claude_client: try: response = self.claude_client.messages.create( - model="claude-3-sonnet-20240229", + model="claude-3-5-sonnet-20240620", max_tokens=500, messages=[ { @@ -168,7 +168,7 @@ class AIClient: if self.openai_client: try: response = self.openai_client.chat.completions.create( - model="gpt-4-vision-preview", + model="gpt-4o", messages=[ { "role": "user",