{"record":{"id":"101911f28b67758b","repo":"hsliuping/TradingAgents-CN","slug":"deepseek-deepseek-api-key","errorCode":null,"errorMessage":"使用DeepSeek需要设置DEEPSEEK_API_KEY环境变量","messagePattern":"使用DeepSeek需要设置DEEPSEEK_API_KEY环境变量","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"critical","filePath":"tradingagents/graph/trading_graph.py","lineNumber":408,"sourceCode":"            logger.info(\"🔧 使用统一 llm_clients 路径初始化阿里百炼/通义千问\")\n            self.deep_thinking_llm, self.quick_thinking_llm = _create_provider_pair(\n                provider=\"qwen\",\n                config=self.config,\n                quick_temperature=quick_temperature,\n                quick_max_tokens=quick_max_tokens,\n                quick_timeout=quick_timeout,\n                deep_temperature=deep_temperature,\n                deep_max_tokens=deep_max_tokens,\n                deep_timeout=deep_timeout,\n                backend_url=self.config.get(\"backend_url\"),\n                quick_extra_kwargs=_quick_extra if _quick_extra else None,\n                deep_extra_kwargs=_deep_extra if _deep_extra else None,\n            )\n            logger.info(\"✅ [阿里百炼] 已通过 llm_clients 初始化成功并应用用户配置的模型参数\")\n        elif normalized_provider == \"deepseek\":\n            deepseek_api_key = self.config.get(\"quick_api_key\") or self.config.get(\"deep_api_key\") or os.getenv('DEEPSEEK_API_KEY')\n            if not deepseek_api_key:\n                raise ValueError(\"使用DeepSeek需要设置DEEPSEEK_API_KEY环境变量\")\n\n            deepseek_base_url = self.config.get(\"backend_url\") or os.getenv('DEEPSEEK_BASE_URL', 'https://api.deepseek.com')\n            self.deep_thinking_llm, self.quick_thinking_llm = _create_provider_pair(\n                provider=\"deepseek\",\n                config=self.config,\n                quick_temperature=quick_temperature,\n                quick_max_tokens=quick_max_tokens,\n                quick_timeout=quick_timeout,\n                deep_temperature=deep_temperature,\n                deep_max_tokens=deep_max_tokens,\n                deep_timeout=deep_timeout,\n                backend_url=deepseek_base_url,\n                api_key=deepseek_api_key,\n                quick_extra_kwargs=_quick_extra if _quick_extra else None,\n                deep_extra_kwargs=_deep_extra if _deep_extra else None,\n            )\n            logger.info(\"✅ [DeepSeek] 已通过 llm_clients 初始化成功并应用用户配置的模型参数\")\n        elif normalized_provider == \"custom_openai\":","sourceCodeStart":390,"sourceCodeEnd":426,"githubUrl":"https://github.com/hsliuping/TradingAgents-CN/blob/74783e8817d6cf6de29867880631cc555153f36b/tradingagents/graph/trading_graph.py#L390-L426","documentation":"TradingAgentsGraph.__init__ raises this for provider 'deepseek' when no key is found in config (quick_api_key/deep_api_key) or the DEEPSEEK_API_KEY environment variable. It is raised before _create_provider_pair builds the deep/quick LLM pair. Base URL defaults to https://api.deepseek.com unless overridden.","triggerScenarios":"llm_provider=\"deepseek\" with empty config keys and unset DEEPSEEK_API_KEY when constructing TradingAgentsGraph.","commonSituations":"Fresh clone without .env; key saved in web UI DB but script constructs the graph directly bypassing DB; env var not forwarded to docker/worker process.","solutions":["export DEEPSEEK_API_KEY=sk-... or set quick_api_key/deep_api_key in the config dict","Ensure .env is loaded (load_dotenv()) before graph construction in scripts","For the web app, save the DeepSeek key under Settings -> LLM Providers so config-based lookup succeeds"],"exampleFix":"# before\ngraph = TradingAgentsGraph(config={\"llm_provider\": \"deepseek\"})\n\n# after\ncfg = {\"llm_provider\": \"deepseek\", \"quick_api_key\": \"sk-...\"}\ngraph = TradingAgentsGraph(config=cfg)","handlingStrategy":"validation","validationCode":"if provider == \"deepseek\" and not (cfg.get(\"quick_api_key\") or cfg.get(\"deep_api_key\") or os.getenv(\"DEEPSEEK_API_KEY\")):\n    raise SystemExit(\"Set DEEPSEEK_API_KEY or quick_api_key/deep_api_key\")","typeGuard":"def has_deepseek_credential(cfg: dict) -> bool:\n    return bool(cfg.get(\"quick_api_key\") or cfg.get(\"deep_api_key\") or os.getenv(\"DEEPSEEK_API_KEY\"))","tryCatchPattern":"try:\n    graph = TradingAgentsGraph(config=cfg)\nexcept ValueError as e:\n    if \"DeepSeek\" in str(e):\n        raise SystemExit(\"Provision DeepSeek key\") from e\n    raise","preventionTips":["Centralize provider credentials in config, not scattered env reads","Preflight-validate the selected provider's credential at startup","Keep .env in sync across dev/prod"],"tags":["api-key","missing-env-var","deepseek","llm","configuration"],"backgroundTag":"missing-api-key","analyzedSha":"74783e8817d6cf6de29867880631cc555153f36b","analyzedAt":"2026-08-28T11:39:07.729Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}