金融智能分析平台

QuantVex是一个结合实时市场数据、供应链因果图和新闻分析的AI金融智能平台,提供基于多代理推理的结构化市场影响分析。

  • by Anurag7010
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Anurag7010/finance-mcp

使用说明

QuantEx

人工智能金融智能平台

实时市场数据·供应链因果关系·实时新闻摄取·多智能体推理


演示

记录你自己的: 启动应用程序,打开Loom或OBS,运行多代理分析查询,并导出为GIF→ 保存到 docs/demo.gif.


概述

QuantEx是一个全栈金融智能平台,结合了实时市场数据、基于图形的供应链因果关系、实时新闻摄取和对抗性多代理推理,提供结构化、可审计的市场影响分析。

与通用的人工智能助手不同,QuantEx的每一个响应都基于真实的工具调用——来自市场API的实时报价、供应链知识图上的图遍历以及新获取的新闻——从未经过验证的LLM猜测。

User query → Groq Llama-3.3-70b selects tool → tool executes against live data/graph/news
           → structured result → Groq formats response → frontend renders cards

主要特点

实时市场数据

  • 多提供商回退的实时股票报价(Finnhub→ 阿尔法Vantage→ Redis缓存)
  • 通过Binance WebSocket和REST API的加密货币价格
  • 印度市场指数(NIFTY 50,SENSEX)和实时美元/印度卢比汇率
  • 两级缓存:Redis快照+基于哈希的语义缓存

供应链因果图

  • 包含57家公司、20种商品、100+依赖边的Memgraph知识图
  • 多跳遍历,查找所有面临中断的下游公司
  • 预先播种了真正的标准普尔500强供应链关系
  • 因果贝塔校准 --OLS在DEPENDS_on边缘上拟合滞后模型(通过融资)

SEC EDGAR集成

  • 获取任何美国上市公司的最新10-K文件
  • Groq LLM从业务和风险因素部分提取指定的供应商/客户关系
  • 将关系作为DEPENDS_ON边标记写入图形 source='EDGAR'

实时新闻摄入与影响分析

  • 通过NewsData.io获取实时文章
  • 分析中断事件并将其写入供应链图
  • 计算级联影响:哪些公司受到影响,爆炸半径有多远

多智能体投资推理

  • 牛市代理和熊市代理同时运行,每个代理都从实时工具中收集证据
  • 在法官评估之前,牛市反驳轮对熊市案提出质疑
  • 裁判代理人将这两个论点综合成一个决定性的判决:强烈买入/买入/持有/卖出/强烈卖出
  • 结构化输出在前端呈现为视觉卡片
  • SSE流媒体实时公开每个推理步骤
  • 判决历史 --每个判决都会保存到SQLite中,并在5个和30个交易日后检查准确性

AI聊天界面

  • Groq Llama-3.3-70b有严格的领域保障——仅限金融,没有偏离主题的答案
  • 带有20个滚动上下文窗口的完整对话历史记录
  • 确定性工具路由:模型无法从记忆中回答新闻问题

现场演示

服务 URL
前端 quantvex.vercel.app
API(Swagger) quantvex-api-zpai.onrender.com/docs
MCP清单 quantvex api zpai.onrender.com/.knowledge/mcp

建筑

看 docs/architecture.png 用于可视化图表(从Excalidraw或draw.io导出并另存为 docs/architecture.png).

┌─────────────────────────────────────────────────────────────┐
│                        React Frontend                        │
│   HomePage · ChatPage · DashboardPage · Analysis Cards       │
└────────────────────────┬────────────────────────────────────┘
                         │ HTTPS + X-API-Key
┌────────────────────────▼────────────────────────────────────┐
│                    FastAPI MCP Server (v2.0)                  │
│  /chat · /invoke · /stream/analysis · /health · /verdicts    │
│              Groq Llama-3.3-70b Chat Agent                   │
│         Tool routing · Conversation history · Guardrails     │
└──┬──────────────┬───────────────┬──────────────┬────────────┘
   │              │               │              │
   ▼              ▼               ▼              ▼
Market         Supply          News           Multi-Agent
Connectors     Chain Graph     Pipeline       Reasoning
   │              │               │              │
