4.1 KiB
4.1 KiB
API配置问题修复说明
问题描述
用户遇到股票分析API调用失败,提示:
API调用失败: Error code: 401 - {'error': {'message': 'Authentication Fails, Your api key: ****a7fc is invalid'}}
虽然.env文件中已配置了新的API key,但系统仍在使用旧的key(结尾为a7fc)。
问题原因
-
PowerShell环境变量中存在旧的API key
- 用户之前在系统环境变量中设置过旧的
DEEPSEEK_API_KEY - 旧key:
sk-b6c714570b9844f392aa3812f3f7a7fc
- 用户之前在系统环境变量中设置过旧的
-
python-dotenv默认行为
load_dotenv()默认不会覆盖已存在的环境变量- 导致系统读取的是环境变量中的旧key,而非
.env文件中的新key
-
调用链路
.env文件 (新key) → load_dotenv() → 不覆盖环境变量 → config.py读取环境变量 (旧key) → deepseek_client使用旧key → API调用失败
修复方案
1. 修改 config.py
修改前:
load_dotenv()
修改后:
# 加载环境变量(override=True 强制覆盖已存在的环境变量)
load_dotenv(override=True)
2. 修改 config_manager.py
在reload_config()方法中也添加override=True:
def reload_config(self):
"""重新加载配置(重新加载.env文件)"""
from dotenv import load_dotenv
# 强制覆盖已存在的环境变量
load_dotenv(override=True)
3. 清除Python缓存
Remove-Item -Recurse -Force __pycache__
修复验证
运行测试脚本验证修复:
.\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:
-
启动应用
python run.py -
测试股票分析
- 在Web界面输入股票代码
- 点击"开始分析"
- 确认API调用成功
-
测试智策板块
- 点击"智策板块"
- 开始板块分析
- 确认API调用成功
-
测试主力选股
- 点击"主力选股"
- 运行主力资金筛选
- 确认API调用成功
预防措施
为避免将来再次出现此问题:
-
优先使用.env文件配置
- 不要在系统环境变量中设置API key
- 统一在
.env文件中管理所有配置
-
清除旧的环境变量
- Windows: 系统属性 → 高级 → 环境变量 → 删除
DEEPSEEK_API_KEY - PowerShell临时清除:
Remove-Item Env:DEEPSEEK_API_KEY
- Windows: 系统属性 → 高级 → 环境变量 → 删除
-
重启应用生效
- 修改
.env文件后,需要重启Streamlit应用 - 或使用环境配置界面的"保存并重新加载"功能
- 修改
技术细节
python-dotenv 的 override 参数
load_dotenv(override=True)
override=False(默认): 不覆盖已存在的环境变量,优先使用系统环境变量override=True: 强制覆盖环境变量,优先使用.env文件中的值
配置优先级
修复前:
- 系统环境变量 (最高优先级)
- .env文件
修复后:
- .env文件 (最高优先级)
- 系统环境变量 (作为默认值)
相关文件
config.py- 主配置文件config_manager.py- 配置管理器.env- 环境变量配置文件test_api_config.py- API配置测试脚本
修复日期
2025-10-17
测试人员
AI Assistant
状态
✅ 已修复并验证通过