You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Cloud Functions:如何在函数外部使用环境变量?

Firebase云函数外部无法获取环境变量的解决方法

问题原因

Firebase Cloud Functions的环境变量加载机制是仅在函数执行时才会注入环境变量。代码中函数外部的初始化逻辑(比如你定义llm的部分)会在云函数的冷启动初始化阶段运行,此时环境变量还未被加载,因此process.env.OPENAI_API_KEY会返回undefined;而函数内部的代码是在函数被调用时执行,此时环境变量已经注入,所以能正常获取值。

解决方案

方案1:将依赖环境变量的初始化逻辑移到函数内部

把需要使用环境变量的对象创建逻辑放到函数内部,确保在环境变量加载完成后再执行:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const { ChatOpenAI } = require("@langchain/openai");

exports.testCall = functions.https.onCall((data, context) => {
  const llm = new ChatOpenAI({
    openAIApiKey: process.env.OPENAI_API_KEY, // 此处可正常获取变量
  });
  // 后续使用llm的业务逻辑
});

方案2:延迟初始化(适合多函数复用场景)

如果需要在多个函数中复用llm实例,可以通过函数封装实现延迟初始化,确保第一次调用函数时才创建实例:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const { ChatOpenAI } = require("@langchain/openai");

let llmInstance;

function getLLM() {
  if (!llmInstance) {
    llmInstance = new ChatOpenAI({
      openAIApiKey: process.env.OPENAI_API_KEY,
    });
  }
  return llmInstance;
}

exports.testCall = functions.https.onCall((data, context) => {
  const llm = getLLM();
  // 使用llm处理业务逻辑
});

exports.anotherFunction = functions.https.onCall((data, context) => {
  const llm = getLLM();
  // 复用llm实例
});

方案3:使用Firebase官方配置管理(推荐生产环境)

替代本地.env文件,使用Firebase Functions的配置系统管理环境变量,这种方式更符合Firebase的生产部署规范:

  1. 本地设置配置:
    firebase functions:config:set openai.api_key="MY_API_KEY"
    
  2. 生成本地配置文件(供模拟器使用):
    firebase functions:config:get > .runtimeconfig.json
    
  3. 代码中获取配置:
    const functions = require("firebase-functions");
    const admin = require("firebase-admin");
    const { ChatOpenAI } = require("@langchain/openai");
    
    exports.testCall = functions.https.onCall((data, context) => {
      const llm = new ChatOpenAI({
        openAIApiKey: functions.config().openai.api_key,
      });
      // 业务逻辑
    });
    

可选:手动加载dotenv(仅本地开发用)

如果本地开发时一定要在函数外部使用环境变量,可以手动引入dotenv加载.env文件,但生产环境不推荐(部署时Firebase不会读取.env):

require('dotenv').config(); // 放在代码最顶部
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const { ChatOpenAI } = require("@langchain/openai");

console.log(process.env.OPENAI_API_KEY); // 本地开发时可正常获取
const llm = new ChatOpenAI({
  openAIApiKey: process.env.OPENAI_API_KEY,
});

内容的提问来源于stack exchange,提问作者Taylor Foster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:41:23