在量化投资与智能投顾领域,将大语言模型应用于交易信号生成是一个新兴且充满挑战的方向。传统的股票分析系统主要依赖技术指标与基本面数据的规则化判断,而引入 LLM 后,系统能够理解新闻舆情、解读公告内容,并生成更具象的交易建议。本文以一个开源的 LLM 驱动股票智能分析系统为例,深入剖析其架构设计、数据流处理、LLM 决策生成与多渠道推送的工程实现细节,为类似项目提供可落地的技术参考。
系统整体架构概览
该系统的核心目标是每日自动分析用户自选股池中的标的,生成包含买卖建议、风险警报、操作清单的决策仪表盘,并通过多种渠道推送给用户。从架构视角看,系统可以划分为五个主要层次:数据采集层、数据处理层、LLM 分析层、报告生成层与通知推送层。
数据采集层负责从多个数据源并行获取行情、技术指标、基本面、新闻舆情等信息。系统支持 A 股、港股与美股三大市场,数据源包括 AkShare、Tushare、YFinance、Longbridge 等主流金融数据接口。数据处理层对原始数据进行清洗、转换与聚合,生成标准化的股票特征向量。LLM 分析层是整个系统的核心,它将处理后的数据组织成结构化 Prompt,调用大语言模型生成分析结论。报告生成层将 LLM 输出解析为标准化决策仪表盘格式,支持简单、完整、摘要三种报告类型。最后,通知推送层将报告以 Markdown 文本或图片形式发送至企业微信、飞书、Telegram、Discord、Slack、邮件等渠道。
这种分层设计的关键优势在于各层职责明确、解耦充分。数据源的变化(如替换 Tushare 为 AkShare)不会影响上层 LLM 分析与报告生成逻辑;同时,更换 LLM 提供商(如从 GPT 切换到 Claude)也不需要修改数据处理代码。这种架构为系统的扩展性与维护性提供了坚实基础。
多数据源行情聚合机制
股票分析的首要前提是获取高质量的行情数据。该系统采用了多数据源优先级与降级策略,确保在不同市场条件下都能稳定获取数据。
A 股数据源配置
对于 A 股市场,系统默认使用 AkShare(基于东方财富爬虫),同时也支持 Tushare Pro 与 Baostock 作为备用或首选数据源。AkShare 的优势在于免费且接口丰富,能够获取实时行情、五日线、资金流向、板块涨跌等关键数据。在配置层面,通过设置环境变量可以控制主数据源与备选数据源的优先级顺序。
当主要数据源出现故障时(如频繁遇到 RemoteDisconnected 错误),系统会自动降级到备用数据源。降级策略不仅体现在数据源层面,还体现在字段层面 —— 即使某个数据源返回了部分字段,系统也会尝试从其他数据源补充缺失字段。例如,如果 AkShare 返回的成交量数据异常,系统会自动尝试从 Tushare 获取同类数据。
港股与美股数据源
港股数据主要通过 AkShare 与 Longbridge 获取,美股数据则以 YFinance 为主、Longbridge 作为补充字段。Longbridge(长桥)是一个专注于港美股的金融 API,能够提供量比、换手率、PE 等 YFinance 缺失的关键指标。系统在设计时充分考虑了不同市场的数据特征 ——A 股以散户为主、资金流向数据丰富,而美股则以机构投资者为主、基本面数据更为透明。
实时行情与历史数据处理
系统支持两种运行模式:收盘后分析与盘中实时分析。在收盘后分析模式下,系统使用当日收盘价进行技术指标计算;在盘中模式下,系统实时拉取最新成交价并重新计算均线、多头排列等技术指标。这种灵活性使得系统既适合收盘后的复盘分析,也适合交易时段的操作参考。
数据处理层还实现了智能缓存机制。对于历史日线数据,系统会缓存到本地 SQLite 数据库,后续分析时优先从缓存读取,避免重复请求外部 API。缓存采用 WAL 模式与合理的超时配置,确保多线程并发写入时的稳定性。
实时新闻情绪与舆情聚合
除了客观的行情数据,新闻舆情同样是影响股票价格的重要因素。该系统集成了多个新闻搜索服务,包括 Anspire、SerpAPI、Tavily、Bocha、Brave Search 等,能够根据股票代码与相关关键词检索近期新闻。
新闻策略配置
系统允许用户通过环境变量配置新闻策略窗口档位,可选值包括 ultra_short(1 天)、short(3 天)、medium(7 天)与 long(30 天)。实际生效的窗口取用户配置与 NEWS_MAX_AGE_DAYS 参数的最小值,这种设计既满足了灵活配置需求,又避免了无限扩大搜索范围导致的 API 配额浪费。
对于中文股票,Anspire 搜索服务表现尤为出色,它针对中文内容进行了特别优化,能够更准确地匹配 A 股上市公司的新闻。对于美股,Brave Search 与 SerpAPI 则提供了更好的英文资讯覆盖。
社交舆情补充
除了传统新闻源,系统还支持 Stock Sentiment API 来获取 Reddit、X(原 Twitter)、Polymarket 等社交平台的舆情数据。这些数据能够反映散户与市场参与者的情绪状态,作为机构新闻的补充。这种多源舆情聚合策略,使得系统能够更全面地捕捉影响股价的市场情绪变化。
LLM 决策仪表盘的设计与生成
这是整个系统最核心的模块 —— 如何将结构化的行情数据与新闻舆情转化为具有交易指导意义的决策建议。
Prompt 工程策略
系统使用了精心设计的 Prompt 模板,将股票分析任务分解为多个维度:技术面分析、实时行情、筹码分布、新闻舆情、公告信息、资金流向与基本面汇总。每个维度都有明确的数据呈现格式,LLM 需要基于这些数据给出综合判断。
Prompt 中包含了详细的输出格式规范,要求 LLM 生成标准化的 JSON 结构,包括核心结论(一句话)、评分(0-100 分)、买卖点位、风险警报与操作检查清单。这种结构化输出设计,使得后续的报告解析与渲染变得可控且高效。
多模型支持与降级策略
系统底层采用 LiteLLM 作为模型抽象层,支持 Gemini、OpenAI 兼容 API、DeepSeek、Claude、Ollama 本地模型等多种渠道。配置层面,通过 LITELLM_MODEL 指定主模型,LITELLM_FALLBACK_MODELS 配置备选模型序列。
当主模型不可用(如遇到 429 rate limit 错误)时,系统会自动按顺序尝试备选模型。对于配置了多个 API Key 的场景,LiteLLM 的 Router 组件还支持同一模型的 Key 轮换,进一步提升调用成功率。这种多层次容错设计,确保了系统在生产环境中的高可用性。
Agent 模式与策略对话
除了自动化的每日分析,系统还提供了 Agent 问股功能。用户可以通过 Web 界面对话,询问关于特定股票的技术分析问题,如均线金叉、缠论、波浪理论等内置策略的应用。Agent 能够调用实时行情、K 线、技术指标、新闻等工具,为用户提供多轮交互式的策略咨询服务。
多渠道推送与报告渲染
分析完成后的报告需要及时送达用户手中。系统支持丰富的推送渠道,并提供了灵活的报告渲染选项。
通知渠道配置
支持的推送渠道包括:企业微信机器人、飞书机器人、Telegram Bot、Discord Webhook、Slack Bot、邮件、SMS 推送服务(PushPlus、Server 酱)等。每个渠道都有对应的环境变量配置,部分渠道还支持签名校验、关键词验证等安全设置。
特别值得一提的是飞书渠道的云文档模式。当消息内容过长时,系统可以将完整报告生成为飞书云文档,并将链接发送到群聊中,彻底解决了消息截断问题。这种设计体现了系统对用户体验的细致考量。
报告类型与渲染选项
系统支持三种报告类型:simple(精简版)、full(完整版)与 brief(三到五句概括版)。不同类型对应不同的 Prompt 策略与输出长度控制。对于 Docker 环境,推荐使用 full 模式以获得最完整的分析信息;而对于移动端阅读场景,simple 或 brief 模式更为合适。
Markdown 转图片是另一个实用功能。某些渠道(如企业微信)不支持 Markdown 格式渲染,通过配置 MARKDOWN_TO_IMAGE_CHANNELS,系统可以自动将 Markdown 报告转换为图片发送。转换引擎支持 wkhtmltopdf 与 markdown-to-file 两种方案,后者对 emoji 的支持更好。
部署方式与运维实践
作为开源项目,系统提供了多种部署方式,满足不同用户的需求。
GitHub Actions 零成本部署
这是最具吸引力的部署方式 —— 用户只需 Fork 项目仓库,配置好 API Key 与通知渠道的 Secrets,就能免费使用 GitHub 的 CI/CD 基础设施每日运行分析。这种方式无需购买服务器,无需配置定时任务,真正实现了零成本自动化。
默认配置下,系统在工作日的 18:00(北京时间)自动执行分析。用户也可以手动触发运行,或通过 workflow_dispatch 的 force_run 参数在非交易日强制执行。交易日检查功能能够自动识别 A 股、港股与美股的休市日,避免在非交易日进行无效分析。
Docker 容器化部署
对于需要更高定制化程度的用户,系统提供了 Docker 镜像。官方镜像发布在 GHCR 与 Docker Hub,可以直接拉取运行。Docker 部署支持两种模式:Web 服务模式(提供 API 与 WebUI)与定时任务模式。
在 Docker 环境中,建议将.env 文件同时通过环境变量注入与文件挂载两种方式传入 —— 前者保证 Python 进程能读取配置,后者让 WebUI 的配置页面能够持久化保存用户修改。
本地运行与 WebUI
本地运行适合开发者调试或需要频繁交互的场景。启动 WebUI 后,用户可以在浏览器中管理自选股列表、查看分析历史、执行回测、导入持仓等操作。WebUI 还集成了认证功能,支持密码保护。
FastAPI 后端提供了完整的 RESTful API,包括触发分析、查询任务状态、获取历史报告、执行回测等接口。API 支持 SSE(Server-Sent Events)进行任务进度推送,用户可以实时看到分析任务的执行状态。
工程实践中的关键参数
对于计划部署或二次开发的团队,以下参数值得特别关注:
在数据源层面,FUNDAMENTAL_STAGE_TIMEOUT_SECONDS 控制基本面聚合阶段的总时延预算(默认 1.5 秒),FUNDAMENTAL_FETCH_TIMEOUT_SECONDS 控制单次 API 调用超时(默认 0.8 秒)。这些软超时参数确保系统不会因为某个数据源响应慢而阻塞整体流程。
在通知层面,ANALYSIS_DELAY 参数控制个股分析之间的延迟秒数,避免 API 限流;SINGLE_STOCK_NOTIFY 设为 true 时可实现单股分析完成后立即推送,适合需要快速响应的场景;REPORT_SUMMARY_ONLY 设为 true 时只推送汇总信息,适合自选股数量较多的用户。
在模型调用层面,VISION_MODEL 参数指定用于图片识别的视觉模型;LITELLM_MODEL 必须包含 provider 前缀(如 gemini/gemini-3-flash-preview),否则系统无法正确选择 API Key。这些细节参数对于优化系统性能与成本控制至关重要。
总结
LLM 驱动的股票智能分析系统代表了 AI 在金融领域落地的一种重要形态。它不是简单地让 LLM “猜测” 股票涨跌,而是将结构化的行情数据、实时的新闻舆情与 LLM 的语义理解能力相结合,生成具有可解释性的交易建议。
从工程实现角度看,该系统的成功依赖于几个关键设计:多数据源的优先级配置与降级策略确保了数据获取的高可用性;LiteLLM 的多模型抽象层提供了调用层面的容错能力;分层架构设计使得各模块可以独立演进;而 GitHub Actions 的零成本部署模式,则大幅降低了用户的使用门槛。
对于希望在金融领域应用 LLM 的团队而言,这种架构设计提供了宝贵的参考 —— 既要充分发挥 LLM 的语义理解优势,又要通过工程化的手段确保系统的稳定性与可用性。股市有风险,投资需谨慎,任何自动化分析系统都应作为辅助决策工具而非直接的交易指令来源。
资料来源:该项目源代码与完整文档托管于 GitHub(https://github.com/ZhuLinsen/daily_stock_analysis),采用 MIT 许可证开源。