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

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

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

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

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

图 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

数据层

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

🚀 快速开始

安装

bash 复制代码
# 克隆仓库
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 密钥:

bash 复制代码
# 默认推荐:智谱 AI(默认提供商已改为 zhipu)
ZHIPU_API_KEY=your_zhipu_api_key_here
OPENFR_PROVIDER=zhipu
# 默认模型:glm-4.7(也可省略 OPENFR_MODEL,程序会使用提供商默认模型)
OPENFR_MODEL=glm-4.7
复制代码
相关推荐
Lost of 程序猿14 分钟前
AOP 实战:面向切面编程从理论到落地
后端·asp.net·aop·面向切片变成
Lost of 程序猿1 小时前
ASP.NET Core 认证授权实战:从 JWT 到 Policy,设计一套企业级 RBAC 权限系统
后端·asp.net
Lost of 程序猿1 小时前
ASP.NET Core 后台任务全景:从 BackgroundService 到 Channel 队列,再到分布式调度
后端·asp.net·.netcore
倾颜1 小时前
NestJS 核心概念梳理:从 Module、Controller 到 Guard、Interceptor
后端·node.js·nestjs
东风破_2 小时前
JWT 1:从一个登录请求开始,理解 React 项目里的 API 层与 Mock
前端·后端
东风破_2 小时前
JWT 3:为什么 Token 要放进 Authorization?Axios 拦截器到底解决了什么?
前端·后端
东风破_2 小时前
JWT 5:路由守卫是什么?把整个 JWT 登录鉴权流程串起来
前端·后端
东风破_2 小时前
JWT 2:HTTP 是无状态的,为什么登录成功后还要给 Token?
前端·后端
东风破_2 小时前
JWT 4:Zustand 到底解决了什么?为什么登录状态要放进 Store?
前端·后端
IT_陈寒2 小时前
Vite动态导入差点让我秃头,原来问题出在这
前端·人工智能·后端