Files
aiagents-stock/API配置问题修复说明.md
T
2025-10-17 18:46:28 +08:00

178 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
## 状态
✅ 已修复并验证通过