基于 AKShare 金融数据做了一个轻量级的金融研究 Agent

11 阅读3分钟

最近 vibe 了一个轻量级的金融研究 Agent ,专门用来做 A 股/港股相关的研究和数据查询,基于 AKShare + LLM ,项目叫 OpenFR ,欢迎各位大佬 Star:github.com/openmozi/op…

免责声明:本项目仅供学习,不构成投资建议。股市有风险,投资需谨慎。

openfr_demo.gif

maotai1.jpg 图 1:LLM 规划研究步骤( Plan-Execute 规划阶段)

maotai2.jpg 图 2:按步骤调用金融数据工具并展示中间结果

maotai3.jpg 图 3:综合所有步骤给出最终结论和投资建议

📊 项目简介

OpenFR (Open Financial Research) 是一个极简、轻量的智能金融研究 Agent,基于大语言模型并集成 AKShare 数据接口,提供股票、基金、期货、指数、宏观经济等金融数据的自动化查询和分析能力。

✨ 核心特性

  • 🌱 极简 & 轻量 - 纯 Python 包 + Typer CLI,仅依赖AKShare数据,一条命令即可开始研究
  • 🤖 规划驱动的 Agent - Plan-Execute:先拆解任务,再按步骤调用工具并综合回答
  • 高性能优化 - 只读工具并行调用、多数据源重试与智能降级、结果截断与上下文压缩
  • 🎯 智能工具选择 - 根据问题类型选择最相关的行情 / 板块 / 宏观工具
  • 📈 丰富的数据源 - 35+ 金融数据工具,覆盖 A 股、港股、基金、期货、指数、宏观及行业板块
  • 🔄 多 LLM 支持 - 支持 15+ 主流 LLM 提供商(国产 + 海外 + 本地)
  • 🎨 美观的 CLI - Rich 终端界面,实时显示规划、工具调用与最终分析结果
  • 🔌 智能备用切换 - 东方财富 + 新浪 + 同花顺,多数据源自动切换与重试
  • 💾 缓存与限流友好 - 股票列表缓存 6 小时,部分行情接口缓存 1 分钟,减少重复请求
  • 📝 对话记忆与 Scratchpad - 维护最近对话与工具调用历史,支持多轮追问
  • 🛡️ 错误恢复 - 失败重试、降级替代及“基于已有信息收尾”的保护逻辑

🏗️ 架构设计

系统架构图

flowchart TD
    User[用户] --> CLI[CLI 终端]

    CLI --> Agent[FinancialResearchAgent]

    Agent -->|规划与推理| LLM[LLM 层]
    Agent -->|调用| Tools[金融数据工具]
    Agent -->|记录| Scratchpad[Scratchpad]

    Tools --> AKShare[AKShare 接口]
    AKShare --> Sources[东财 / 新浪 / 同花顺]

    Agent --> CLI

架构特点

统一的 Plan-Execute 流程

  • 接到问题后先用 LLM 规划 2~5 个研究步骤,再按步骤逐个执行工具调用
  • 每步结束后把关键信息写入 Scratchpad,最终基于所有步骤结果进行综合回答

性能优化

  • 缓存:股票代码列表等长周期数据缓存 6 小时,部分行情数据做短期缓存
  • 并行工具调用:对行情/指数/宏观等只读工具支持并行执行,可配置 OPENFR_ENABLE_PARALLEL_TOOLS
  • 多数据源降级:指数、行业板块、A 股行情等都集成了东财/新浪/同花顺等多源与自动重试
  • 上下文压缩:对过长的工具结果做截断,只把关键信息反馈给 LLM

数据层

  • 多数据源:东方财富(主)+ 新浪财经(备)
  • 智能重试:网络错误自动重试,指数退避
  • 降级策略:主接口失败自动切换备用源

🚀 快速开始

安装

# 克隆仓库
git clone https://github.com/openmozi/openfr.git
cd openfr

# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# 安装依赖
pip install -e .

配置

创建 .env 文件并配置 API 密钥:

# 默认推荐:智谱 AI(默认提供商已改为 zhipu)
ZHIPU_API_KEY=your_zhipu_api_key_here
OPENFR_PROVIDER=zhipu
# 默认模型:glm-4.7(也可省略 OPENFR_MODEL,程序会使用提供商默认模型)
OPENFR_MODEL=glm-4.7