diff --git a/msa-ai-service/Dockerfile b/msa-ai-service/Dockerfile index 63aa625..4b8f6a5 100644 --- a/msa-ai-service/Dockerfile +++ b/msa-ai-service/Dockerfile @@ -2,8 +2,17 @@ FROM python:3.10-slim WORKDIR /app +# SSL 인증서와 필요한 툴 설치 +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + && rm -rf /var/lib/apt/lists/* + COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt +# RUN python -c "from sentence_transformers import SentenceTransformer; \ +# SentenceTransformer('BM-K/KoSimCSE-roberta').save('./model')" + COPY . . diff --git a/msa-ai-service/app/core/config.py b/msa-ai-service/app/core/config.py index 1885309..6101958 100644 --- a/msa-ai-service/app/core/config.py +++ b/msa-ai-service/app/core/config.py @@ -14,5 +14,5 @@ MONGODB_NAME = os.getenv("MONGODB_NAME", "ai_service_db") OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") -REVIEW_LABELS = ["quantity", "size", "sweet", "salty", "spicy", "deep"] +REVIEW_LABELS = ["quantity", "size", "sweet", "salty", "spicy", "deep", "sour"] POLARITY_LABELS = ["POSITIVE", "NEGATIVE"] \ No newline at end of file diff --git a/msa-ai-service/app/ml/embedding_model.py b/msa-ai-service/app/ml/embedding_model.py new file mode 100644 index 0000000..661dc97 --- /dev/null +++ b/msa-ai-service/app/ml/embedding_model.py @@ -0,0 +1 @@ +# Huggingface로 모델 로드하기 \ No newline at end of file diff --git a/msa-ai-service/app/services/embedding_service.py b/msa-ai-service/app/services/embedding_service.py index 426c7e6..f3f61c1 100644 --- a/msa-ai-service/app/services/embedding_service.py +++ b/msa-ai-service/app/services/embedding_service.py @@ -32,7 +32,7 @@ def embed_and_label_question(question: str): 질문: {question} """ resp = client.chat.completions.create( - model="gpt-4o-mini", + model="gpt-41-mini", messages=[{"role": "user", "content": prompt}], response_format={"type": "json_object"} ) @@ -62,7 +62,7 @@ def embed_and_label_review(text: str): 리뷰: {text} """ resp = client.chat.completions.create( - model="gpt-4o-mini", + model="gpt-41-mini", messages=[{"role": "user", "content": prompt}], response_format={"type": "json_object"} ) diff --git a/msa-ai-service/app/services/rag_service.py b/msa-ai-service/app/services/rag_service.py index e9c4e11..f0a26f5 100644 --- a/msa-ai-service/app/services/rag_service.py +++ b/msa-ai-service/app/services/rag_service.py @@ -41,9 +41,9 @@ def generate_answer(store_name, menu_name, question, label, reviews): 1. 반드시 위 리뷰만 사실 근거로 삼아 답변하세요. 2. {label} 속성에 해당하는 리뷰들 중, 긍정/부정 리뷰 개수를 세어라. 3. 다음 형식으로 요약하라: - - "'{label}' 관련 리뷰 {len(reviews)}건 중 X건은 긍정적이고, Y건은 부정적입니다." + - {label} 관련 리뷰 {len(reviews)}건 중 X건은 긍정적이고, Y건은 부정적입니다." - 마지막에 결론을 붙여라. (예: "대체로 짜다고 합니다", "의견이 갈립니다", "비율이 비슷합니다", "너무 짜다고 합니다") -4. 긍정/부정이라는 단어는 쓰지 말고, '{label}' 속성에 맞는 자연스러운 한국어 서술형으로 풀어라. +4. 긍정/부정이라는 단어는 쓰지 말고, {label} 속성에 맞는 자연스러운 한국어 서술형으로 풀어라. - 예: salty → "짜다" / "짜지 않다" - 예: quantity → "양이 많다" / "양이 적다" - 예: spicy → "맵다" / "안맵다" @@ -51,7 +51,7 @@ def generate_answer(store_name, menu_name, question, label, reviews): """ resp = client.chat.completions.create( - model="gpt-4o-mini", + model="gpt-41-mini", messages=[{"role": "user", "content": prompt}] ) return resp.choices[0].message.content.strip() diff --git a/msa-ai-service/requirements.txt b/msa-ai-service/requirements.txt index 2102c31..944f04c 100644 --- a/msa-ai-service/requirements.txt +++ b/msa-ai-service/requirements.txt @@ -5,4 +5,8 @@ dnspython python-dotenv==1.0.1 pydantic==2.7.1 openai -numpy \ No newline at end of file +certifi +dnspython +numpy +sentence-transformers +torch \ No newline at end of file