Finnhub        Memgraph       NewsData.io    Bull Agent
Alpha Vantage  (57 companies  EventParser    Bear Agent
Binance WS     20 commodities EventIngestor  Judge Agent
               100+ edges)    EDGAR 10-K     Verdict SQLite
   │              │               │              │
   └──────────────┴───────────────┴──────────────┘
                         │
              ┌──────────▼──────────┐
              │      Cache Layer     │
              │  Redis · Qdrant      │
              └─────────────────────┘

技术栈

层 技术
AI推理 Groq Llama-3.3-70b-多功能(函数调用)
后端 FastAPI 0.104、Python 3.11、Uvicorn
供应链图 Memgraph(Bolt/Cypher,neo4j Python驱动程序)
语义缓存 Qdrant+句子转换器(全MiniLM-L6-v2)
热缓存 Redis 7
市场数据 Finnhub REST、Alpha Vantage REST、币安WebSocket
新闻 NewsData.io REST API
SEC文件 SEC EDGAR REST API(10-K文件提取)
因果分析 金融+OLS(scipy/numpy)
判决跟踪 SQLite
前端 React 19、TypeScript、顺风CSS、Framer Motion、Recharts
容器化 Docker Compose

项目结构

quantvex/
├── mcp_server/                 # FastAPI server + Groq chat agent
│   ├── server.py               # All HTTP endpoints
│   ├── chat_agent.py           # Groq Llama-3.3-70b agent with tool calling
│   ├── capabilities.json       # MCP tool catalog
│   ├── schemas.py              # Pydantic request/response models
│   ├── config.py               # Env-driven settings (pydantic-settings)
│   └── invoke_handlers/        # One handler per MCP tool
│       ├── quote_latest.py
│       ├── quote_stream.py
│       ├── trace_impact.py
│       ├── news_analysis.py
│       ├── multi_agent_analysis.py
│       ├── edgar_refresh.py    # SEC EDGAR 10-K → graph update
│       └── stream_analysis.py  # SSE streaming handler
│
├── src/finance_mcp/            # Core domain engine
│   ├── graph/
│   │   └── client.py           # GraphClient — Bolt/Cypher, injection-safe, connection-pooled
│   ├── news/                   # News ingestion pipeline
│   │   ├── news_client.py      # NewsData.io adapter
│   │   └── event_parser.py     # Rule-based disruption parser
│   ├── ingestion/              # Graph write layer
│   │   ├── event_ingestor.py   # Writes Event vertices + IMPACTS edges
│   │   └── pipeline.py         # End-to-end orchestration
│   ├── reasoning/              # Multi-agent reasoning
│   │   ├── bull_agent.py       # Upside thesis agent
│   │   ├── bear_agent.py       # Downside thesis agent
│   │   ├── judge_agent.py      # Verdict synthesis
│   │   ├── orchestrator.py     # Concurrent bull/bear execution + rebuttal
│   │   └── schemas.py          # Agent I/O contracts
│   ├── edgar/                  # SEC EDGAR integration
│   │   ├── edgar_client.py     # EDGAR HTTP client (CIK lookup + 10-K fetch)
│   │   ├── supplier_extractor.py # Groq LLM relationship extraction
│   │   └── graph_updater.py    # Writes DEPENDS_ON edges to graph
│   ├── causal/                 # Causal beta calibration
│   │   ├── price_fetcher.py    # yfinance price history download
│   │   ├── beta_calculator.py  # OLS lag model
│   │   └── calibrator.py       # Full-graph calibration orchestrator
│   ├── verdict_history/        # Verdict accuracy tracking
│   │   ├── db.py               # SQLite schema + connection helpers
│   │   ├── tracker.py          # record_verdict + async 5d/30d price checks
│   │   └── accuracy.py         # Accuracy stats aggregation
│   └── services/               # Shared business logic
│       ├── quote_service.py
│       ├── graph_service.py
│       └── news_service.py
│
├── connectors/                 # Market data adapters
│   ├── finnhub.py              # REST quote + profile (60 req/min)
│   ├── alpha_vantage.py        # REST quote/intraday (5 req/min)
│   └── binance_ws.py           # Live WebSocket trade stream
│
├── cache/                      # Cache layer
│   ├── redis_client.py         # Snapshot + stream APIs
│   └── qdrant_client.py        # Semantic cache with similarity threshold
│
├── frontend/                   # React application
│   └── src/
│       ├── pages/              # LandingPage · ChatPage · DashboardPage
│       ├── components/
│       │   ├── analysis/       # VerdictCard · BullCaseCard · BearCaseCard
│       │   └── ui/             # AnimatedHero · AnimatedAIChat · FocusRail
│       └── services/api.ts     # Typed Axios API client
│
├── tests/                      # Unit + integration tests
├── scripts/                    # Ops scripts
│   ├── seed_production_data.py # Seeds full S&P 50 + commodities graph (Bolt)
│   ├── seed_via_http.py        # Seeds graph via HTTP REST (cloud/AuraDB)
│   ├── verify_system.py        # System health verification
│   └── e2e_pipeline.py         # End-to-end smoke test
│
├── infra/                      # Docker Compose (Redis, Qdrant, MCP server)
└── docker/                     # Memgraph Docker Compose

