Spaces:
Runtime error
Runtime error
| # 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() |