48k Star 的 LLM 选股 Agent,把投资研究跑在 GitHub Actions 上
- 利用GitHub Actions作为零成本SaaS运行时,实现5分钟部署和定时执行
- 多源数据fetcher加显式not_supported降级,避免LLM幻觉
- 策略YAML化(Prompt as Config),让非技术人员可修改策略
- 多LLM和多通知通道横向抽象,不绑定生态,扩大用户基数
- 开源加联盟变现模式,通过推荐服务获取佣金
大家好,我是若风。
最近半年我在追踪一个数据,GitHub 上 LLM Agent 类项目的「fork / star 比」。大多数项目这个比在 5% 到 15% 之间,纯展示型项目。一旦超过 30%,说明用户不只是看,是在大量动手部署。
朱林森的 daily_stock_analysis 给了一个极端数字,48288 stars,42923 forks,fork / star 比接近 89%。
差不多每 10 个 star 的人里有 9 个真把项目 fork 出去跑了。这个数字背后的吸引力不复杂,它能每天给你推一份 LLM 选股决策仪表盘,覆盖 A 股、港股、美股、日股、韩股,推送到企业微信、飞书、Telegram、Discord、Slack、邮箱任一渠道。
5 分钟部署,零服务器成本,全跑在 GitHub Actions 上。
这篇文章不聊股票。我拆这个项目作为 LLM Agent 工程样本的 6 个工程决策,以及它「开源 + 联盟变现」的商业路径,对任何想做 AI Agent 产品的开发者都有启发。
一句话定位,DSA 到底是什么
daily_stock_analysis(后面简称 DSA)是一个纯 Python 写的 LLM Agent 选股分析系统,作者朱林森,MIT 协议,2026 年 1 月 10 日开仓,到现在 5 个多月长成 GitHub Trending Python 榜第一。
它干的事情可以这样概括,把多源行情、K 线、技术指标、资金流、新闻、公告、基本面、社交舆情全部喂给 LLM,让 LLM 按预设策略输出一份带评分、买卖点位、风险警报、催化因素、操作清单的决策报告。
输出形态是一张决策仪表盘 + 完整 Markdown 报告。
🎯 2026-02-08 决策仪表盘
共分析3只股票 | 🟢买入:0 🟡观望:2 🔴卖出:1
⚪ 中钨高新(000657): 观望 | 评分 65 | 看多
⚪ 永鼎股份(600105): 观望 | 评分 48 | 震荡
🟡 新莱应材(300260): 卖出 | 评分 35 | 看空
坦白讲,看到这个交互形态的第一反应是,它不是给量化交易员用的工具,是给「想用 AI 帮自己做投研决策但又不会写代码的散户」用的工具。这个定位决定了它的工程取舍。
工程亮点 1,GitHub Actions 作为零成本 SaaS 运行时
DSA 最聪明的一步,是把运行时选成了 GitHub Actions 而不是某台云服务器。
部署流程只有 4 步。
- Fork 仓库
- 在 Settings → Secrets 里填 AI Key、通知 Webhook、自选股代码
- 启用 Actions
- 手动跑一次 Run workflow 验证
之后默认每个工作日北京时间 18:00 自动执行,A/H/US 节假日自动跳过。用户全程不接触一行 Python 代码。
为什么这个选择重要?因为 GitHub Actions 给了 DSA 三件 SaaS 级别的能力。
第一是免费算力。Public repo 的 Actions 不计入费用,作者不需要为 4 万个 fork 出去的副本付一分钱。如果是云服务器模式,4 万用户 × 月度成本,光基础设施就会把项目拖死。
第二是天然分发。每个用户 fork 自己一份,配置在自己仓库的 Secrets 里,互不干扰。不需要多租户、不需要鉴权、不需要数据库。
第三是可信度。所有执行日志、运行历史、错误堆栈都在用户自己的 GitHub 账户里,作者无法访问,隐私和数据控制权完全在用户手里。
这套模式不止 DSA 在用,但 DSA 把它推到了一个新高度。任何想做「定时跑一次的 AI Agent 工具」的开发者,都应该把 GitHub Actions 作为首选运行时。
工程亮点 2,11 个数据源的降级链设计
DSA 的 data_provider/ 目录里有 11 个 fetcher 文件。
akshare_fetcher.py
alphavantage_fetcher.py
baostock_fetcher.py
efinance_fetcher.py
finnhub_fetcher.py
longbridge_fetcher.py
pytdx_fetcher.py
tencent_fetcher.py
tickflow_fetcher.py
tushare_fetcher.py
yfinance_fetcher.py
为什么要塞这么多?因为每一个数据源都会挂。
AkShare 偶尔被反爬、Tushare 有积分限制、Baostock 接口不稳、YFinance 时延严重。单一数据源的 LLM 投研系统必然在某个交易日崩盘,这跟策略好坏无关,是基础设施问题。
DSA 的解法是多源 fetcher + 市场边界降级。每个 fetcher 实现 base.py 里的统一接口,主流程按优先级轮询,失败自动降级。
更值得讲的是市场边界降级这种诚实的设计。日股(.T)和韩股(.KS / .KQ)通过 YFinance 只能拿到日线和基础行情,对于 capital_flow(资金流)、dragon_tiger(龙虎榜)、boards(板块)这些 A 股特有的高阶区块,直接返回 not_supported 状态而不是假装有数据。
这个 not_supported 状态非常关键。它让 LLM 知道「这块数据是真没有,不是 None 也不是 0」,避免模型脑补幻觉。
任何做多源数据聚合的 AI Agent 项目都该抄这种「显式 not_supported」的设计。承认数据边界比假装全知更能让 LLM 输出可信结论。
工程亮点 3,15 个 YAML 策略是可读可改的 Prompt 模板
DSA 最有意思的工程决策在 strategies/ 目录。
bottom_volume.yaml 底部放量
box_oscillation.yaml 箱体震荡
bull_trend.yaml 多头趋势
chan_theory.yaml 缠论
dragon_head.yaml 龙头
emotion_cycle.yaml 情绪周期
event_driven.yaml 事件驱动
expectation_repricing.yaml 预期重估
growth_quality.yaml 成长质量
hot_theme.yaml 热点题材
ma_golden_cross.yaml 均线金叉
one_yang_three_yin.yaml 一阳三阴
shrink_pullback.yaml 缩量回调
volume_breakout.yaml 放量突破
wave_theory.yaml 波浪理论
15 个策略全是 YAML 文件,不是 Python 代码。
为什么这件事重要?
把策略写成代码,意味着改一个参数要会 Python、要 PR、要测试。把策略写成 YAML,意味着任何懂技术分析的散户都能改、能加、能调。
每个 YAML 大概长这样(基于公开的命名和文档推断),里面有策略名、所需指标、触发条件、风险阈值、Prompt 提示词。LLM 在跑分析时按这套 YAML 渲染 prompt,加上实时数据,输出符合该策略视角的分析结论。
这就是「Prompt as Config」模式。我之前在 Skills 工程里反复推荐过,把策略逻辑从代码层下沉到配置层,让业务专家能直接维护。DSA 是这套模式的金融领域样板。
而且 DSA 还支持自定义策略文件和多 Agent 编排(实验性功能),这意味着 15 个内置策略只是起点,社区可以贡献更多。
工程亮点 4,多 LLM + 多通道通知的横向抽象
DSA 在 LLM 层做了横向抽象,支持 7 家模型。
Anspire 一 Key 同时启用大模型和搜索
AIHubMix 一 Key 切换全系模型
Gemini Google 原生
OpenAI 兼容 兼容 DeepSeek、通义千问等
Claude Anthropic 原生
Ollama 本地模型
通知层也做了横向抽象,6 个通道。
企业微信 / 飞书 / Telegram / Discord / Slack / 邮箱
这种横向抽象的工程价值在于,用户可以按自己的资源组合配置。我有 OpenAI 的额度就走 OpenAI,公司用飞书就配飞书 Webhook,本地玩 Ollama 就完全离线。项目不强绑任何生态。
具体到实现,LLM 抽象应该是统一的 chat_completion 接口,把不同模型的 request / response 格式做适配。通知抽象应该是统一的 send_message 接口,每个通道一个 adapter。
这种抽象的代价是更多代码、更多测试,但回报是用户基数的指数级扩大。一个只支持 OpenAI + 企业微信的项目,潜在用户数被砍掉 90%。
工程亮点 5,Agent 策略问股的多轮对话
DSA 不只是单向推送,Web 界面的 /chat 页面有 Agent 策略问股功能。
配置任意可用 AI API Key 后,Web /chat 页面即可使用策略问股。
- 支持均线金叉、缠论、波浪理论、多头趋势、热点题材、事件驱动、成长质量、预期重估等内置策略
- 支持实时行情、K 线、技术指标、新闻和风险信息调用
- 支持多轮追问、会话导出、发送到通知渠道和后台执行
这是把 LLM Agent 的工具调用能力用在投资研究场景。LLM 可以按需调用行情接口、K 线接口、新闻接口,多轮追问能让用户从「这只股怎么样」深入到「它最近三个月资金流向如何、主要催化剂是什么」。
工具调用 + 多轮对话 + 预设策略 Prompt,这是 LLM Agent 的标准三件套。DSA 把它套在选股场景上,做得相当克制,没有过度抽象。
商业模式,开源 + 联盟变现
讲完工程,聊聊钱。这是很多开发者最关心但不好意思问的部分。
DSA 是 MIT 开源,免费。但你看 README 会发现,它处处在引导用户用特定的收费服务。
AI 模型层,Anspire 和 AIHubMix 被标为「推荐」,旁边带 share_code 和 aff 参数,这是联盟营销链接。用户通过这两个链接注册消费,作者拿佣金。
行情数据层,TickFlow 也是带 ref 参数的推荐链接。
新闻搜索层,Anspire(同一 Key 复用)、SerpAPI、Tavily、Bocha、Brave、MiniMax 全部列出,但 Anspire 标「推荐」,SerpAPI 标「推荐」。
算下来,至少 4 个数据/模型服务通过 DSA 引流。这是一个以开源为流量入口、以联盟佣金为变现的商业模式。
我觉得这套模式很值得研究。它跟传统的「开源 + 企业版」或者「开源 + SaaS 托管」不一样。
传统模式的瓶颈是转化率,免费用户到付费用户的转化通常在 1% 以下。DSA 这种联盟模式的优点是,用户从第一天起就必然要付费给某家模型/数据服务商,问题只是付给谁。作者只需要做一件事,把推荐的服务做成默认选项。
4 万多个活跃 fork,假设每个用户每月平均在某家推荐服务上消费 50 元,按 20% 联盟分成算,月收入规模在几十万到百万级人民币。对一个个人维护的开源项目来说,这个量级足够支撑全职投入。
当然这套模式有它的伦理边界。推荐的服务必须真的好用,否则用户会迅速切换到非联盟的替代品。DSA 在 README 里反复强调 Anspire 的免费额度、AIHubMix 的 10% 优惠,本质上是把「为什么推荐这个」讲清楚。
诚实边界,作者自己承认的局限
讲完亮点,必须讲局限。这是 ruofeng 风格的红线,吹成银弹就失去了文章价值。
第一,不是投资建议。README 最后一行写得清清楚楚,「本项目仅供学习和研究使用,不构成任何投资建议。股市有风险,投资需谨慎。作者不对使用本项目产生的任何损失负责」。任何把 LLM 输出当圣旨的散户,最终大概率会被市场毒打。
第二,LLM 会幻觉。哪怕有 not_supported 状态,LLM 仍可能在数据不足时脑补结论。这是当前所有 LLM Agent 系统的通病,不是 DSA 独有。使用时必须把 LLM 结论当作「比朋友推荐更结构化、但比专业研究员差很远」的辅助参考。
第三,日韩股降级。前面讲了,日韩股只支持基础行情,A 股特有的资金流、龙虎榜等区块直接 not_supported。如果你是日韩股玩家,DSA 的价值会大打折扣。
第四,市场有效性假设。技术分析、缠论、波浪这些策略本身就是有争议的,LLM 把它们组合起来不会突然变成稳赚系统。策略的胜率跟 LLM 没关系,是市场本身决定的。
第五,依赖外部服务。一旦 Anspire / AIHubMix / SerpAPI 任一服务挂掉或者涨价,整套系统的运行成本和稳定性都会被影响。这是联盟变现模式的天然风险。
把这些边界诚实写出来,反而让我对作者的信任度上升。一个项目吹能稳赚,那基本是骗局。一个项目反复强调只是学习用途、不构成投资建议,那是真在认真做事。
我从 DSA 里学到的
DSA 的价值不只是选股这一件事,它是一个完整的 LLM Agent 工程样本,至少有 5 个可迁移的模式。
第一,GitHub Actions 作为零成本 SaaS 运行时。任何定时跑的 AI Agent 工具都应该把这个选项列为首选。
第二,多源 fetcher + 显式 not_supported 降级。任何聚合多源数据的 AI 系统都该抄这个模式。
第三,策略 YAML 化(Prompt as Config)。让业务专家直接维护策略,比让工程师反复改代码更可扩展。
第四,多 LLM + 多通知通道的横向抽象。不绑死任何生态,最大化用户基数。
第五,开源 + 联盟变现的商业模式。如果你做的 AI Agent 工具天然依赖第三方服务,这套模式值得考虑。
说真的,48288 stars、42923 forks,5 个多月做到这个规模,背后是 AI Agent 时代的强烈需求信号。普通用户想用 AI 但不会写代码,他们要的不是 SDK,是「fork 一下就能用」的产品形态。
DSA 把这个产品形态做到了极致。它的代码你可以在 ZhuLinsen/daily_stock_analysis 仓库里全部读到,重点关注 data_provider/ 的降级设计、strategies/ 的 YAML 模式、.github/workflows/ 的部署模式。
最后再重复一次作者的话,不构成任何投资建议。本文拆的是工程,不是荐股。
如果你想用 DSA 做真实投资决策,请先在模拟盘跑至少一个月,再考虑小仓位试水。LLM 写得再漂亮的决策仪表盘,也救不了不守纪律的散户。
评论互动