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
9 changes: 9 additions & 0 deletions msa-ai-service/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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 . .

Expand Down
2 changes: 1 addition & 1 deletion msa-ai-service/app/core/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
1 change: 1 addition & 0 deletions msa-ai-service/app/ml/embedding_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Huggingface로 모델 로드하기
4 changes: 2 additions & 2 deletions msa-ai-service/app/services/embedding_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"}
)
Expand Down Expand Up @@ -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"}
)
Expand Down
6 changes: 3 additions & 3 deletions msa-ai-service/app/services/rag_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,17 @@ 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 → "맵다" / "안맵다"
- 표현은 리뷰 맥락에 맞게 자연스럽게 변형해도 된다.
"""

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()
Expand Down
6 changes: 5 additions & 1 deletion msa-ai-service/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,8 @@ dnspython
python-dotenv==1.0.1
pydantic==2.7.1
openai
numpy
certifi
dnspython
numpy
sentence-transformers
torch