From 98451ff9e53e28efc66eb4354e866ca3e1f19d36 Mon Sep 17 00:00:00 2001
From: "2569718930@qq.com" <2569718930@qq.com>
Date: Thu, 26 Feb 2026 23:02:41 +0800
Subject: [PATCH] feat: Implement AI analysis using Groq, replacing Gemini API
key configuration.
---
.env.example | 2 +-
bot_listener.py | 7 +++--
requirements.txt | 1 -
src/analysis/ai_analyzer.py | 54 +++++++++++++++++++++++--------------
4 files changed, 38 insertions(+), 26 deletions(-)
diff --git a/.env.example b/.env.example
index a5aee599..6f98744a 100644
--- a/.env.example
+++ b/.env.example
@@ -6,7 +6,7 @@ TELEGRAM_BOT_TOKEN=your_bot_token_here
TELEGRAM_CHAT_ID=your_chat_id_here
# AI
-GEMINI_API_KEY=your_gemini_api_key_here
+GROQ_API_KEY=your_groq_api_key_here
# Proxy Setting (optional)
HTTPS_PROXY=http://127.0.0.1:7890
diff --git a/bot_listener.py b/bot_listener.py
index fe2fa393..01a0650a 100644
--- a/bot_listener.py
+++ b/bot_listener.py
@@ -1017,16 +1017,15 @@ def start_bot():
if line.strip():
msg_lines.append(f"- {line.strip()}")
- # --- 6. Gemini AI 数据分析 ---
+ # --- 6. Groq AI 数据分析 ---
try:
from src.analysis.ai_analyzer import get_ai_analysis
- # 发送请求时可以稍微提示一下正在请求AI
- bot.send_message(message.chat.id, f"🧠 Gemini 正在分析 {city_name} 的趋势数据...")
+ # Groq 极快,通常不用发送“正在分析”的提示,直接拼接
ai_result = get_ai_analysis(clean_insights, city_name, temp_symbol)
if ai_result:
msg_lines.append(f"\n{ai_result}")
except Exception as e:
- logger.error(f"加载/调用 AI 分析失败: {e}")
+ logger.error(f"调用 Groq AI 分析失败: {e}")
bot.send_message(message.chat.id, "\n".join(msg_lines), parse_mode="HTML")
diff --git a/requirements.txt b/requirements.txt
index 1be06aa2..904e0af6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,4 +5,3 @@ python-dotenv
pytz
numpy
web3
-google-generativeai
diff --git a/src/analysis/ai_analyzer.py b/src/analysis/ai_analyzer.py
index 04505f06..61396fef 100644
--- a/src/analysis/ai_analyzer.py
+++ b/src/analysis/ai_analyzer.py
@@ -1,21 +1,24 @@
import os
-import google.generativeai as genai
+import requests
from loguru import logger
def get_ai_analysis(weather_insights: str, city_name: str, temp_symbol: str) -> str:
"""
- 调用 Gemini API 对天气态势进行简短的交易分析
+ 通过 Groq API (LLaMA 3.3 70B) 对天气态势进行极速交易分析
"""
- api_key = os.getenv("GEMINI_API_KEY")
+ api_key = os.getenv("GROQ_API_KEY")
if not api_key:
- logger.warning("GEMINI_API_KEY 未配置,跳过 AI 分析")
+ logger.warning("GROQ_API_KEY 未配置,跳过 AI 分析")
return ""
try:
- genai.configure(api_key=api_key)
- # 使用最新的 Gemini 3 Flash 预览版模型
- model = genai.GenerativeModel('gemini-3-flash-preview')
-
+ # Groq 完全兼容 OpenAI 的 API 格式,直接用 requests 简单直观
+ url = "https://api.groq.com/openai/v1/chat/completions"
+ headers = {
+ "Authorization": f"Bearer {api_key}",
+ "Content-Type": "application/json"
+ }
+
prompt = f"""
你是一个专业的天气衍生品(如 Polymarket)交易员。你的任务是根据当前天气数据推测今日最高温度趋势,进行交易决策。
请严格根据以下我提供的【{city_name}】的实时天气数据和规则策略进行分析。
@@ -25,22 +28,33 @@ def get_ai_analysis(weather_insights: str, city_name: str, temp_symbol: str) ->
【输出要求】
1. 语言必须极端简练,直击要害,整体不超过60个字。
-2. 必须给出一个明确的操作建议。假设市场针对的是“今天温度是否会涨到预报峰值”,结论可以是:下注YES(看涨)、下注NO(看跌)、或 观望。
+2. 必须给出一个明确的操作建议(针对“今天温度是否会涨到预报峰值”)。结论可以是:下注YES、下注NO、或 观望。
3. 必须包含 1-10 的信心指数。
-4. 严格按照以下HTML格式输出,不要带任何 Markdown 代码块标记(如 ```html):
+4. 严格按照以下HTML格式输出:
-🤖 Gemini AI 决策
-- 💡 逻辑: [一句话说明核心支撑逻辑,例如:最热时段已过且低于预报3度,涨水无望。]
+🤖 Groq AI 决策
+- 💡 逻辑: [一句话说明核心支撑逻辑]
- 🎯 建议: [下注YES / 下注NO / 观望] (信心: [1-10]/10)
"""
- # 强制使用 REST 传输方式,这对代理更友好
- response = model.generate_content(prompt, transport='rest')
- text = response.text.strip()
+
+ payload = {
+ "model": "llama-3.3-70b-specdec", # 改用高性能版本
+ "messages": [
+ {"role": "system", "content": "你是不讲废话、只看数据的专业气象分析师。"},
+ {"role": "user", "content": prompt}
+ ],
+ "temperature": 0.5,
+ "max_tokens": 150
+ }
+
+ # 索非亚直连应该没问题
+ response = requests.post(url, json=payload, headers=headers, timeout=10)
+ response.raise_for_status()
- # 简单清理可能的 markdown 标记
- text = text.replace("```html", "").replace("```markdown", "").replace("```", "").strip()
+ result = response.json()
+ content = result['choices'][0]['message']['content'].strip()
- return text
+ return content
except Exception as e:
- logger.error(f"Gemini API 调用失败: {e}")
- return f"\n⚠️ Gemini 分析暂不可用 ({str(e)[:30]})"
+ logger.error(f"Groq API 调用失败: {e}")
+ return f"\n⚠️ Groq 分析暂不可用 ({str(e)[:30]})"