hsliuping/TradingAgents-CN · critical · ValueError
Google API key not found. Please configure API key in web in
Error message
Google API key not found. Please configure API key in web interface (Settings -> LLM Providers) or set GOOGLE_API_KEY environment variable.
What it means
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.
Source
Thrown at tradingagents/llm_adapters/google_openai_adapter.py:92
# 验证环境变量中的 API Key 是否有效(排除占位符)
if env_api_key and is_valid_api_key(env_api_key):
logger.info(f"✅ [Google初始化] 环境变量中的 API Key 有效,长度: {len(env_api_key)}, 前10位: {env_api_key[:10]}...")
google_api_key = env_api_key
elif env_api_key:
logger.warning("⚠️ [Google初始化] 环境变量中的 API Key 无效(可能是占位符),将被忽略")
google_api_key = None
else:
logger.warning("⚠️ [Google初始化] GOOGLE_API_KEY 环境变量为空")
google_api_key = None
else:
logger.info("✅ [Google初始化] 使用 kwargs 中传入的 API Key(来自数据库配置)")
logger.info(f"🔍 [Google初始化] 最终使用的 API Key: {'有值' if google_api_key else '空'}")
if not google_api_key:
logger.error("❌ [Google初始化] API Key 检查失败,即将抛出异常")
raise ValueError(
"Google API key not found. Please configure API key in web interface "
"(Settings -> LLM Providers) or set GOOGLE_API_KEY environment variable."
)
kwargs["google_api_key"] = google_api_key
# 🔧 处理自定义 base_url
if base_url:
# 移除末尾的斜杠
base_url = base_url.rstrip('/')
logger.info(f"🔍 [Google初始化] 处理 base_url: {base_url}")
# 🔍 检测是否是 Google 官方域名
is_google_official = 'generativelanguage.googleapis.com' in base_url
if is_google_official:
# ✅ Google 官方域名:提取域名部分,SDK 会自动添加 /v1beta
# 例如:https://generativelanguage.googleapis.com/v1beta -> https://generativelanguage.googleapis.comView on GitHub (pinned to 74783e8817)
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
Example fix
# before llm = create_llm_client(provider="google", model="gemini-2.0-flash") # after llm = create_llm_client(provider="google", model="gemini-2.0-flash", api_key=os.environ["GOOGLE_API_KEY"])
Defensive patterns
Strategy: validation
Validate before calling
import os
from dotenv import load_dotenv; load_dotenv()
if not (kwargs.get("api_key") or os.getenv("GOOGLE_API_KEY")):
raise SystemExit("Set GOOGLE_API_KEY or pass api_key") Type guard
def has_google_credential(api_key: str | None) -> bool:
return bool(api_key or os.getenv("GOOGLE_API_KEY")) Try / catch
try:
llm = create_llm_client(provider="google", model=m)
except ValueError as e:
if "Google API key" in str(e):
raise SystemExit("Configure Google key (web UI or env)") from e
raise Prevention
- Centralize credential injection at app boot
- Verify env propagation in containers before first run
- Pass api_key explicitly when available
When it happens
Trigger: 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.
Common situations: 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).
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
- 使用Google AI需要在数据库中配置API Key或设置GOOGLE_API_KEY环境变量
- 使用SiliconFlow需要设置SILICONFLOW_API_KEY环境变量
- 使用OpenRouter需要设置OPENROUTER_API_KEY或OPENAI_API_KEY环境变量
- 使用AiHubMix需要设置AIHUBMIX_API_KEY环境变量
AI-assisted analysis of hsliuping/TradingAgents-CN@74783e8817 (2026-08-28).
Data as JSON: /api/errors/0bdcefbdfcc8e7ec.
Report an issue: GitHub.