Spaces:
Runtime error
Runtime error
Update src/llm.py
Browse files- src/llm.py +5 -12
src/llm.py
CHANGED
|
@@ -4,26 +4,22 @@ import google.generativeai as genai
|
|
| 4 |
|
| 5 |
class LLMService:
|
| 6 |
def __init__(self):
|
| 7 |
-
#
|
| 8 |
-
self.api_key = os.getenv("GOOGLE_API_KEY")
|
| 9 |
self.model = None
|
| 10 |
|
| 11 |
if self.api_key:
|
| 12 |
try:
|
| 13 |
-
# 2. 設定 Gemini
|
| 14 |
genai.configure(api_key=self.api_key)
|
| 15 |
-
|
| 16 |
-
# 使用 Gemini 1.5 Flash (速度快、便宜、適合分析數據)
|
| 17 |
-
# 如果追求更深度的推論,可改用 "gemini-1.5-pro"
|
| 18 |
self.model = genai.GenerativeModel('gemini-1.5-flash')
|
| 19 |
except Exception as e:
|
| 20 |
-
print(f"Gemini
|
| 21 |
-
|
|
|
|
| 22 |
def generate_report(self, ticker, name, price, scores, details, backtest_res, news):
|
| 23 |
if not self.model:
|
| 24 |
return "⚠️ 未設定 Google API Key,無法進行 AI 分析。請在環境變數中設定 GOOGLE_API_KEY。"
|
| 25 |
|
| 26 |
-
# 3. 整理數據 (這部分跟原本一樣)
|
| 27 |
score_summary = "\n".join([f"- {k}: {v}分 ({', '.join(details[k])})" for k, v in scores.items()])
|
| 28 |
|
| 29 |
bt_info = "無回測資料"
|
|
@@ -34,7 +30,6 @@ class LLMService:
|
|
| 34 |
if news:
|
| 35 |
news_text = "\n".join([f"- {n['title']} ({n['date']})" for n in news[:3]])
|
| 36 |
|
| 37 |
-
# 4. 構建 Prompt (針對 Gemini 優化)
|
| 38 |
prompt = f"""
|
| 39 |
你是一位專業的台股投資分析師。請根據以下數據,分析個股:{name} ({ticker})。
|
| 40 |
目前股價:{price}
|
|
@@ -60,11 +55,9 @@ class LLMService:
|
|
| 60 |
"""
|
| 61 |
|
| 62 |
try:
|
| 63 |
-
# 5. 呼叫 Gemini 生成
|
| 64 |
response = self.model.generate_content(prompt)
|
| 65 |
return response.text
|
| 66 |
except Exception as e:
|
| 67 |
return f"❌ AI 分析生成失敗: {str(e)}"
|
| 68 |
|
| 69 |
-
# 建立實例供外部呼叫
|
| 70 |
llm_service = LLMService()
|
|
|
|
| 4 |
|
| 5 |
class LLMService:
|
| 6 |
def __init__(self):
|
| 7 |
+
# 建議使用 os.getenv,或在此處暫時填入您的 Key: "AIza..."
|
| 8 |
+
self.api_key = os.getenv("GOOGLE_API_KEY")
|
| 9 |
self.model = None
|
| 10 |
|
| 11 |
if self.api_key:
|
| 12 |
try:
|
|
|
|
| 13 |
genai.configure(api_key=self.api_key)
|
|
|
|
|
|
|
|
|
|
| 14 |
self.model = genai.GenerativeModel('gemini-1.5-flash')
|
| 15 |
except Exception as e:
|
| 16 |
+
print(f"Gemini Init Error: {e}")
|
| 17 |
+
|
| 18 |
+
# ... (其餘 generate_report 方法保持與您提供的一致) ...
|
| 19 |
def generate_report(self, ticker, name, price, scores, details, backtest_res, news):
|
| 20 |
if not self.model:
|
| 21 |
return "⚠️ 未設定 Google API Key,無法進行 AI 分析。請在環境變數中設定 GOOGLE_API_KEY。"
|
| 22 |
|
|
|
|
| 23 |
score_summary = "\n".join([f"- {k}: {v}分 ({', '.join(details[k])})" for k, v in scores.items()])
|
| 24 |
|
| 25 |
bt_info = "無回測資料"
|
|
|
|
| 30 |
if news:
|
| 31 |
news_text = "\n".join([f"- {n['title']} ({n['date']})" for n in news[:3]])
|
| 32 |
|
|
|
|
| 33 |
prompt = f"""
|
| 34 |
你是一位專業的台股投資分析師。請根據以下數據,分析個股:{name} ({ticker})。
|
| 35 |
目前股價:{price}
|
|
|
|
| 55 |
"""
|
| 56 |
|
| 57 |
try:
|
|
|
|
| 58 |
response = self.model.generate_content(prompt)
|
| 59 |
return response.text
|
| 60 |
except Exception as e:
|
| 61 |
return f"❌ AI 分析生成失敗: {str(e)}"
|
| 62 |
|
|
|
|
| 63 |
llm_service = LLMService()
|