MCP工具

QuantEx通过其模型上下文协议服务器公开了六个工具:

工具 说明
quote.latest 实时股票/加密货币价格,带缓存瀑布和提供商回退
quote.stream 订阅实时币安WebSocket价格流
trace_impact 多跳供应链遍历——发现所有面临中断的下游公司
analyze_news_impact 获取实时新闻→ 解析事件→ 写入图形→ 回流级联效应
multi_agent_analysis 同时运行牛市/熊市推理并返回法官判决
edgar_refresh 获取SEC 10-K→ 通过Groq LLM提取供应商→ 更新图形边

api参考

所有端点都需要 X-API-Key 标题除外 /health 和 /.well-known/mcp.

方法 端点 描述
GET /.well-known/mcp MCP发现元数据
GET /capabilities 包含模式的完整工具目录
POST /invoke 按名称执行任何MCP工具
POST /chat Groq Llama-3.3-70b对话界面
GET /stream/analysis SSE多智能体推理步骤流
POST /subscribe 订阅实时价格流
POST /unsubscribe 取消流订阅
GET /subscriptions 列出活动订阅
POST /calibrate/edges 触发背景因果贝塔校准
GET /verdicts/history 判决历史(可按股票代码过滤)
GET /verdicts/accuracy 每种判决类型的准确性统计
GET /market/indices Live NIFTY 50,敏感指数,美元/印度卢比
GET /market/crypto/{symbol} 通过币安进行实时加密货币报价
GET /health 对所有服务进行深入的健康检查
GET /metrics 运行时指标:请求、延迟、缓存、令牌

示例——调用工具

curl -X POST http://localhost:8000/invoke \
  -H "X-API-Key: your-key" \
  -H "Content-Type: application/json" \
  -d '{
    "tool_name": "quote.latest",
    "arguments": { "symbol": "AAPL" }
  }'
{
  "success": true,
  "data": {
    "symbol": "AAPL",
    "price": 213.17,
    "inr_price": 17891.45,
    "usd_inr_rate": 83.94,
    "data_source": "FINNHUB",
    "cache_hit": false,
    "latency_ms": 142.3
  }
}

示例——供应链跟踪

curl -X POST http://localhost:8000/invoke \
  -H "X-API-Key: your-key" \
  -H "Content-Type: application/json" \
  -d '{
    "tool_name": "trace_impact",
    "arguments": { "ticker": "TSMC", "max_hops": 3 }
  }'

示例——EDGAR刷新

curl -X POST http://localhost:8000/invoke \
  -H "X-API-Key: your-key" \
  -H "Content-Type: application/json" \
  -d '{
    "tool_name": "edgar_refresh",
    "arguments": { "ticker": "AAPL" }
  }'

入门指南

先决条件

  • Python 3.11+
  • Node.js 18+
  • Docker和Docker Compose
  • API密钥:Groq、Finnhub、Alpha Vantage、NewsData.io

1.克隆存储库

git clone https://github.com/Anurag7010/finance-mcp.git
cd finance-mcp

2.配置环境

cp .env.example .env

编辑 .env 并填写所有必填值:

# Required
GROQ_API_KEY=gsk_...
MCP_API_KEY=your-secret-key

# Market data
FINNHUB_API_KEY=your-finnhub-key
ALPHA_VANTAGE_API_KEY=your-av-key

