使用说明
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
供应链图
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 端点触发一个后台作业,该作业:
- 从Memgraph中获取所有DEPENDS_ON边
- 通过yfinance为每个独特的股票代码下载2年的每日收盘价
- 对于每个供应商依赖对,OLS回归滞后1-30个交易日
- 写
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-Keyheader--在缺少/无效密钥时返回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工具
- 将架构条目添加到
mcp_server/capabilities.json - 在中实现处理程序
mcp_server/invoke_handlers/ - 导出自
mcp_server/invoke_handlers/__init__.py - 在中添加调度分支
mcp_server/server.py/invoke处理器 - 添加函数声明和
_execute_tool映射中mcp_server/chat_agent.py - 在中添加测试
tests/
添加新数据源
- 在下面添加连接器模块
connectors/ - 在中添加设置字段
mcp_server/config.py和.env.example - 在中集成回退逻辑
mcp_server/invoke_handlers/quote_latest.py - 在中添加标准化测试
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许可证——见 许可证 了解详情。
专为需要基于数据而非猜测的答案的金融专业人士而设计。