MCP股票分析演示
一个全面的股票分析应用程序,展示了 模型上下文协议(MCP) 带着一个 智能人工智能代理 它使用基于LLM的工具选择和多个数据源。
🧠 智能代理架构
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ User Query │───▶│ Intelligent │───▶│ MCP Server │
│ (Natural Lang.) │ │ Agent (LLM) │ │ (4 Tools) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ TAVILY API │ │ Yahoo Finance │
│ (Enhanced News) │ │ (Stock Data) │
└─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ Groq LLM │
│ (Planning + │
│ Summaries) │
└─────────────────┘🚀 主要特点
🧠 LLM驱动的智能
- 动态工具选择:Agent使用Groq LLM根据用户查询决定调用哪些工具
- 智能规划:Agent分析请求并通过推理创建执行计划
- 适应性行为:不同的查询会自动触发不同的工具组合
- 自然语言处理:接受会话查询并提供全面分析
🔧 多种数据源和工具
MCP服务器工具:
get_quote-实时股票报价和基本指标get_stock_history-技术分析的历史价格数据get_company_info-公司详细信息(行业、行业、市值、描述)company_news-通过DuckDuckGo搜索新闻
代理直接能力:
search_news_tavily-通过TAVILY API增强新闻搜索功能- 智能路由:代理根据查询上下文在DuckDuckGo和TAVILY之间进行选择
🎯 智能查询示例
综合分析:
Query: "Give me a complete analysis of Tesla"
Agent Decision: Calls get_quote + get_company_info + get_stock_history + search_news_tavily
Reasoning: "User wants comprehensive analysis, so I need current price, company background, recent trends, and latest news"新闻焦点:
Query: "What's the recent news about Apple?"
Agent Decision: Calls search_news_tavily only
Reasoning: "User specifically asked for news, no need for stock data"技术分析:
Query: "Show me MSFT price trends"
Agent Decision: Calls get_quote + get_stock_history
Reasoning: "User wants price trends, so current quote plus historical data"🏗️ 架构概述
服务
- MCP服务器 (端口8000)-带有库存数据工具的模型上下文协议服务器
- 代理客户端 (端口8001)-基于LLM规划的智能代理
- 用户界面 (Port 3000)-基于React的web界面
智能代理工作流
User Query → LLM Planning → Tool Selection → Execution → LLM Summary- 查询分析:LLM分析用户意图和需求
- 工具规划:代理决定需要哪些工具以及使用顺序
- 动态执行:根据计划调用MCP工具和/或直接API
- 智能摘要:LLM从所有数据源生成全面分析
🚀 快速开始
先决条件
- Docker和Docker Compose
- 已配置环境变量(请参阅配置部分)
1.克隆和设置
git clone
cd mcp_agent_stock_demo2.配置环境
复制环境模板并添加您的API密钥:
cp .env.example .env
# Then edit .env with your actual API keys所需的API密钥:
# Required for intelligent agent
GROQ_API_KEY=your_groq_api_key_here
# Required for enhanced news search
TAVILY_API_KEY=your_tavily_api_key_here3.使用Docker Compose进行部署
# Build and start all services
docker-compose up --build
# Or run in background
docker-compose up -d --build4.访问应用程序
- 网页用户界面: http://localhost:3000
- 代理API: http://localhost:8001
- MCP服务器: http://localhost:8000
🔧 API终点
智能代理(端口8001)
POST /analyze -智能分析
演示基于LLM的工具选择的主要端点:
curl -X POST "http://localhost:8001/analyze" \
-H "Content-Type: application/json" \
-d '{"query": "Give me a complete analysis of Tesla including recent trends"}'响应结构:
{
"reasoning": "User wants comprehensive analysis, so I need current price, company background, recent trends, and latest news",
"tools_used": ["get_quote", "get_company_info", "get_stock_history", "search_news_tavily"],
"data": {
"quote": {...},
"company_info": {...},
"history": {...},
"news": [...]
},
"summary": "LLM-generated comprehensive analysis..."
}GET /tools -可用工具
列出代理可以使用的所有可用工具:
curl "http://localhost:8001/tools"POST /summary -传统端点
保持向后兼容性(使用硬编码的工具选择):
curl -X POST "http://localhost:8001/summary" \
-H "Content-Type: application/json" \
-d '{"symbol": "AAPL"}'MCP服务器(端口8000)
GET /list_tools -MCP工具发现
curl "http://localhost:8000/list_tools"POST /call_tool -执行MCP工具
curl -X POST "http://localhost:8000/call_tool" \
-H "Content-Type: application/json" \
-d '{"name": "get_quote", "arguments": {"symbol": "AAPL"}}'🛠️ 发展
地方发展
# MCP Server
cd mcp_stock_server
uv sync
uv run python server.py
# Agent Client
cd agent_client
uv sync
uv run uvicorn app.main:app --host 0.0.0.0 --port 8001
# UI
cd ui
npm install
npm start测试智能代理
基于LLM的测试工具选择:
# Comprehensive analysis
curl -X POST "http://localhost:8001/analyze" \
-H "Content-Type: application/json" \
-d '{"query": "Analyze Tesla stock with recent news and trends"}'
# News-only query
curl -X POST "http://localhost:8001/analyze" \
-H "Content-Type: application/json" \
-d '{"query": "What are the latest news about Apple?"}'
# Technical analysis
curl -X POST "http://localhost:8001/analyze" \
-H "Content-Type: application/json" \
-d '{"query": "Show me Microsoft price trends and current valuation"}'📊 配置
环境变量
必修的:
GROQ_API_KEY-用于基于法学硕士的规划和总结TAVILY_API_KEY-用于增强新闻搜索
可选:
MCP_SERVER_URL-MCP服务器端点(默认值:http://mcp-server:8000)AGENT_PORT-代理服务端口(默认:8001)UI_PORT-UI服务端口(默认值:3000)
获取API密钥
Groq API密钥:
- 访问https://console.groq.com/
- 创建帐户并生成API密钥
- 增添
.env文件(复制自.env.example)
API TAVILLY密钥:
- 访问https://tavily.com/
- 注册API访问
- 增添
.env文件(复制自.env.example)
🔍 运作原理
智能代理流程
- 查询接收:用户提交自然语言查询
- LLM分析:Groq LLM分析意图并确定所需数据
- 工具规划:代理通过推理创建执行计划
- 动态执行:
- 调用MCP服务器工具获取库存数据 - 调用TAVILY API以获取增强的新闻(需要时) - 根据查询要求进行调整
- 数据集成:合并来自多个来源的结果
- LLM总结:使用收集到的所有数据生成全面分析
刀具选择逻辑
代理使用LLM推理来决定调用哪些工具:
- 股票价格查询 →
get_quote - 公司研究 →
get_company_info+get_quote - 技术分析 →
get_stock_history+get_quote - 新闻请求 →
search_news_tavily或company_news - 综合分析 → 所有相关工具
MCP集成
- 工具发现:代理动态发现可用的MCP工具
- HTTP接口:为工具执行清理REST API
- 错误处理:当工具不可用时,优雅的回退
- 可扩展性:易于向MCP服务器添加新工具
🐳 Docker部署
服务配置
services:
mcp-server: # MCP tools and stock data
agent-client: # Intelligent agent with LLM
ui: # React web interface健康检查
所有服务都包括可靠部署的健康检查:
# Check service status
docker-compose ps
# View logs
docker-compose logs agent-client
docker-compose logs mcp-server🔧 故障排除
常见问题
代理人没有做出明智的决定:
- 验证
GROQ_API_KEY设置正确 - 检查代理日志:
docker-compose logs agent-client
新闻搜索不起作用:
- 验证
TAVILY_API_KEY已配置 - 测试用
/analyze端点
MCP工具不可用:
- 检查MCP服务器状态:
curl http://localhost:8000/list_tools - 验证服务之间的网络连接
调试模式
# Run with verbose logging
docker-compose up --build
# Check individual service logs
docker-compose logs -f agent-client📈 智能行为示例
自适应工具选择
查询“特斯拉的表现如何?”
- 代理推理:“一般性能查询需要当前价格和最近的上下文”
- 使用的工具:
get_quote,search_news_tavily
查询:“给我特斯拉的财务细节”
- 代理推理:“财务细节需要公司信息和当前指标”
- 使用的工具:
get_company_info,get_quote
查询:“分析特斯拉随时间推移的价格趋势”
- 代理推理:“趋势分析需要历史数据和当前价格”
- 使用的工具:
get_stock_history,get_quote
多源情报
代理智能地组合来自以下来源的数据:
- 雅虎财经 (通过MCP)-股价、公司数据、历史趋势
- API TAVILLY (直接)-通过相关性排名增强新闻搜索
- DuckDuckGo (通过MCP)-一般新闻搜索作为后备
- Groq法学硕士 -计划、推理和全面总结
🎯 后续步骤
- 添加更多MCP工具 (收益数据、分析师评级等)
- 增强LLM提示 为了更好地选择工具
- 实现缓存 对于频繁请求的数据
- 添加实时数据流 能力
- 创建自定义工具链 用于特定分析类型
______________________________________________________________________
此应用程序展示了将MCP架构与基于LLM的智能代理相结合的强大功能,用于动态、自适应的数据分析工作流程。
