增加智瞰龙虎板块

This commit is contained in:
oficcejo
2025-10-17 18:46:28 +08:00
parent bf6da88db0
commit 1590c7037d
12 changed files with 3475 additions and 2 deletions
+177
View File
@@ -0,0 +1,177 @@
# API配置问题修复说明
## 问题描述
用户遇到股票分析API调用失败,提示:
```
API调用失败: Error code: 401 - {'error': {'message': 'Authentication Fails, Your api key: ****a7fc is invalid'}}
```
虽然`.env`文件中已配置了新的API key,但系统仍在使用旧的key(结尾为`a7fc`)。
## 问题原因
1. **PowerShell环境变量中存在旧的API key**
- 用户之前在系统环境变量中设置过旧的`DEEPSEEK_API_KEY`
- 旧key: `sk-b6c714570b9844f392aa3812f3f7a7fc`
2. **python-dotenv默认行为**
- `load_dotenv()`默认**不会覆盖**已存在的环境变量
- 导致系统读取的是环境变量中的旧key,而非`.env`文件中的新key
3. **调用链路**
```
.env文件 (新key) → load_dotenv() → 不覆盖环境变量 → config.py读取环境变量 (旧key) → deepseek_client使用旧key → API调用失败
```
## 修复方案
### 1. 修改 `config.py`
**修改前:**
```python
load_dotenv()
```
**修改后:**
```python
# 加载环境变量(override=True 强制覆盖已存在的环境变量)
load_dotenv(override=True)
```
### 2. 修改 `config_manager.py`
在`reload_config()`方法中也添加`override=True`
```python
def reload_config(self):
"""重新加载配置(重新加载.env文件)"""
from dotenv import load_dotenv
# 强制覆盖已存在的环境变量
load_dotenv(override=True)
```
### 3. 清除Python缓存
```bash
Remove-Item -Recurse -Force __pycache__
```
## 修复验证
运行测试脚本验证修复:
```bash
.\venv\Scripts\python.exe test_api_config.py
```
测试结果:
```
✅ .env文件存在
.env中的API Key: sk-e32f5***********************2abe
⚠️ 环境变量中的API Key(加载前): sk-b6c71***********************a7fc
✅ config.py读取到的API Key: sk-e32f5***********************2abe
✅ 环境变量已被覆盖: sk-e32f5***********************2abe
✅ config.py读取的key与.env文件一致!
✅ API调用成功!
```
## 影响范围
此修复影响所有使用API的模块:
### 1. 股票分析模块
- ✅ `ai_agents.py` - 个股分析
- ✅ `deepseek_client.py` - API客户端
### 2. 智策板块模块
- ✅ `sector_strategy_agents.py` - 板块分析
- ✅ `sector_strategy_engine.py` - 策略引擎
### 3. 主力选股模块
- ✅ `main_force_analysis.py` - 主力资金分析
### 4. UI和服务模块
- ✅ `app.py` - 主应用
- ✅ `monitor_service.py` - 监测服务
## 验证步骤
修复后,所有模块都会从`.env`文件读取正确的API key
1. **启动应用**
```bash
python run.py
```
2. **测试股票分析**
- 在Web界面输入股票代码
- 点击"开始分析"
- 确认API调用成功
3. **测试智策板块**
- 点击"智策板块"
- 开始板块分析
- 确认API调用成功
4. **测试主力选股**
- 点击"主力选股"
- 运行主力资金筛选
- 确认API调用成功
## 预防措施
为避免将来再次出现此问题:
1. **优先使用.env文件配置**
- 不要在系统环境变量中设置API key
- 统一在`.env`文件中管理所有配置
2. **清除旧的环境变量**
- Windows: 系统属性 → 高级 → 环境变量 → 删除`DEEPSEEK_API_KEY`
- PowerShell临时清除: `Remove-Item Env:DEEPSEEK_API_KEY`
3. **重启应用生效**
- 修改`.env`文件后,需要重启Streamlit应用
- 或使用环境配置界面的"保存并重新加载"功能
## 技术细节
### python-dotenv 的 override 参数
```python
load_dotenv(override=True)
```
- `override=False` (默认): 不覆盖已存在的环境变量,优先使用系统环境变量
- `override=True`: 强制覆盖环境变量,优先使用`.env`文件中的值
### 配置优先级
**修复前:**
1. 系统环境变量 (最高优先级)
2. .env文件
**修复后:**
1. .env文件 (最高优先级)
2. 系统环境变量 (作为默认值)
## 相关文件
- `config.py` - 主配置文件
- `config_manager.py` - 配置管理器
- `.env` - 环境变量配置文件
- `test_api_config.py` - API配置测试脚本
## 修复日期
2025-10-17
## 测试人员
AI Assistant
## 状态
✅ 已修复并验证通过