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

4.1 KiB
Raw Blame History

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

修改前:

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

  1. 启动应用

    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 参数

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

状态

已修复并验证通过