import os import requests import json class AIAnalyst: """Ollama API를 통한 주식 뉴스 분석""" def __init__(self): # NAS 외부의 Windows PC IP 주소 self.base_url = os.getenv("OLLAMA_URL", "http://host.docker.internal:11434") self.model = os.getenv("OLLAMA_MODEL", "llama3") def _call_ollama(self, prompt: str) -> str: url = f"{self.base_url}/api/generate" payload = { "model": self.model, "prompt": prompt, "stream": False, "options": { "temperature": 0.2, # 분석용이므로 창의성 낮춤 "num_ctx": 4096 } } try: # 타임아웃 3분 (PC 사양 좋으므로 금방 될 것) resp = requests.post(url, json=payload, timeout=180) resp.raise_for_status() data = resp.json() return data.get("response", "").strip() except Exception as e: return f"Error analyzing: {str(e)}" def analyze_market_summary(self, articles: list) -> str: """뉴스 헤드라인들을 모아 시장 분위기 요약""" if not articles: return "분석할 뉴스가 없습니다." # 최신 10개만 추려서 전달 targets = articles[:10] titles = "\n".join([f"- {a.get('title')}" for a in targets]) prompt = f""" 다음은 최근 한국 증시 주요 뉴스 헤드라인입니다: {titles} 위 뉴스들을 바탕으로 현재 시장의 주요 이슈와 분위기를 3줄로 요약해주고, 전반적인 투자 심리가 '긍정/부정/중립' 중 어디에 가까운지 판단해주세요. 한국어로 답변해주세요. """ return self._call_ollama(prompt)