stockprice / src /llm.py
cormort's picture
Update src/llm.py
e541209 verified
# src/llm.py
import os
import google.generativeai as genai
class LLMService:
def __init__(self):
# 建議使用 os.getenv,或在此處暫時填入您的 Key: "AIza..."
self.api_key = os.getenv("GOOGLE_API_KEY")
self.model = None
if self.api_key:
try:
genai.configure(api_key=self.api_key)
self.model = genai.GenerativeModel('gemini-1.5-flash')
except Exception as e:
print(f"Gemini Init Error: {e}")
# ... (其餘 generate_report 方法保持與您提供的一致) ...
def generate_report(self, ticker, name, price, scores, details, backtest_res, news):
if not self.model:
return "⚠️ 未設定 Google API Key,無法進行 AI 分析。請在環境變數中設定 GOOGLE_API_KEY。"
score_summary = "\n".join([f"- {k}: {v}分 ({', '.join(details[k])})" for k, v in scores.items()])
bt_info = "無回測資料"
if backtest_res:
bt_info = f"勝率 {backtest_res['勝率']}%, 平均報酬 {backtest_res['平均報酬']}%, 交易次數 {backtest_res['次數']}"
news_text = "無近期新聞"
if news:
news_text = "\n".join([f"- {n['title']} ({n['date']})" for n in news[:3]])
prompt = f"""
你是一位專業的台股投資分析師。請根據以下數據,分析個股:{name} ({ticker})。
目前股價:{price}
【六維度量化評分】
{score_summary}
【策略回測表現 (近半年月線策略)】
{bt_info}
【近期新聞】
{news_text}
請用專業、客觀但易懂的語氣,輸出一段約 300-400 字的分析報告。
**輸出格式要求:**
1. **核心觀點**:一句話總結現在是否適合進場。
2. **亮點分析**:指出這檔股票目前最強的 1-2 個維度。
3. **風險提示**:指出分數最低的維度或潛在隱憂。
4. **操作建議**:給出具體的短線與長線建議(參考回測勝率)。
請直接輸出內容,不要有開場白,請使用 Markdown 格式。
"""
try:
response = self.model.generate_content(prompt)
return response.text
except Exception as e:
return f"❌ AI 分析生成失敗: {str(e)}"
llm_service = LLMService()