# News
NEWSDATA_API_KEY=pub_...

# Infrastructure (defaults work with Docker Compose)
REDIS_HOST=localhost
REDIS_PORT=6379
QDRANT_HOST=localhost
QDRANT_PORT=6333
MEMGRAPH_HOST=localhost
MEMGRAPH_PORT=7687

# CORS
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173

3.启动基础设施

# Start Redis, Qdrant, and the MCP server container
cd infra && docker-compose up -d

# Start Memgraph (required for supply chain graph)
cd docker && docker-compose -f memgraph-docker-compose.yml up -d

等待约20秒,以便服务初始化。Memgraph Lab用户界面可在http://localhost:7444.

4.安装Python依赖项

pip install -r requirements.txt

5.绘制供应链图

PYTHONPATH=src python scripts/seed_production_data.py

这将57家公司、20种商品、64个依赖边缘、53个必需边缘和8个预先播种的历史事件放入Memgraph。

6.验证系统健康状况

PYTHONPATH=src python scripts/verify_system.py

所有组件应报告正常。

7.启动MCP服务器

PYTHONPATH=src uvicorn mcp_server.server:app --host 0.0.0.0 --port 8000 --reload

8.启动前端

cd frontend
cp .env.example .env          # set REACT_APP_API_KEY and REACT_APP_API_URL
npm install
npm start

打开 http://localhost:3000.


供应链图

Memgraph知识图代表了标普500指数前50名的真实供应链依赖关系。使用Bolt协议和标准neo4j Python驱动程序——整个过程都是完全参数化的Cypher查询。

图形架构

顶点类型 属性
Company ticker, name, sector
Commodity name, category
Event description, severity
边类型 属性 含义
DEPENDS_ON weight, beta, lag_days, r_squared 公司依赖另一家公司作为供应商
REQUIRES volume 公司消费商品
IMPACTS impact_time 事件影响公司或商品

示例跟踪

台积电工厂中断会传播到:

TSMC → AAPL (weight: 0.95)
TSMC → NVDA (weight: 0.98)
TSMC → AMD  (weight: 0.95)
TSMC → QCOM (weight: 0.90)
NVDA → MSFT (weight: 0.70) [hop 2]
NVDA → META (weight: 0.80) [hop 2]
NVDA → AMZN (weight: 0.65) [hop 2]

多智能体推理

当用户请求投资论文时,牛市判断管道就会运行。

User: "Give me a full analysis of NVDA"
         │
         ├── Bull Agent ──────────────────────────────────┐
         │   Gathers: live quote, trace_impact evidence    │
         │   Builds: upside thesis + confidence score      │
         │                                                 │
         └── Bear Agent                                    │
             Gathers: news impact, blast radius            │
             Builds: downside thesis + confidence score    │
                         │                                 │
                         ▼                                 │
                    Bull Rebuttal ◄──────────────────────┘
                         │
                         ▼
                    Judge Agent
                    Compares confidence gap
                    Produces: verdict + conviction
                    Returns: structured JSON

判决规模

判决 条件
STRONG BUY 牛市置信区间≥15点,置信区间≥45%
BUY 牛市置信区间≥8点,置信度≥45%
HOLD 差距<8分——真正有争议
SELL 熊信心差距≥8分
STRONG SELL 熊信心差距≥15分
INSUFFICIENT DATA 最大置信度<45%

判决存储在SQLite中,并在5个和30个交易日后使用融资价格数据自动检查准确性。精度统计数据可通过以下方式获得 /verdicts/accuracy.


因果贝塔校准

这 /calibrate/edges 端点触发一个后台作业,该作业:

  1. 从Memgraph中获取所有DEPENDS_ON边
  2. 通过yfinance为每个独特的股票代码下载2年的每日收盘价
  3. 对于每个供应商依赖对,OLS回归滞后1-30个交易日
  4. 写 beta, lag_days,以及 r_squared 在每条边上

这量化了 多少 和 多快 供应商冲击会传递给下游公司。


测试

# Run all tests
pytest tests/ -v

# Unit tests only (no graph/DB required)
pytest tests/ -v -m "not integration"

# With coverage
pytest tests/ --cov=mcp_server --cov=src/finance_mcp --cov-report=term-missing

