53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
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)
|