基于LangChain和FastAPI的体育新闻智能分析平台,集成AI自主决策Agent和RAG检索系统,使用MySQL 8.0作为数据库。
- 首页(仪表板) - 显示统计数据,个性化欢迎信息
- 体育日报生成界面 - 从虎扑网站采集并生成5条今日体育新闻,支持删除操作
- 分析报告界面 - AI分析今日体育新闻并生成Markdown格式报告,支持下载MD文件
- 智能助手(AI自主Agent) - 基于ReAct模式的AI自主决策Agent,支持:
- 🔍 获取最新体育新闻
- 📝 生成体育日报
- 🔎 RAG检索历史日报
- 💬 自然语言对话(对话历史持久化)
- 设置模块 - 修改密码、退出登录
- FastAPI - 现代Python Web框架
- LangChain - AI Agent框架
- SQLAlchemy - ORM数据库操作
- MySQL 8.0 - 关系型数据库
- DashScope (通义千问) - 大语言模型API
- 模型:
qwen3-max(可配置) - Embedding:
text-embedding-v4
- 模型:
- Chroma - 本地向量数据库(RAG)
- JWT - 用户认证
- Bcrypt - 密码加密
- React 18 - UI框架
- Ant Design 5 - UI组件库
- Vite - 构建工具
- Axios - HTTP客户端
- React Router - 路由管理
- React Markdown - Markdown渲染
- ReAct模式 - 自主决策Agent
- RAG检索 - 向量化历史日报,支持语义搜索
- 工具调用 - 3个核心工具:
get_latest_sports_news_tool- 获取最新新闻generate_sports_daily_tool- 生成日报rag_retrieve_history_daily_tool- 检索历史
- Python 3.8+
- Node.js 16+
- MySQL 8.0
- 网络连接(用于访问DashScope API)
💡 提示:详细安装步骤请参考 QUICKSTART.md
# 创建conda环境
conda create -n sports_analysis python=3.10 -y
# 激活环境
conda activate sports_analysis
# 使用conda安装numpy(避免编码问题)
conda install numpy -y
# 安装其他依赖
cd backend
pip install -r requirements.txt# 登录MySQL
mysql -u root -p
# 执行以下SQL创建数据库
CREATE DATABASE sports_analysis CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EXIT;cd backend
conda activate sports_analysis # 或你的conda环境
python init_tables.py这个脚本会:
- 检查数据库连接
- 创建/更新所有表
- 验证表结构
-
复制模板文件:在
backend目录,将.env.example复制为.env:# Windows PowerShell cd backend Copy-Item .env.example .env # Linux/Mac cd backend cp .env.example .env
-
编辑
.env文件,填入你的真实配置值:# 数据库配置 MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_USER=root MYSQL_PASSWORD=你的MySQL密码 MYSQL_DATABASE=sports_analysis # LLM配置(DashScope 通义千问) # 获取API Key: https://dashscope.console.aliyun.com/ LLM_API_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 LLM_API_KEY=你的DashScope_API_Key LLM_MODEL=qwen3-max # 应用安全配置 # 生成随机密钥: python -c "import secrets; print(secrets.token_urlsafe(32))" SECRET_KEY=你的随机密钥 ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=30
重要提示:
- 🔑 LLM_API_KEY: 从 DashScope控制台 获取
- 🔐 SECRET_KEY: 用于JWT加密,必须设置(可使用上面的命令生成)
-
验证配置:确保
.env文件已正确创建,且所有必需的值都已填写。
conda activate sports_analysis
cd backend
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000后端将在 http://localhost:8000 启动
conda activate sports_analysis
cd frontend
npm install
npm run dev前端将在 http://localhost:5173 启动(Vite默认端口)
打开浏览器访问 http://localhost:5173(或终端显示的地址)
- 点击左侧菜单"体育日报"
- 点击"生成今日日报"按钮
- 系统将生成5条今日体育新闻
- 点击左侧菜单"分析报告"
- 点击"分析今日新闻"按钮
- 系统将对今日新闻进行分析并生成报告(带进度条显示)
- 点击左侧菜单"智能助手"
- 在输入框中输入问题,例如:
- "获取最新NBA新闻"
- "生成今日体育日报"
- "检索詹姆斯近期的状况"
- 点击"发送"或按Enter键
- Agent会自动选择最合适的工具执行任务
- 对话历史会自动保存,下次打开时会自动加载
- 点击左侧菜单"设置"
- 可以修改密码
- 可以退出登录
cd backend
python init_tables.py在MySQL中执行:
USE sports_analysis;
DESCRIBE users;
DESCRIBE news_articles;
DESCRIBE analysis_reports;
DESCRIBE chat_records;- ReAct模式:思考-行动-观察循环
- 工具自动选择:根据用户意图自动选择工具
- 3个核心工具:
get_latest_sports_news_tool- 获取最新体育新闻generate_sports_daily_tool- 生成体育日报(自动保存到数据库和向量库)rag_retrieve_history_daily_tool- RAG检索历史日报
- 对话历史持久化:所有对话自动保存到数据库
- 从虎扑网站采集新闻
- 智能类别识别(NBA、足球、CBA、电竞等)
- 异常处理和重试机制
- 多维度分析今日新闻
- 生成Markdown格式报告
- 情感分析和统计数据提取
- 向量化存储:使用Qwen Embedding (
text-embedding-v4) 向量化日报 - 向量数据库:Chroma本地向量库
- 语义搜索:支持自然语言查询历史日报
- 用户隔离:每个用户独立的向量库集合
运行后端后,访问 http://localhost:8000/docs 查看Swagger API文档。
- 检查MySQL服务是否启动
- 检查数据库用户名和密码是否正确
- 检查数据库是否已创建
- 运行
python init_tables.py初始化表结构
- 检查网络连接
- 检查DashScope API Key是否正确
- 查看后端日志了解详细错误信息
- 检查后端是否正常运行
- 检查端口8000是否被占用
- 检查vite.config.js中的代理配置
可能是数据库表结构不完整导致的:
- 运行
python init_tables.py初始化表 - 检查users表是否有
hashed_password和is_active字段 - 查看后端日志了解详细错误信息
如果表结构完全错误,可以删除重建:
USE sports_analysis;
DROP TABLE IF EXISTS users;
DROP TABLE IF EXISTS news_articles;
DROP TABLE IF EXISTS analysis_reports;
DROP TABLE IF EXISTS chat_records;然后重新运行 python init_tables.py
编辑 backend/app/routers/news.py 中的新闻源配置
编辑对应的Agent文件:
backend/app/agents/autonomous_agent.py- 核心:AI自主决策Agent(ReAct模式)backend/app/agents/news_collector.py- 新闻采集Agentbackend/app/agents/news_analyzer.py- 新闻分析Agentbackend/app/agents/tools.py- Agent工具定义(3个核心工具)
- 在后端
backend/app/routers/添加新路由 - 在前端
frontend/src/pages/添加新页面 - 在
frontend/src/components/Sidebar.jsx添加菜单项
体育日报智能分析平台/
├── backend/ # 后端代码
│ ├── app/
│ │ ├── agents/ # AI Agent实现
│ │ │ ├── autonomous_agent.py # 核心:AI自主决策Agent
│ │ │ ├── news_collector.py # 新闻采集Agent
│ │ │ ├── news_analyzer.py # 新闻分析Agent
│ │ │ └── tools.py # Agent工具定义
│ │ ├── rag/ # RAG检索系统
│ │ │ └── vector_store.py # 向量数据库管理
│ │ ├── routers/ # API路由
│ │ ├── models/ # 数据库模型
│ │ ├── schemas/ # Pydantic模式
│ │ └── main.py # FastAPI应用入口
│ ├── chroma_db/ # Chroma向量数据库(自动生成)
│ ├── .env.example # 环境变量模板
│ └── requirements.txt # Python依赖
├── frontend/ # 前端代码
│ ├── src/
│ │ ├── pages/ # 页面组件
│ │ ├── components/ # 通用组件
│ │ └── utils/ # 工具函数
│ └── package.json # Node.js依赖
├── README.md # 项目说明(本文件)
└── QUICKSTART.md # 快速开始指南
重要:所有敏感信息都通过环境变量配置,不会硬编码在代码中。
.env文件:包含所有敏感配置,不要提交到Git.env.example:模板文件,不包含真实密钥,可以提交到Git.gitignore:确保.env文件已被忽略
- 访问 DashScope控制台
- 注册/登录账号
- 创建API Key
- 将API Key填入
backend/.env文件的LLM_API_KEY
python -c "import secrets; print(secrets.token_urlsafe(32))"将生成的密钥填入 backend/.env 文件的 SECRET_KEY。
- ✅ 确保MySQL服务已启动
- ✅ 确保网络可以访问DashScope API
- ✅ 生产环境请修改CORS配置和安全密钥
- ✅ 项目路径包含中文时建议使用Conda环境
- ✅ 不要将
.env文件提交到Git仓库 - ✅ 定期备份数据库和向量库数据
- ✅ API Key有使用额度限制,注意监控使用情况
- ✅ 用户认证系统:注册、登录、密码修改
- ✅ 数据隔离:每个用户只能看到自己的数据
- ✅ 对话历史持久化:智能助手对话自动保存
- ✅ RAG检索:向量化历史日报,支持语义搜索
- ✅ AI自主决策:Agent根据用户意图自动选择工具
- ✅ Markdown报告:分析报告支持Markdown格式和下载
- ✅ 实时进度显示:分析报告生成时显示进度条
- ✅ 响应式设计:适配不同屏幕尺寸
- QUICKSTART.md - 5分钟快速开始指南
- API文档 - Swagger API文档(运行后端后访问)
欢迎提交Issue和Pull Request!
本项目仅供学习和研究使用。