安全

  • 所有工具端点都需要 X-API-Key header--在缺少/无效密钥时返回401
  • 速率限制:每个API密钥每60秒窗口60次请求-违约时返回429次
  • CORS仅限于配置 ALLOWED_ORIGINS --生产中没有通配符
  • 所有图查询都使用参数化的Cypher——用户输入没有字符串插值
  • EDGAR URL由结构化字段(CIK、登录号)构建,没有SSRF表面
  • EDGAR提取的LLM输出在图写入之前经过JSON解析和字段验证
  • 前端API密钥从环境变量加载,从不硬编码

环境变量

变量 必填 描述
GROQ_API_KEY ✅ Groq API密钥(Llama-3.3-70b)
MCP_API_KEY ✅ 服务器身份验证密钥
FINNHUB_API_KEY ✅ Finnhub市场数据
ALPHA_VANTAGE_API_KEY ✅ 阿尔法Vantage市场数据
NEWSDATA_API_KEY ✅ NewsData.io实时新闻
REDIS_HOST ✅ Redis主机名
REDIS_PORT ✅ Redis端口(默认值:6379)
QDRANT_HOST ✅ Qdrant主机名
QDRANT_PORT ✅ Qdrant端口(默认值:6333)
MEMGRAPH_HOST ✅ Memgraph主机名
MEMGRAPH_PORT ✅ Memgraph螺栓端口(默认值:7687)
ALLOWED_ORIGINS ✅ 逗号分隔的CORS源
VERDICT_DB_PATH ✗ SQLite路径(默认:presidents.db)

操作脚本

脚本 目的
scripts/seed_production_data.py 标普50指数成份股公司/商品图。可以安全地重新运行(幂等)。支持 --dry-run.
scripts/verify_system.py 检查所有服务连接、图运行状况和处理程序注册。
scripts/e2e_pipeline.py 完整的端到端烟雾测试:新闻获取→ 图形摄取→ 痕迹→ 多智能体。

发展

添加新的MCP工具

  1. 将架构条目添加到 mcp_server/capabilities.json
  2. 在中实现处理程序 mcp_server/invoke_handlers/
  3. 导出自 mcp_server/invoke_handlers/__init__.py
  4. 在中添加调度分支 mcp_server/server.py /invoke 处理器
  5. 添加函数声明和 _execute_tool 映射中 mcp_server/chat_agent.py
  6. 在中添加测试 tests/

添加新数据源

  1. 在下面添加连接器模块 connectors/
  2. 在中添加设置字段 mcp_server/config.py 和 .env.example
  3. 在中集成回退逻辑 mcp_server/invoke_handlers/quote_latest.py
  4. 在中添加标准化测试 tests/test_connectors.py

演出

在运行Redis和Qdrant的温暖本地服务器上进行测量——60个报价请求(10个报价×6次重复)+20个跟踪请求(运行 python scripts/benchmark.py 复制):

工具 p50 p95 p99 缓存命中率
quote.latest 9毫秒 386毫秒 493毫秒 81.5% (Redis)
trace_impact 20毫秒 29毫秒 36毫秒 n/a(图形查询)

缓存命中数在~9ms内从Redis中发出。缓存未命中击中Finnhub直播(典型值为300-600ms)。p95峰值反映了每个股票代码的第一个实时获取请求。


评估

在25个查询的方向精度基准上评估多代理管道(运行 python evals/run_evals.py --baseline 复制):

多代理管道: 76%的定向精度 对比 68%的单LLM基线 (不使用工具)-- +8 pp改进 来自实时工具基础和校准的对抗性辩论。

该基准涵盖了11个明显看涨的股票(NVDA、MSFT、AAPL……)、8个看跌情景(INTC、PARA、PFE……)和6个有争议的HOLD案例。所有10个明显看涨和7/8个看跌的案例都正确解决了。看 evals/README.md 完整的方法论。


代码库

77个Python文件·13302行代码·262个通过单元测试·62%的测试覆盖率

生成方式: find . -name "*.py" | xargs wc -l, pytest --cov-report=term.


许可证

MIT许可证——见 许可证 了解详情。


专为需要基于数据而非猜测的答案的金融专业人士而设计。