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.com

View on GitHub (pinned to 74783e8817)

Solutions

  1. export GOOGLE_API_KEY=AIza... or pass api_key via kwargs / web UI Settings -> LLM Providers
  2. Load .env (load_dotenv()) before constructing any LLM in entry scripts
  3. 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

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


AI-assisted analysis of hsliuping/TradingAgents-CN@74783e8817 (2026-08-28). Data as JSON: /api/errors/0bdcefbdfcc8e7ec. Report an issue: GitHub.