{"record":{"id":"0bdcefbdfcc8e7ec","repo":"hsliuping/TradingAgents-CN","slug":"google-api-key-not-found-please-configure-api-key","errorCode":null,"errorMessage":"Google API key not found. Please configure API key in web interface (Settings -> LLM Providers) or set GOOGLE_API_KEY environment variable.","messagePattern":"Google API key not found\\. Please configure API key in web interface \\(Settings -> LLM Providers\\) or set GOOGLE_API_KEY environment variable\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"critical","filePath":"tradingagents/llm_adapters/google_openai_adapter.py","lineNumber":92,"sourceCode":"\n            # 验证环境变量中的 API Key 是否有效（排除占位符）\n            if env_api_key and is_valid_api_key(env_api_key):\n                logger.info(f\"✅ [Google初始化] 环境变量中的 API Key 有效，长度: {len(env_api_key)}, 前10位: {env_api_key[:10]}...\")\n                google_api_key = env_api_key\n            elif env_api_key:\n                logger.warning(\"⚠️ [Google初始化] 环境变量中的 API Key 无效（可能是占位符），将被忽略\")\n                google_api_key = None\n            else:\n                logger.warning(\"⚠️ [Google初始化] GOOGLE_API_KEY 环境变量为空\")\n                google_api_key = None\n        else:\n            logger.info(\"✅ [Google初始化] 使用 kwargs 中传入的 API Key（来自数据库配置）\")\n\n        logger.info(f\"🔍 [Google初始化] 最终使用的 API Key: {'有值' if google_api_key else '空'}\")\n\n        if not google_api_key:\n            logger.error(\"❌ [Google初始化] API Key 检查失败，即将抛出异常\")\n            raise ValueError(\n                \"Google API key not found. Please configure API key in web interface \"\n                \"(Settings -> LLM Providers) or set GOOGLE_API_KEY environment variable.\"\n            )\n\n        kwargs[\"google_api_key\"] = google_api_key\n\n        # 🔧 处理自定义 base_url\n        if base_url:\n            # 移除末尾的斜杠\n            base_url = base_url.rstrip('/')\n            logger.info(f\"🔍 [Google初始化] 处理 base_url: {base_url}\")\n\n            # 🔍 检测是否是 Google 官方域名\n            is_google_official = 'generativelanguage.googleapis.com' in base_url\n\n            if is_google_official:\n                # ✅ Google 官方域名：提取域名部分，SDK 会自动添加 /v1beta\n                # 例如：https://generativelanguage.googleapis.com/v1beta -> https://generativelanguage.googleapis.com","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/hsliuping/TradingAgents-CN/blob/74783e8817d6cf6de29867880631cc555153f36b/tradingagents/llm_adapters/google_openai_adapter.py#L74-L110","documentation":"GoogleOpenAIAdapter.__init__ raises this when no Google API key resolves from kwargs (DB-configured path) or the GOOGLE_API_KEY environment variable. It guards before delegating to the Google/OpenAI-compatibility client. Purely a local configuration error — no network request has been made yet.","triggerScenarios":"Creating the Google adapter (provider='google' via create_llm_client or directly) with no api_key kwarg and GOOGLE_API_KEY unset in the process.","commonSituations":"Web UI key saved under a different provider; scripts run without dotenv; GOOGLE_API_KEY present in dev shell but absent in docker/systemd service context; env var name typo (GOOGLE_KEY).","solutions":["export GOOGLE_API_KEY=AIza... or pass api_key via kwargs / web UI Settings -> LLM Providers","Load .env (load_dotenv()) before constructing any LLM in entry scripts","For containers, add GOOGLE_API_KEY to the environment section of compose/k8s specs"],"exampleFix":"# before\nllm = create_llm_client(provider=\"google\", model=\"gemini-2.0-flash\")\n\n# after\nllm = create_llm_client(provider=\"google\", model=\"gemini-2.0-flash\", api_key=os.environ[\"GOOGLE_API_KEY\"])","handlingStrategy":"validation","validationCode":"import os\nfrom dotenv import load_dotenv; load_dotenv()\nif not (kwargs.get(\"api_key\") or os.getenv(\"GOOGLE_API_KEY\")):\n    raise SystemExit(\"Set GOOGLE_API_KEY or pass api_key\")","typeGuard":"def has_google_credential(api_key: str | None) -> bool:\n    return bool(api_key or os.getenv(\"GOOGLE_API_KEY\"))","tryCatchPattern":"try:\n    llm = create_llm_client(provider=\"google\", model=m)\nexcept ValueError as e:\n    if \"Google API key\" in str(e):\n        raise SystemExit(\"Configure Google key (web UI or env)\") from e\n    raise","preventionTips":["Centralize credential injection at app boot","Verify env propagation in containers before first run","Pass api_key explicitly when available"],"tags":["api-key","missing-env-var","google","gemini","llm"],"backgroundTag":"missing-api-key","analyzedSha":"74783e8817d6cf6de29867880631cc555153f36b","analyzedAt":"2026-08-28T11:39:07.729Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}