From c3659eb6c5601fe140d276dd133088f2f7156b2b Mon Sep 17 00:00:00 2001 From: gahusb Date: Thu, 14 May 2026 00:26:48 +0900 Subject: [PATCH] fix(ai_news): assistant prefill + temperature=0 + system prompt to force JSON --- stock-lab/app/screener/ai_news/analyzer.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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)