之前看到多次那种AI虚拟盘炒股大战了,今天又刷到个股市分析的项目,忍不住了,搞一个下来玩玩

以下记录折腾过程而已

GitHub - ZhuLinsen/daily_stock_analysis: LLM驱动的 A/H股智能分析器,多数据源行情 + 实时新闻 + Gemini 决策仪表盘 + 多渠道推送,零成本,纯白嫖,定时运行

我就不搞actions了,反正有服务器

第一步先拉仓库下来

配环境

随后我最近在学uv,让uv接管依赖管理。直接 uv add -r requirements.txt

然按照作者的环境配置指南,配上gemini的连接方式,由于没看到在哪里自定义gemini的调用方式,进代码一看,发现作者使用的是google.generativeai包,该包已被弃用,虽然还能用,但是我改成了使用 google.genai

analyzer.py 中 _init_model 方法更新成如下

[python] 显示已折叠代码(58 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
    def _init_model(self) -> None:
        """
        初始化 Gemini 模型
        
        配置:
        - 使用 gemini-3-flash-preview 或 gemini-2.5-flash 模型
        - 不启用 Google Search(使用外部 Tavily/SerpAPI 搜索)
        - 支持自定义 endpoint(通过 GEMINI_API_ENDPOINT 环境变量)
        
        Note: 使用新的 google.genai 包(旧的 google.generativeai 已弃用)
        """
        try:
            from google import genai
            from google.genai import types
            
            # 从配置获取参数
            config = get_config()
            model_name = config.gemini_model
            fallback_model = config.gemini_model_fallback
            
            # 构建客户端配置
            client_kwargs = {
                'api_key': self._api_key,
            }
            
            # 配置自定义 endpoint(如果设置)
            if config.gemini_api_endpoint:
                logger.info(f"使用自定义 Gemini Endpoint: {config.gemini_api_endpoint}")
                client_kwargs['http_options'] = {
                    'baseUrl': config.gemini_api_endpoint,  # 注意:参数名是 baseUrl,不是 api_endpoint
                }
                # 如果配置了 API 版本,也添加进去
                if config.gemini_api_version:
                    client_kwargs['http_options']['apiVersion'] = config.gemini_api_version  # 注意:参数名是 apiVersion
            
            # 创建 Gemini 客户端
            self._genai_client = genai.Client(**client_kwargs)
            
            # 尝试初始化主模型
            try:
                # 新版 API 不再使用 GenerativeModel,而是直接通过 client.models.generate_content
                # 这里我们只需要记录模型名称
                self._current_model_name = model_name
                self._using_fallback = False
                self._model = self._genai_client  # 保存客户端引用
                logger.info(f"Gemini 模型初始化成功 (模型: {model_name})")
            except Exception as model_error:
                # 尝试备选模型
                logger.warning(f"主模型 {model_name} 初始化失败: {model_error},将尝试备选模型 {fallback_model}")
                self._current_model_name = fallback_model
                self._using_fallback = True
                self._model = self._genai_client
                logger.info(f"Gemini 备选模型配置完成 (模型: {fallback_model})")
            
        except Exception as e:
            logger.error(f"Gemini 模型初始化失败: {e}")
            self._model = None
            self._genai_client = None

config加上

1
2
    gemini_api_endpoint: Optional[str] = None  # 自定义 API Endpoint(如使用代理或第三方兼容服务)
    gemini_api_version: str = "v1beta"  # API 版本

环境变量配上,同时依赖 uv add google-genai 即可

随后去注册了 Tushare Pro、Tavily、BOCHA

还是这个 Tushare 最神奇了,第一次接触这种数据平台。

随后按照指示运行代码后,过一会就能看到报告发给了我的飞书

image.png

分析一下我套牢的股票,可以,比我厉害。周一开盘拿他分析一下然后操作操作[Doge]