329 lines
7.6 KiB
Markdown
329 lines
7.6 KiB
Markdown
# A股AI分析Agent系统
|
||
|
||
基于AI Agent的股票智能分析系统,提供自然语言对话界面,支持实时行情查询、技术分析、基本面分析等功能。
|
||
|
||
## 功能特性
|
||
|
||
- **自然语言对话**:通过对话方式查询股票信息
|
||
- **实时行情查询**:获取股票实时价格、涨跌幅等数据
|
||
- **技术指标分析**:计算MA、MACD、RSI、KDJ、BOLL等技术指标
|
||
- **基本面信息**:查询公司概况、行业、上市日期等
|
||
- **数据可视化**:生成专业的K线图和技术指标图表
|
||
- **技能插件系统**:可扩展的技能架构,支持动态启用/禁用
|
||
- **对话历史**:保存和查看历史分析记录
|
||
|
||
## 技术栈
|
||
|
||
### 后端
|
||
- **框架**:FastAPI
|
||
- **AI Agent**:LangChain + 智谱AI GLM-4
|
||
- **数据源**:Tushare
|
||
- **缓存**:内存缓存(无需Redis)
|
||
- **数据库**:SQLite
|
||
- **语言**:Python 3.11+ (推荐 3.11 或 3.12)
|
||
|
||
### 前端
|
||
- **框架**:Vue 3 (CDN版本)
|
||
- **UI**:Bootstrap 5
|
||
- **图表**:Lightweight Charts
|
||
- **通信**:Fetch API
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
Stock_Agent/
|
||
├── backend/ # 后端代码
|
||
│ ├── app/
|
||
│ │ ├── agent/ # AI Agent核心
|
||
│ │ ├── api/ # API路由
|
||
│ │ ├── models/ # 数据模型
|
||
│ │ ├── services/ # 数据服务
|
||
│ │ ├── skills/ # 技能插件
|
||
│ │ ├── utils/ # 工具函数
|
||
│ │ ├── config.py # 配置管理
|
||
│ │ └── main.py # 应用入口
|
||
│ └── requirements.txt # Python依赖
|
||
├── frontend/ # 前端代码
|
||
│ ├── css/ # 样式文件
|
||
│ ├── js/ # JavaScript文件
|
||
│ └── index.html # 主页面
|
||
├── .env.example # 环境变量示例
|
||
├── .gitignore
|
||
└── README.md
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### ⚠️ 重要提示:Python 版本
|
||
|
||
**推荐使用 Python 3.11 或 3.12**。如果您使用 Python 3.13,可能会遇到依赖安装问题。
|
||
|
||
详细的安装问题解决方案请查看:[安装指南](docs/INSTALL_GUIDE.md)
|
||
|
||
### 1. 环境准备
|
||
|
||
**系统要求**:
|
||
- Python 3.11 或 3.12(推荐)
|
||
- 无需 Redis(使用内存缓存)
|
||
|
||
**获取API密钥**:
|
||
- [Tushare](https://tushare.pro/):注册并获取Token
|
||
- [智谱AI](https://open.bigmodel.cn/):注册并获取API Key
|
||
|
||
### 2. 安装依赖
|
||
|
||
```bash
|
||
# 进入后端目录
|
||
cd backend
|
||
|
||
# 创建虚拟环境(使用 Python 3.11)
|
||
python3.11 -m venv venv
|
||
|
||
# 激活虚拟环境
|
||
# Windows:
|
||
venv\Scripts\activate
|
||
# macOS/Linux:
|
||
source venv/bin/activate
|
||
|
||
# 安装依赖
|
||
pip install --upgrade pip
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
**如果遇到安装错误**,请查看 [安装指南](docs/INSTALL_GUIDE.md) 获取详细解决方案。
|
||
|
||
### 3. 配置环境变量
|
||
|
||
复制 `.env.example` 为 `.env` 并填写配置:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
编辑 `.env` 文件:
|
||
|
||
```env
|
||
# Tushare API
|
||
TUSHARE_TOKEN=your_tushare_token_here
|
||
|
||
# 智谱AI GLM-4 API
|
||
ZHIPUAI_API_KEY=your_zhipuai_key_here
|
||
|
||
# 其他配置保持默认即可
|
||
REDIS_HOST=localhost
|
||
REDIS_PORT=6379
|
||
REDIS_DB=0
|
||
|
||
# 其他配置保持默认即可
|
||
```
|
||
|
||
### 4. 启动Redis(可选)
|
||
|
||
如果要使用缓存功能,请先启动Redis:
|
||
|
||
```bash
|
||
# macOS (使用Homebrew)
|
||
brew services start redis
|
||
|
||
# Linux
|
||
sudo systemctl start redis
|
||
|
||
# Windows
|
||
# 下载并运行Redis for Windows
|
||
```
|
||
|
||
### 5. 启动后端服务
|
||
|
||
```bash
|
||
# 在backend目录下
|
||
cd backend
|
||
|
||
# 启动服务
|
||
python -m app.main
|
||
|
||
# 或使用uvicorn
|
||
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
||
```
|
||
|
||
服务启动后,访问:
|
||
- 前端界面:http://localhost:8000
|
||
- API文档:http://localhost:8000/docs
|
||
|
||
## 使用指南
|
||
|
||
### 基本查询
|
||
|
||
1. **查询实时行情**
|
||
```
|
||
查询600519的实时行情
|
||
贵州茅台的价格
|
||
000001现在多少钱
|
||
```
|
||
|
||
2. **查看K线图**
|
||
```
|
||
600519的K线图
|
||
贵州茅台的走势
|
||
```
|
||
|
||
3. **技术指标分析**
|
||
```
|
||
600519的技术指标
|
||
分析贵州茅台的MACD
|
||
```
|
||
|
||
4. **基本面信息**
|
||
```
|
||
600519的基本信息
|
||
贵州茅台是什么行业
|
||
```
|
||
|
||
### 技能管理
|
||
|
||
点击右上角"技能管理"按钮,可以:
|
||
- 查看所有可用技能
|
||
- 启用/禁用特定技能
|
||
- 查看技能描述
|
||
|
||
## API文档
|
||
|
||
启动服务后,访问 http://localhost:8000/docs 查看完整的API文档。
|
||
|
||
### 主要接口
|
||
|
||
#### 1. 发送消息
|
||
```http
|
||
POST /api/chat/message
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"message": "查询600519的实时行情",
|
||
"session_id": "optional_session_id"
|
||
}
|
||
```
|
||
|
||
#### 2. 获取对话历史
|
||
```http
|
||
GET /api/chat/history/{session_id}
|
||
```
|
||
|
||
#### 3. 获取股票行情
|
||
```http
|
||
GET /api/stock/quote/{stock_code}
|
||
```
|
||
|
||
#### 4. 获取K线数据
|
||
```http
|
||
GET /api/stock/kline/{stock_code}?start_date=20240101&end_date=20240201
|
||
```
|
||
|
||
#### 5. 获取技能列表
|
||
```http
|
||
GET /api/skills/
|
||
```
|
||
|
||
## 开发指南
|
||
|
||
### 添加新技能
|
||
|
||
1. 在 `backend/app/skills/` 目录下创建新的技能文件
|
||
2. 继承 `BaseSkill` 类并实现 `execute` 方法
|
||
3. 在 `backend/app/agent/core.py` 中注册新技能
|
||
|
||
示例:
|
||
|
||
```python
|
||
from app.skills.base import BaseSkill, SkillParameter
|
||
|
||
class MyNewSkill(BaseSkill):
|
||
def __init__(self):
|
||
super().__init__()
|
||
self.name = "my_skill"
|
||
self.description = "我的新技能"
|
||
self.parameters = [
|
||
SkillParameter(
|
||
name="param1",
|
||
type="string",
|
||
description="参数1",
|
||
required=True
|
||
)
|
||
]
|
||
|
||
async def execute(self, **kwargs) -> Dict[str, Any]:
|
||
# 实现技能逻辑
|
||
return {"result": "success"}
|
||
```
|
||
|
||
### 扩展数据源
|
||
|
||
在 `backend/app/services/` 目录下添加新的数据服务类,参考 `tushare_service.py` 的实现。
|
||
|
||
## 常见问题
|
||
|
||
### 1. Redis连接失败
|
||
|
||
如果Redis未安装或未启动,系统会自动降级,不影响核心功能,但会失去缓存能力。
|
||
|
||
### 2. Tushare API限制
|
||
|
||
免费版Tushare有调用频率限制(120次/分钟)。如果遇到限制,可以:
|
||
- 等待一段时间后重试
|
||
- 考虑升级到付费版
|
||
- 使用Redis缓存减少API调用
|
||
|
||
### 3. 股票代码格式
|
||
|
||
支持的股票代码格式:
|
||
- 6位数字:600000、000001
|
||
- 带后缀:600000.SH、000001.SZ
|
||
- 股票名称:贵州茅台、中国平安
|
||
|
||
### 4. 端口被占用
|
||
|
||
如果8000端口被占用,可以修改 `.env` 文件中的 `API_PORT` 配置。
|
||
|
||
## 性能优化
|
||
|
||
1. **启用Redis缓存**:显著减少API调用和响应时间
|
||
2. **调整缓存TTL**:在 `cache_service.py` 中根据需求调整缓存时间
|
||
3. **限制历史消息数**:在 `context.py` 中调整 `max_history` 参数
|
||
|
||
## 安全建议
|
||
|
||
1. **生产环境**:
|
||
- 修改 `.env` 中的 `SECRET_KEY`
|
||
- 设置 `DEBUG=False`
|
||
- 配置严格的CORS策略
|
||
- 使用HTTPS
|
||
|
||
2. **API密钥**:
|
||
- 不要将 `.env` 文件提交到版本控制
|
||
- 定期更换API密钥
|
||
- 使用环境变量或密钥管理服务
|
||
|
||
## 贡献指南
|
||
|
||
欢迎贡献代码!请遵循以下步骤:
|
||
|
||
1. Fork本项目
|
||
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
||
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
||
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
||
5. 开启Pull Request
|
||
|
||
## 许可证
|
||
|
||
本项目采用 MIT 许可证。
|
||
|
||
## 联系方式
|
||
|
||
如有问题或建议,请提交Issue。
|
||
|
||
## 致谢
|
||
|
||
- [Tushare](https://tushare.pro/) - 金融数据接口
|
||
- [智谱AI](https://open.bigmodel.cn/) - AI模型服务
|
||
- [FastAPI](https://fastapi.tiangolo.com/) - Web框架
|
||
- [LangChain](https://www.langchain.com/) - AI Agent框架
|
||
- [Lightweight Charts](https://tradingview.github.io/lightweight-charts/) - 图表库
|