Using OpenAI API from Firebase Cloud Functions in flutter app

题意:"在 Flutter 应用中通过 Firebase Cloud Functions 使用 OpenAI API。"

问题背景:

I can't figure out how to make this work.

"我不知道该如何让这正常运行。"

This is my cloud function in Javascript. I'm trying a simple code to see if the connection works (other cloud functions not using the openai package do work fine).

"这是我用 JavaScript 编写的云函数。我正在尝试一个简单的代码来测试连接是否正常(其他不使用 openai 包的云函数运行良好)。"

The function does work on GCP when I test it, but won't connect to my flutter function for some reason:

"该函数在 GCP 上测试时可以运行,但由于某种原因无法连接到我的 Flutter 函数。"

error:

flutter: Error calling Firebase Function: internal Response is missing data field.

Cloud function

javascript 复制代码
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const axios = require('axios');
const cors = require('cors')({ origin: true });
admin.initializeApp();

exports.openAiResponse2 = functions.https.onRequest(async (request, response) => {
  const apiKey = 'sk-';
  cors(request, response, async () => {
    try {
      const apiResponse = await axios.post(
        'https://api.openai.com/v1/chat/completions',
        {
          model: 'gpt-3.5-turbo',
          messages: [{ role: 'user', content: 'Say this is a test!' }],
          temperature: 0.7,
        },
        {
          headers: {
            'Authorization': `Bearer ${apiKey}`,
            'Content-Type': 'application/json',
          },
        },
      );

     // response.status(200).json({ message: 'OpenAI API connection successful.', engines: apiResponse.data });
        response.status(200).json({
              message: 'OpenAI API connection successful.',
              completion: apiResponse.data.choices[0].message.content,
            });
    } catch (error) {
      console.error('Error connecting to OpenAI API:', error);
      response.status(500).send('Error connecting to OpenAI API');
    }
  });
});

Flutter:

javascript 复制代码
Future<void> talkToMe2() async {
  try {
    HttpsCallable callable = FirebaseFunctions.instance.httpsCallable('openAiResponse2');
    print(callable);
    final response = await callable.call();
    print('response is $response');
    print('External API response: ${response.data}');
  } on FirebaseFunctionsException catch (e) {
    print('Error calling Firebase Function: ${e.code} ${e.message}');
  } catch (e) {
    print('Error calling Firebase Function: $e');
  }
}

This is my package.json

javascript 复制代码
{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "serve": "firebase emulators:start --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "16"
  },
  "main": "index.js",
  "dependencies": {
    "firebase-admin": "^11.5.0",
    "firebase-functions": "^4.2.0",
    "openai": "^3.2.1"
  },
  "devDependencies": {
    "firebase-functions-test": "^3.0.0"
  },
  "private": true
}

And my flutter doctor

javascript 复制代码
[✓] Flutter (Channel stable, 3.7.12, on macOS 13.2 22D49 darwin-arm64, locale en-ES)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc1)
[✓] Xcode - develop for iOS and macOS (Xcode 14.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.1)
[✓] VS Code (version 1.77.3)
[✓] Connected device (4 available)
[✓] HTTP Host Availability

I can't seem to find a solution. Thanks!

"我似乎找不到解决方案。谢谢!"

问题解决:

I am not a flutter developer but httpsCallable is for onCall not onRequest.

"我不是 Flutter 开发者,但 `httpsCallable` 是用于 `onCall` 而不是 `onRequest`。"

https://firebase.google.com/docs/functions/callable?gen=2nd

https://firebase.google.com/docs/functions/http-events?gen=2nd

If you look at the flutter sample, you should have something like below for https callable

"如果你查看 Flutter 示例,针对 https callable,你应该有类似下面的代码。"

javascript 复制代码
const functions = require('firebase-functions');

exports.listFruit = functions.https.onCall((data, context) => { //<<<-- not onRequest
  return ["Apple", "Banana", "Cherry", "Date", "Fig", "Grapes"]
});
相关推荐
-曾牛2 小时前
【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini,Spring Boot整合实战!| 附源码
java·开发语言·人工智能·spring boot·ai·chatgpt
TDengine (老段)2 小时前
TDengine 语言连接器(Node.js)
大数据·c语言·数据库·物联网·node.js·时序数据库·tdengine
傻小胖3 小时前
Node.js 中文件系统模块(`fs`)的详细总结,包括定义、作用、各种写入方式及使用场景
node.js
质变科技AI就绪数据云3 小时前
质变科技发布自主数据分析MCP Server
ai·数据挖掘·数据分析·mcp·人工智能代理
堆栈future3 小时前
基于MCP构建天气预报智能体
llm·openai·mcp
牛马喜喜4 小时前
sequelize的进阶使用(助力成为优秀全栈)
后端·node.js
视觉&物联智能5 小时前
【杂谈】-自动驾驶变革:货运革新与机器人出租车崛起
人工智能·ai·机器人·自动驾驶·agi
林夕11205 小时前
Node.js Web开发进阶:Stream、HTTP模块与文件上传全解析
前端·node.js·全栈
王会举6 小时前
让SQL飞起来:搭建企业AI应用的SQL性能优化实战
数据库·人工智能·ai·性能优化
kovlistudio9 小时前
红宝书第四十六讲:Node.js基础与API设计解析
前端·javascript·node.js