diff --git a/stock-lab/app/screener/ai_news/analyzer.py b/stock-lab/app/screener/ai_news/analyzer.py index bccbd52..cff224d 100644 --- a/stock-lab/app/screener/ai_news/analyzer.py +++ b/stock-lab/app/screener/ai_news/analyzer.py @@ -44,9 +44,17 @@ async def score_sentiment( resp = await llm.messages.create( model=model, max_tokens=200, - messages=[{"role": "user", "content": prompt}], + temperature=0, + system="너는 한국 주식 뉴스 감성 분석가다. JSON 객체 하나만 반환한다.", + messages=[ + {"role": "user", "content": prompt}, + # Assistant prefill — 첫 토큰을 강제로 '{' 로 시작해 JSON 응답을 보장 + {"role": "assistant", "content": "{"}, + ], ) - text = resp.content[0].text if resp.content else "" + raw = resp.content[0].text if resp.content else "" + # prefill '{' 이 응답에 포함되지 않으므로 다시 붙임 + text = "{" + raw if not raw.lstrip().startswith("{") else raw in_tokens = int(getattr(resp.usage, "input_tokens", 0) or 0) out_tokens = int(getattr(resp.usage, "output_tokens", 0) or 0)