hsliuping/TradingAgents-CN · critical · ValueError
DashScope API key not found. Please configure API key in web
Error message
DashScope API key not found. Please configure API key in web interface (Settings -> LLM Providers) or set DASHSCOPE_API_KEY environment variable.
What it means
DashScopeOpenAIAdapter.__init__ (tradingagents/llm_adapters/dashscope_openai_adapter.py) raises this when no API key resolves from kwargs, config, or the DASHSCOPE_API_KEY environment variable. It is a fail-fast guard before super().__init__ builds the OpenAI-compatible client for Alibaba DashScope (Qwen).
Source
Thrown at tradingagents/llm_adapters/dashscope_openai_adapter.py:87
else:
logger.info(f"✅ [DashScope初始化] 使用 kwargs 中传入的 API Key(来自数据库配置)")
# 设置 DashScope OpenAI 兼容接口的默认配置
kwargs.setdefault("base_url", "https://dashscope.aliyuncs.com/compatible-mode/v1")
kwargs["api_key"] = api_key_from_kwargs # 🔥 使用验证后的 API Key
kwargs.setdefault("model", "qwen-turbo")
kwargs.setdefault("temperature", 0.1)
kwargs.setdefault("max_tokens", 2000)
# 检查 API 密钥和 base_url
final_api_key = kwargs.get("api_key")
final_base_url = kwargs.get("base_url")
logger.info(f"🔍 [DashScope初始化] 最终使用的 API Key: {'有值' if final_api_key else '空'}")
logger.info(f"🔍 [DashScope初始化] 最终使用的 base_url: {final_base_url}")
if not final_api_key:
logger.error(f"❌ [DashScope初始化] API Key 检查失败,即将抛出异常")
raise ValueError(
"DashScope API key not found. Please configure API key in web interface "
"(Settings -> LLM Providers) or set DASHSCOPE_API_KEY environment variable."
)
# 调用父类初始化
super().__init__(**kwargs)
logger.info(f"✅ 阿里百炼 OpenAI 兼容适配器初始化成功")
logger.info(f" 模型: {kwargs.get('model', 'qwen-turbo')}")
# 兼容不同版本的属性名
api_base = getattr(self, 'base_url', None) or getattr(self, 'openai_api_base', None) or kwargs.get('base_url', 'unknown')
logger.info(f" API Base: {api_base}")
def _generate(self, *args, **kwargs):
"""重写生成方法,添加 token 使用量追踪"""
# 调用父类的生成方法View on GitHub (pinned to 74783e8817)
Solutions
- export DASHSCOPE_API_KEY=sk-... or pass api_key=... to the adapter/factory
- Configure the key in the web interface (Settings -> LLM Providers) if using the app's DB-backed path
- Ensure load_dotenv() runs before adapter creation and the value is non-empty
Example fix
# before llm = create_llm_client(provider="dashscope", model="qwen-max") # after llm = create_llm_client(provider="dashscope", model="qwen-max", api_key=os.environ["DASHSCOPE_API_KEY"])
Defensive patterns
Strategy: validation
Validate before calling
import os
from dotenv import load_dotenv; load_dotenv()
if not (api_key or os.getenv("DASHSCOPE_API_KEY")):
raise SystemExit("Configure DashScope key (web UI or DASHSCOPE_API_KEY)") Type guard
def has_dashscope_key(api_key: str | None) -> bool:
return bool(api_key or os.getenv("DASHSCOPE_API_KEY")) Try / catch
try:
llm = create_llm_client(provider="dashscope", model=m)
except ValueError as e:
if "DashScope" in str(e):
raise SystemExit("Set DASHSCOPE_API_KEY") from e
raise Prevention
- Load dotenv before creating adapters
- Save keys via web UI so the DB path supplies api_key
- Beware empty-string env values — they still fail the check
When it happens
Trigger: Instantiating the DashScope adapter (directly or via create_llm_client with provider='dashscope') with no api_key kwarg while DASHSCOPE_API_KEY is unset.
Common situations: Fresh setup without .env; key configured in web UI but the script constructs the adapter directly; env var named DASHSCOPE_API_TOKEN instead of DASHSCOPE_API_KEY; blank-string key treated as missing.
Understand the failure class
Background: "API key is required" / "API key not found" / "No API key was set": the missing-api-key error family across 16 libraries — this error's family across 16 libraries.
Related errors
- 使用Google需要设置GOOGLE_API_KEY环境变量或在数据库中配置API Key
- 使用SiliconFlow需要设置SILICONFLOW_API_KEY环境变量
- 使用OpenRouter需要设置OPENROUTER_API_KEY或OPENAI_API_KEY环境变量
- 使用AiHubMix需要设置AIHUBMIX_API_KEY环境变量
- 使用火山方舟需要设置VOLCENGINE_API_KEY或ARK_API_KEY环境变量
AI-assisted analysis of hsliuping/TradingAgents-CN@74783e8817 (2026-08-28).
Data as JSON: /api/errors/51f1684c14accc7b.
Report an issue: GitHub.