使用说明
🚀 市场情报AI聊天机器人-完整项目自述
📋 快速概览
一个生产就绪的人工智能市场智能聊天机器人,通过自然对话提供实时股票数据、市场新闻和财务分析。使用 快速API, LangGraph, OpenAI GPT-4,以及 模型上下文协议(MCP) 用于模块化工具集成。
🌐 实时部署:
- 聊天机器人API: https://mcp-chatbot-production.up.railway.app
- MCP服务器: https://mcp-chatbot-production-f2f9.up.railway.app/mcp
- 前端测试: https://alpha-ask-chat.lovable.app
🎯 项目概要
该项目满足实习任务的所有要求,并提供多种奖金功能:
✅ 核心要求
- ✅ 后端服务 在MCP服务器架构上运行
- ✅ 基于Python 实现(FastAPI+LangGraph)
- ✅ 人工智能聊天机器人 问题之间有上下文记忆
- ✅ 市场/财务数据 能力
- ✅ 可公开测试的API 可通过curl访问端点
- ✅ 托管和部署 铁路
⭐ 已实施奖励功能
- ⭐ 流媒体端点 用于实时聊天体验(如ChatGPT)
- ⭐ Redis缓存 为了提高性能
- ⭐ 速率限制 用于API保护
- ⭐ 工具验证 -显示了实际使用的MCP工具
- ⭐ 全面的错误处理 有帮助的信息
- ⭐ 生产就绪架构 支持Docker
- ⭐ 完整的文件 举例说明
🏗️ 架构概述
┌─────────────────────────────────────────────────────────────────┐
│ USER / CLIENT │
│ (curl, Postman, Frontend App) │
└────────────────────────────┬────────────────────────────────────┘
│ HTTP/HTTPS
▼
┌─────────────────────────────────────────────────────────────────┐
│ CHATBOT BACKEND (FastAPI + LangGraph) │
│ https://mcp-chatbot-production.up.railway.app │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Endpoints: │ │
│ │ • POST /query - Non-streaming responses │ │
│ │ • POST /stream - Real-time streaming (SSE) │ │
│ │ • GET /health - Health check │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ LangGraph Agent: │ │
│ │ • OpenAI GPT-4o-mini for reasoning │ │
│ │ • MemorySaver for conversation context │ │
│ │ • Agentic workflow (decides when to use tools) │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Bonus Features: │ │
│ │ • Redis caching (reduces API calls) │ │
│ │ • Rate limiting (token bucket algorithm) │ │
│ │ • CORS middleware │ │
│ │ • Comprehensive error handling │ │
│ └────────────────────────────────────────────────────────────┘ │
└────────────────────────────┬────────────────────────────────────┘
│ MCP Protocol (Streamable HTTP)
▼
┌─────────────────────────────────────────────────────────────────┐
│ MCP SERVER (Remote Market Intelligence Tools) │
│ https://mcp-chatbot-production-f2f9.up.railway.app/mcp │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ 5 Market Intelligence Tools: │ │
│ │ │ │
│ │ 1. get_stock_price - Real-time stock data │ │
│ │ 2. get_market_news - Latest financial news │ │
│ │ 3. get_stock_history - Historical price data │ │
│ │ 4. compare_stocks - Multi-stock comparison │ │
│ │ 5. get_market_summary - Major indices overview │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ Data Sources: │
│ • Yahoo Finance (yfinance) - Stock data │
│ • NewsAPI - Financial news articles │
└─────────────────────────────────────────────────────────────────┘
🧪 测试API
1.基本查询(非流式)
# Simple question about stock price
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "What is the current price of Apple stock?"
}'
预期响应:
{
"response": "Apple (AAPL) is currently trading at $178.25, up $0.75 (+0.42%) from yesterday's close of $177.50. The stock has a market cap of approximately $2.8 trillion. The stock is performing well today with a day high of $179.50 and day low of $177.80.",
"session_id": "abc-123-def-456",
"tools_used": ["get_stock_price"]
}
2.情境感知对话
# First message - establish context
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "What is Tesla stock price?",
"session_id": "my-session-123"
}'
# Follow-up - remembers we're talking about Tesla
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "How does it compare to yesterday?",
"session_id": "my-session-123"
}'
3.市场新闻查询
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "Give me the latest news about tech stocks"
}'
4.股票比较
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "Compare Apple, Microsoft, and Google stocks"
}'
5.历史数据
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "Show me Amazon stock performance over the last 6 months"
}'
6.市场概述
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "How are the major market indices doing today?"
}'
7.🌟 奖励:流媒体响应(实时)
# Stream responses token-by-token like ChatGPT
curl -N -X POST https://mcp-chatbot-production.up.railway.app/stream \
-H "Content-Type: application/json" \
-d '{
"message": "What is Apple stock trading at right now?"
}'
预期流输出:
event: message
data: {"type": "tool_call", "tool": "get_stock_price", "args": {"symbol": "AAPL"}}
event: message
data: {"type": "tool_executing", "message": "Fetching data..."}
event: message
data: {"type": "token", "content": "Apple "}
event: message
data: {"type": "token", "content": "(AAPL) "}
event: message
data: {"type": "token", "content": "is "}
event: message
data: {"type": "token", "content": "currently "}
...
event: message
data: {"type": "done", "tools_used": ["get_stock_price"], "session_id": "xxx"}
8.健康检查
curl https://mcp-chatbot-production.up.railway.app/health
答复:
{
"status": "healthy",
"service": "Market Intelligence Chatbot",
"agent_ready": true
}
📡 API 文档
交互式Swagger用户界面
访问: https://mcp-chatbot-production.up.railway.app/docs
端点
POST /query
聊天查询的非流式端点
请求正文:
{
message: string; // User's question (1-2000 chars)
session_id?: string; // Optional session ID for context
}
答复:
{
response: string; // AI assistant's response
session_id: string; // Session ID (generated if not provided)
tools_used?: string[]; // MCP tools that were called
}
费率限制: 每个IP每分钟10个请求
POST /stream ⭐ 奖金
使用服务器发送事件实时流式传输响应
请求正文: 同 /query
答复: 服务器发送的事件流,事件类型:
tool_call-代理决定使用工具tool_executing-工具正在获取数据token-单个响应令牌(流式传输!)done-使用工具的最终总结error-发生错误
费率限制: 每个IP每分钟5个请求(由于资源使用情况更严格)
GET /health
健康检查端点
答复:
{
status: "healthy",
service: string,
agent_ready: boolean
}
🛠️ 技术栈
后端(聊天机器人)
- 快速API -现代异步web框架
- LangGraph -代理工作流编排
- LangChain -LLM集成框架
- OpenAI GPT-4o-mini -推理语言模型
- MCP客户端 -模型上下文协议客户端
- Redis(升级版) -缓存和状态管理
- 乌维科恩 -ASGI服务器
MCP服务器(工具)
- MCP-SDK -模型上下文协议服务器
- y融资 -雅虎财经股票数据API
- 新闻API -财经新闻文章
- 意图tp -异步HTTP客户端
- FastMCP -MCP服务器框架
部署
- 铁路 -云平台(两种服务)
- 码头工人 -集装箱化
- Python 3.11 -运行时环境
🎨 主要特征说明
1.上下文管理(内存保护程序)
聊天机器人会记住对话中之前的消息:
# Example conversation flow:
User: "What is Apple stock price?"
Bot: "Apple is trading at $178.25..."
User: "How does that compare to yesterday?" # Remembers we're talking about Apple
Bot: "Apple's price is up $0.75 from yesterday's close of $177.50..."
它是如何工作的:
- 每个对话都有一个独特的
session_id - LangGraph 的
MemorySaver存储消息历史记录 - 代理在响应时可以访问完整上下文
2.🌟 流媒体响应(额外功能)
实时令牌流式传输,如ChatGPT:
优点:
- 向用户提供即时反馈
- 更好的用户体验(感觉更快)
- 渐进式内容加载
- 透明的工具使用(在获取数据时显示)
实施:
- 服务器发送事件(SSE)协议
- Python中的异步生成器
- LangGraph的流媒体功能
3.🌟 Redis缓存(额外功能)
减少API调用并改进响应时间:
缓存的内容:
- 股价数据(5分钟TTL)
- 市场新闻(5分钟TTL)
- 历史数据(5分钟TTL)
- 工具结果(自动)
优点:
- 更快的响应
- 减少了外部API的使用
- 降低成本
- 更高的可靠性
缓存命中示例:
First request: ❌ Cache MISS → Fetch from yfinance → 2.5s
Second request: ✅ Cache HIT → Return cached data → 0.1s
4.🌟 利率限制(奖金功能)
令牌桶算法防止滥用:
限制:
/query:每个IP每分钟10个请求/stream:每个IP每分钟5个请求/health:无限制
速率受限时的响应:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again in 45 seconds.",
"retry_after": 45,
"limit": 10,
"window": "60 seconds"
}
返回的标头:
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1697123456
5.代理工作流程
AI自主决定何时以及使用哪些工具:
流量:
- 用户提问
- Agent分析查询
- 代理人决定:“我需要外部数据吗?”
- 如果是→ 选择合适的工具
- 通过MCP执行工具
- 将结果合成为自然语言
- 向用户返回响应
例子:
Query: "Compare Apple and Tesla, and give me tech news"
Agent thinks:
✓ Need stock data → use get_stock_price (AAPL)
✓ Need stock data → use get_stock_price (TSLA)
✓ Need news → use get_market_news (tech)
Executes 3 tools, then synthesizes response.
6.MCP工具验证
每个响应都显示了实际使用了哪些工具:
{
"response": "...",
"tools_used": ["get_stock_price", "get_market_news"]
}
为什么这很重要:
- 调试透明度
- 验证工具选择是否正确
- 跟踪工具使用模式
- 验证代理行为
🔧 环境变量
聊天机器人后端
# Required
OPENAI_API_KEY=sk-your-openai-key
# MCP Configuration
MCP_TRANSPORT_PROTOCOL=http # or "stdio" for local
MCP_SERVER_URL=https://mcp-chatbot-production-f2f9.up.railway.app/mcp
# Optional - Redis (Upstash)
UPSTASH_REDIS_REST_URL=https://your-redis.upstash.io
UPSTASH_REDIS_REST_TOKEN=your-token
# Optional - Server
PORT=8080
LOG_LEVEL=INFO
OPENAI_MODEL=gpt-4o-mini
MCP服务器
# Required
NEWS_API_KEY=your-newsapi-key
# Optional
PORT=8000
LOG_LEVEL=INFO
MCP_TRANSPORT_MODE=http # For Railway deployment
📊 可用的MCP工具
1. get_stock_price(symbol: str)
获取实时股票价格和公司信息。
例子:
{
"symbol": "AAPL",
"company_name": "Apple Inc.",
"current_price": 178.25,
"previous_close": 177.50,
"change": 0.75,
"change_percent": 0.42,
"volume": 45678900,
"market_cap": 2800000000000,
"day_high": 179.50,
"day_low": 177.80,
"52_week_high": 199.62,
"52_week_low": 164.08
}
2. get_market_news(query: str, num_articles: int)
获取最新的财经新闻文章。
参数:
query:搜索词(默认:“股票市场”)num_articles:文章数量(默认值:5,最大值:10)
例子:
[
{
"title": "Tech Stocks Rally on Strong Earnings",
"description": "Major tech companies exceeded expectations...",
"url": "https://example.com/article",
"published_at": "2025-10-12T10:00:00Z",
"source": "Financial Times",
"author": "John Doe"
}
]
3. get_stock_history(symbol: str, period: str)
用于技术分析的历史价格数据。
参数:
symbol:股票代码period:1d、5d、1mo、3mo、6mo、1y、2y、5y、10y、ytd、最大值
例子:
{
"symbol": "AAPL",
"period": "1mo",
"data_points": 21,
"start_date": "2025-09-12",
"end_date": "2025-10-12",
"latest_close": 178.25,
"period_high": 182.50,
"period_low": 170.30,
"price_change": 7.95,
"price_change_percent": 4.67,
"average_volume": 55000000
}
4. compare_stocks(symbols: list[str])
并排比较多只股票(最多5只)。
例子:
{
"comparison": {
"AAPL": {
"company_name": "Apple Inc.",
"current_price": 178.25,
"market_cap": 2800000000000,
"pe_ratio": 29.5,
"dividend_yield": 0.52,
"52_week_high": 199.62,
"52_week_low": 164.08,
"beta": 1.25
},
"MSFT": { ... },
"GOOGL": { ... }
},
"symbols_analyzed": 3
}
5. get_market_summary()
主要市场指数概述。
例子:
{
"market_summary": {
"S&P 500": {
"symbol": "^GSPC",
"value": 4567.89,
"change": 23.45,
"change_percent": 0.52,
"high": 4589.12,
"low": 4545.67
},
"Dow Jones Industrial Average": { ... },
"NASDAQ Composite": { ... },
"Russell 2000": { ... }
}
}
🚀 部署详细信息
铁路配置
聊天机器人后端:
- 统一资源定位符: https://mcp-chatbot-production.up.railway.app
- 端口:8080(铁路自动分配)
- 构建:Docker(Dockerfile)
- 健康检查:
/health端点 - 自动重启:已启用
MCP服务器:
- 统一资源定位符: https://mcp-chatbot-production-f2f9.up.railway.app/mcp
- 端口:8000(铁路自动分配)
- 构建:Docker(Dockerfile)
- 运输:流式HTTP
- 端点:
/mcp(MCP协议)
Docker镜像
这两个服务都使用Python 3.11 slim镜像:
FROM python:3.11-slim
# Optimized for production
# Includes health checks
# Runs as non-root user
💡 示例用例
1.投资组合跟踪
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "I own Apple, Tesla, and Amazon. How are they performing today?",
"session_id": "portfolio-tracker"
}'
2.投资研究
# Multi-turn conversation
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "Tell me about NVIDIA stock",
"session_id": "research-123"
}'
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "What news is there about AI chip demand?",
"session_id": "research-123"
}'
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "Compare it to AMD",
"session_id": "research-123"
}'
3.市场监测
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "Give me a market overview and the latest financial news"
}'
🎓 我学到了什么
技术技能
- MCP架构:构建模块化、可重用的人工智能工具服务器
- LangGraph:创建具有状态管理的代理工作流
- 异步Python:高效处理并发操作
- API设计:RESTful原则和流协议
- 缓存策略:使用Redis优化性能
- 速率限制:实现令牌桶算法
- Docker和部署:容器化和云部署
- 错误处理:优雅的降级和用户友好的错误
设计模式
- 关注点分离:MCP服务器与聊天机器人后端
- 微服务:独立、可扩展的服务
- 上下文管理器:Python的
async with用于资源清理 - 中间件模式:速率限制、CORS、错误处理
- 观察者模式:使用SSE流媒体
最佳实践
- 环境变量:永远不要硬编码机密
- 日志记录:用于调试的全面日志记录
- 健康检查:监控服务可用性
- 文档:清除自述文件和API文档
- 测试:curl命令便于验证
📁 项目结构
mcp-chatbot/
├── chatbot-backend/ # FastAPI chatbot service
│ ├── agent/
│ │ ├── graph.py # LangGraph agent
│ │ └── state.py # State schema
│ ├── mcp_client/
│ │ └── client.py # MCP client wrapper
│ ├── utils/
│ │ ├── cache.py # Redis caching
│ │ ├── rate_limiter.py # Rate limiting
│ │ └── redis_client.py # Redis connection
│ ├── main.py # FastAPI app
│ ├── requirements.txt
│ ├── Dockerfile
│ └── .env
├── mcp_server_remote.py # Remote MCP server
├── mcp_server.py # Local MCP server (stdio)
├── requirements.txt
├── Dockerfile
└── README.md # This file!
🤝 贡献与反馈
这个项目是为实习选拔过程而建立的。欢迎反馈和建议!
联系人:
- GitHub: https://github.com/mayankgupta8448
📜 许可证
实习选拔过程的教育项目。
🙏 致谢
- Anthropic -对于模型上下文协议(MCP)
- 语言链/语言图 -用于代理工作流框架
- 开放人工智能 -对于GPT-4 API
- 铁路 -免费托管层
- 雅虎财经 -股票市场数据
- 新闻API -财经新闻
📚 额外资源
- MCP文件: https://modelcontextprotocol.io/
- LangGraph文档: https://langchain-ai.github.io/langgraph/
- FastAPI文档: https://fastapi.tiangolo.com/
- 铁路文件: https://docs.railway.app/
✨ 最后说明
该项目展示了:
- ✅ 全栈AI应用开发
- ✅ 生产就绪架构
- ✅ 干净、可维护的代码
- ✅ 全面的文件
- ✅ 现代最佳实践
- ✅ 超出要求的奖励功能
5. get_market_summary()
主要市场指数概述。
例子:
{
"market_summary": {
"S&P 500": {
"symbol": "^GSPC",
"value": 4567.89,
"change": 23.45,
"change_percent": 0.52,
"high": 4589.12,
"low": 4545.67
},
"Dow Jones Industrial Average": { ... },
"NASDAQ Composite": { ... },
"Russell 2000": { ... }
}
}
🚀 部署详细信息
铁路配置
聊天机器人后端:
- 统一资源定位符: https://mcp-chatbot-production.up.railway.app
- 端口:8080(铁路自动分配)
- 构建:Docker(Dockerfile)
- 健康检查:
/health端点 - 自动重启:已启用
MCP服务器:
- 统一资源定位符: https://mcp-chatbot-production-f2f9.up.railway.app/mcp
- 端口:8000(铁路自动分配)
- 构建:Docker(Dockerfile)
- 运输:流式HTTP
- 端点:
/mcp(MCP协议)
Docker镜像
这两个服务都使用Python 3.11 slim镜像:
FROM python:3.11-slim
# Optimized for production
# Includes health checks
# Runs as non-root user
💡 示例用例
1.投资组合跟踪
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "I own Apple, Tesla, and Amazon. How are they performing today?",
"session_id": "portfolio-tracker"
}'
2.投资研究
# Multi-turn conversation
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "Tell me about NVIDIA stock",
"session_id": "research-123"
}'
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "What news is there about AI chip demand?",
"session_id": "research-123"
}'
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "Compare it to AMD",
"session_id": "research-123"
}'
3.市场监测
curl -X POST https://mcp-chatbot-production.up.railway.app/query \
-H "Content-Type: application/json" \
-d '{
"message": "Give me a market overview and the latest financial news"
}'
🎓 我学到了什么
技术技能
- MCP架构:构建模块化、可重用的人工智能工具服务器
- LangGraph:创建具有状态管理的代理工作流
- 异步Python:高效处理并发操作
- API设计:RESTful原则和流协议
- 缓存策略:使用Redis优化性能
- 速率限制:实现令牌桶算法
- Docker和部署:容器化和云部署
- 错误处理:优雅的降级和用户友好的错误
设计模式
- 关注点分离:MCP服务器与聊天机器人后端
- 微服务:独立、可扩展的服务
- 上下文管理器:Python的
async with用于资源清理 - 中间件模式:速率限制、CORS、错误处理
- 观察者模式:使用SSE流媒体
最佳实践
- 环境变量:永远不要硬编码机密
- 日志记录:用于调试的全面日志记录
- 健康检查:监控服务可用性
- 文档:清除自述文件和API文档
- 测试:curl命令便于验证
📁 项目结构
mcp-chatbot/
├── chatbot-backend/ # FastAPI chatbot service
│ ├── agent/
│ │ ├── graph.py # LangGraph agent
│ │ └── state.py # State schema
│ ├── mcp_client/
│ │ └── client.py # MCP client wrapper
│ ├── utils/
│ │ ├── cache.py # Redis caching
│ │ ├── rate_limiter.py # Rate limiting
│ │ └── redis_client.py # Redis connection
│ ├── main.py # FastAPI app
│ ├── requirements.txt
│ ├── Dockerfile
│ └── .env
├── mcp_server_remote.py # Remote MCP server
├── mcp_server.py # Local MCP server (stdio)
├── requirements.txt
├── Dockerfile
└── README.md # This file!
🤝 贡献与反馈
这个项目是为实习选拔过程而建立的。欢迎反馈和建议!
联系人:
- GitHub: https://github.com/mayankgupta8448
📜 许可证
实习选拔过程的教育项目。
🙏 致谢
- Anthropic -对于模型上下文协议(MCP)
- 语言链/语言图 -用于代理工作流框架
- 开放人工智能 -对于GPT-4 API
- 铁路 -免费托管层
- 雅虎财经 -股票市场数据
- 新闻API -财经新闻
📚 额外资源
- MCP文件: https://modelcontextprotocol.io/
- LangGraph文档: https://langchain-ai.github.io/langgraph/
- FastAPI文档: https://fastapi.tiangolo.com/
- 铁路文件: https://docs.railway.app/
✨ 最后说明
该项目展示了:
- ✅ 全栈AI应用开发
- ✅ 生产就绪架构
- ✅ 干净、可维护的代码
- ✅ 全面的文件
- ✅ 现代最佳实践
- ✅ 超出要求的奖励功能
已准备好用于生产,并易于使用更多MCP工具进行扩展! 🚀
内置于❤️ 使用Python、FastAPI、LangGraph和MCP