This commit is contained in:
@@ -0,0 +1,173 @@
|
||||
# app/config/prompts.py
|
||||
"""
|
||||
HealthSync AI 프롬프트 설정 관리
|
||||
"""
|
||||
|
||||
|
||||
class PromptConfig:
|
||||
"""AI 프롬프트 템플릿 설정"""
|
||||
|
||||
MISSION_RECOMMENDATION_PROMPT = """
|
||||
당신은 건강 코치입니다. 다음 정보를 바탕으로 건강 미션 5개를 JSON 형식으로 추천해주세요.
|
||||
|
||||
**미션 추천 원칙:**
|
||||
- 일일 목표 횟수는 1~5 범위
|
||||
- 사용자가 능동적으로 실행 가능한 일상 건강 행동
|
||||
- 외부 상황에 의존하지 않는 미션 (예: 물 마시기, 스트레칭, 걷기)
|
||||
- 직업 특성을 고려한 맞춤형 추천
|
||||
|
||||
**사용자 정보:**
|
||||
- 직업: {occupation} (이 직업군의 건강 리스크를 고려하여 추천)
|
||||
- 나이: {age}세, 신장: {height}cm, 체중: {weight}kg
|
||||
- 허리둘레: {waist_circumference}cm
|
||||
|
||||
**주요 건강 지표:**
|
||||
- 혈압: {systolic_bp}/{diastolic_bp} mmHg
|
||||
- 공복혈당: {fasting_glucose} mg/dL
|
||||
- 콜레스테롤: 총 {total_cholesterol}, HDL {hdl_cholesterol}, LDL {ldl_cholesterol} mg/dL
|
||||
- 간수치: AST {ast}, ALT {alt} IU/L
|
||||
- 생활습관: 흡연 {smoking_status}, 음주 {drinking_status}
|
||||
|
||||
다음 JSON 형식으로 응답하세요:
|
||||
{{
|
||||
"missions": [
|
||||
{{
|
||||
"title": "미션 실행 방법",
|
||||
"daily_target_count": 3,
|
||||
"reason": "추천 이유 1줄"
|
||||
}}
|
||||
]
|
||||
}}
|
||||
"""
|
||||
|
||||
HEALTH_DIAGNOSIS_PROMPT = """
|
||||
당신은 건강검진 데이터를 분석하는 전문 의료 AI입니다.
|
||||
아래 건강검진 데이터를 바탕으로 짧은 2문장으로 건강 상태를 요약 진단해주세요.
|
||||
글자수는 꼭 100자 이내로 작성해주세요.
|
||||
사용자의 이름을 활용하여 작성해주세요.
|
||||
|
||||
**분석 원칙:**
|
||||
- 객관적이고 정확한 의학적 판단
|
||||
- 개선이 필요한 부분과 긍정적인 부분 균형 있게 제시
|
||||
- 직업({occupation})을 고려한 맞춤형 조언
|
||||
|
||||
**사용자 정보:**
|
||||
- 이름: {name}
|
||||
- 직업: {occupation}
|
||||
- 나이: {age}세
|
||||
- 신체: 신장 {height}cm, 체중 {weight}kg, BMI {bmi}, 허리둘레 {waist_circumference}cm
|
||||
|
||||
**주요 건강 지표:**
|
||||
- 혈압: 수축기 {systolic_bp}mmHg, 이완기 {diastolic_bp}mmHg
|
||||
- 혈당: 공복혈당 {fasting_glucose}mg/dL
|
||||
- 콜레스테롤: 총 {total_cholesterol}mg/dL, HDL {hdl_cholesterol}mg/dL, LDL {ldl_cholesterol}mg/dL, 중성지방 {triglyceride}mg/dL
|
||||
- 간기능: AST {ast}IU/L, ALT {alt}IU/L, 감마지티피 {gamma_gtp}IU/L
|
||||
- 신기능: 혈청크레아티닌 {serum_creatinine}mg/dL, 요단백 {urine_protein}
|
||||
- 혈액: 혈색소 {hemoglobin}g/dL
|
||||
- 감각기관: 좌측시력 {visual_acuity_left}, 우측시력 {visual_acuity_right}, 좌측청력 {hearing_left}, 우측청력 {hearing_right}
|
||||
- 생활습관: 흡연 {smoking_status}, 음주 {drinking_status}
|
||||
|
||||
**응답 형식:**
|
||||
정확히 3문장으로 작성하되, 각 문장은 마침표(.)로 끝나야 합니다.
|
||||
문장 사이는 공백 하나로 구분합니다.
|
||||
"""
|
||||
|
||||
CHAT_CONSULTATION_PROMPT = """
|
||||
당신은 HealthSync AI의 전문 건강 상담 AI입니다. 사용자의 건강검진 데이터를 바탕으로 개인화된 건강 상담을 제공합니다.
|
||||
|
||||
**상담 원칙:**
|
||||
- 개인 건강 데이터를 기반으로 맞춤형 답변 제공
|
||||
- 의학적 근거에 기반한 정확하고 신뢰할 수 있는 정보
|
||||
- 직업 특성을 고려한 실질적인 건강 관리 방법 제시
|
||||
- 친근하고 이해하기 쉬운 언어로 설명
|
||||
- 심각한 증상 시 반드시 의료진 상담 권유
|
||||
|
||||
**사용자 질문:**
|
||||
{user_question}
|
||||
|
||||
**사용자 건강 정보:**
|
||||
- 이름: {name}
|
||||
- 직업: {occupation} (직업 특성을 고려한 조언 제공)
|
||||
- 나이: {age}세
|
||||
|
||||
**신체 정보:**
|
||||
- 신장: {height}cm, 체중: {weight}kg, BMI: {bmi}
|
||||
- 허리둘레: {waist_circumference}cm
|
||||
|
||||
**혈압 및 혈당:**
|
||||
- 혈압: 수축기 {systolic_bp}mmHg, 이완기 {diastolic_bp}mmHg
|
||||
- 공복혈당: {fasting_glucose}mg/dL
|
||||
|
||||
**콜레스테롤:**
|
||||
- 총콜레스테롤: {total_cholesterol}mg/dL
|
||||
- HDL콜레스테롤: {hdl_cholesterol}mg/dL
|
||||
- LDL콜레스테롤: {ldl_cholesterol}mg/dL
|
||||
- 중성지방: {triglyceride}mg/dL
|
||||
|
||||
**간기능 및 신기능:**
|
||||
- AST: {ast}IU/L, ALT: {alt}IU/L, 감마지티피: {gamma_gtp}IU/L
|
||||
- 혈청크레아티닌: {serum_creatinine}mg/dL, 요단백: {urine_protein}
|
||||
- 혈색소: {hemoglobin}g/dL
|
||||
|
||||
**감각기관:**
|
||||
- 시력: 좌측 {visual_acuity_left}, 우측 {visual_acuity_right}
|
||||
- 청력: 좌측 {hearing_left}, 우측 {hearing_right}
|
||||
|
||||
**생활습관:**
|
||||
- 흡연: {smoking_status}, 음주: {drinking_status}
|
||||
|
||||
**응답 요구사항:**
|
||||
1. 인사는 생략하며, 사용자의 현재 건강 상태와 질문 내용을 연관지어 답변
|
||||
2. 구체적이고 실행 가능한 건강 관리 방법 제시
|
||||
3. 직업 특성({occupation})을 고려한 맞춤형 조언
|
||||
4. 150자 내의 적절한 길이로 답변
|
||||
5. 필요시 의료진 상담 권유 포함
|
||||
|
||||
위 정보를 바탕으로 사용자의 질문에 대해 전문적이고 개인화된 건강 상담을 제공해주세요.
|
||||
"""
|
||||
|
||||
CELEBRATION_PROMPT = """
|
||||
당신은 건강 미션을 달성한 사용자를 축하하는 따뜻한 AI 코치입니다.
|
||||
|
||||
**축하 메시지 작성 원칙:**
|
||||
- 정확히 1줄로 작성 (50자 내외)
|
||||
- 따뜻하고 격려적인 톤
|
||||
- 적절한 이모지 2-3개 사용
|
||||
- 미션 달성에 대한 구체적인 축하
|
||||
- 지속적인 동기부여 메시지 포함
|
||||
- 미션의 구체적인 내용을 반영
|
||||
|
||||
**달성한 미션 정보:**
|
||||
- 미션명: {mission_name}
|
||||
- 미션 설명: {mission_description}
|
||||
- 일일 목표: {daily_target_count}회/일
|
||||
- 사용자 ID: {user_id}
|
||||
|
||||
위 미션을 달성한 사용자에게 미션의 구체적인 내용을 반영한 따뜻한 축하 메시지 1줄을 작성해주세요.
|
||||
미션명과 설명을 참고하여 더욱 개인화된 축하 메시지를 만들어주세요.
|
||||
메시지만 작성하고 다른 말은 하지 마세요.
|
||||
|
||||
예시:
|
||||
🎉 30분 걷기 완료! 건강한 습관을 만들어가는 당신이 자랑스러워요! 💪✨
|
||||
🌟 물 8잔 마시기 성공! 몸이 기뻐하는 소리가 들려요! 💧😊
|
||||
🧘♀️ 명상 완료! 마음이 한결 평온해졌을 거예요! ✨🙏
|
||||
🚶♀️ 계단 오르기 미션 달성! 작은 실천이 큰 변화를 만들어요! 🏃♂️⭐
|
||||
"""
|
||||
|
||||
def get_mission_recommendation_prompt() -> str:
|
||||
"""미션 추천 프롬프트 템플릿 반환"""
|
||||
return PromptConfig.MISSION_RECOMMENDATION_PROMPT
|
||||
|
||||
|
||||
def get_health_diagnosis_prompt() -> str:
|
||||
"""건강 진단 프롬프트 템플릿 반환"""
|
||||
return PromptConfig.HEALTH_DIAGNOSIS_PROMPT
|
||||
|
||||
|
||||
def get_chat_consultation_prompt() -> str:
|
||||
"""챗봇 상담 프롬프트 템플릿 반환"""
|
||||
return PromptConfig.CHAT_CONSULTATION_PROMPT
|
||||
|
||||
def get_celebration_prompt() -> str:
|
||||
"""미션 축하 프롬프트 템플릿 반환"""
|
||||
return PromptConfig.CELEBRATION_PROMPT
|
||||
@@ -0,0 +1,94 @@
|
||||
# app/config/settings.py
|
||||
"""
|
||||
HealthSync AI 애플리케이션 설정 관리 (올바른 Pinecone 설정)
|
||||
"""
|
||||
from pydantic_settings import BaseSettings
|
||||
from typing import List, Optional
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# .env 파일 로드
|
||||
load_dotenv()
|
||||
|
||||
class Settings(BaseSettings):
|
||||
"""HealthSync AI 애플리케이션 설정 클래스"""
|
||||
|
||||
# 기본 앱 설정
|
||||
app_name: str = "HealthSync AI"
|
||||
app_version: str = "1.0.0"
|
||||
debug: bool = True
|
||||
app_description: str = "AI 기반 개인 맞춤형 건강관리 서비스"
|
||||
|
||||
# 서버 설정
|
||||
host: str = "localhost"
|
||||
port: int = 8000
|
||||
|
||||
# 보안 설정
|
||||
secret_key: str = "healthsync-ai-secret-key-change-in-production"
|
||||
algorithm: str = "HS256"
|
||||
access_token_expire_minutes: int = 30
|
||||
|
||||
# API 설정
|
||||
api_v1_prefix: str = "/api"
|
||||
cors_origins: List[str] = ["*"]
|
||||
|
||||
# PostgreSQL 설정
|
||||
db_host: str = "localhost"
|
||||
db_port: int = 5432
|
||||
db_name: str = "healthsync_ai"
|
||||
db_username: str = "postgres"
|
||||
db_password: str = "password"
|
||||
db_min_size: int = 1
|
||||
db_max_size: int = 10
|
||||
|
||||
# Claude AI 설정
|
||||
claude_api_key: str = ""
|
||||
claude_model: str = "claude-3-5-sonnet-20241022"
|
||||
claude_max_tokens: int = 1500
|
||||
claude_temperature: float = 0.7
|
||||
claude_timeout: int = 30
|
||||
claude_api_base_url: str = "https://api.anthropic.com"
|
||||
|
||||
# Pinecone 벡터DB 설정 (올바른 기본값)
|
||||
pinecone_api_key: str = ""
|
||||
pinecone_environment: str = "aped-4627-b74a" # 실제 환경
|
||||
pinecone_index_name: str = "healthsync-users"
|
||||
|
||||
# Azure Cache for Redis 설정
|
||||
redis_host: str = "localhost"
|
||||
redis_port: int = 6380 # Azure Cache for Redis 기본 SSL 포트
|
||||
redis_password: str = "" # Azure Cache Primary Access Key
|
||||
redis_db: int = 0
|
||||
redis_cache_ttl: int = 1800 # 30분
|
||||
redis_ssl: bool = True # Azure Cache는 SSL 필수
|
||||
|
||||
# 로깅 설정
|
||||
log_level: str = "INFO"
|
||||
|
||||
@property
|
||||
def database_url(self) -> str:
|
||||
"""데이터베이스 URL 생성"""
|
||||
return f"postgresql://{self.db_username}:{self.db_password}@{self.db_host}:{self.db_port}/{self.db_name}"
|
||||
|
||||
@property
|
||||
def redis_url(self) -> str:
|
||||
"""Redis URL 생성 (Azure Cache for Redis 지원)"""
|
||||
if self.redis_password:
|
||||
# Azure Cache for Redis (SSL + 인증)
|
||||
protocol = "rediss" if self.redis_ssl else "redis"
|
||||
return f"{protocol}://:{self.redis_password}@{self.redis_host}:{self.redis_port}/{self.redis_db}"
|
||||
else:
|
||||
# 로컬 Redis (비SSL)
|
||||
return f"redis://{self.redis_host}:{self.redis_port}/{self.redis_db}"
|
||||
|
||||
@property
|
||||
def is_azure_redis(self) -> bool:
|
||||
"""Azure Cache for Redis 사용 여부 확인"""
|
||||
return bool(self.redis_password and "cache.windows.net" in self.redis_host)
|
||||
|
||||
class Config:
|
||||
env_file = ".env"
|
||||
case_sensitive = False
|
||||
|
||||
# 전역 설정 인스턴스
|
||||
settings = Settings()
|
||||
Reference in New Issue
Block a user