我有一个Web服务器,其中一个端点部署在Heroku上.服务器目的是与Vertex AI gemini-pro LLM进行交互.在本地,一切都很完美,因为我使用的是gCloud CLI身份验证,但我想实现一个服务帐户身份验证.

以下是Model init的代码示例:

import { VertexAI } from "@google-cloud/vertexai";
import { GoogleAuth } from "google-auth-library";
import dotenv from "dotenv";

dotenv.config();

const gAuth = new GoogleAuth({
  credentials: {
    client_email: process.env.CLIENT_EMAIL,
    private_key: process.env.PRIVATE_KEY,
  },
});

const authClient = await gAuth.getClient();

const vertex_ai = new VertexAI({
  project: process.env.PROJECT_ID,
  location: process.env.LOCATION,
  googleAuth: authClient,
});

const model = "gemini-pro";
const generativeModel = vertex_ai.preview.getGenerativeModel({
  model: model,
  generation_config: {
    max_output_tokens: 8192,
    temperature: 0.8,
    top_p: 0.8,
    top_k: 5,
  },
});

export default generativeModel;

我判断了服务访问角色-它是"编辑器",所以问题出在模型初始化中. 每次try 到达端点时,我都会得到错误:

2024-02-05T21:13:23.977555+00:00 app[web.1]: GoogleAuthError: 
2024-02-05T21:13:23.977557+00:00 app[web.1]: Unable to authenticate your request        
2024-02-05T21:13:23.977576+00:00 app[web.1]: Depending on your run time environment, you can get authentication by        
2024-02-05T21:13:23.977576+00:00 app[web.1]: - if in local instance or cloud shell: `!gcloud auth login`        
2024-02-05T21:13:23.977576+00:00 app[web.1]: - if in Colab:        
2024-02-05T21:13:23.977577+00:00 app[web.1]:     -`from google.colab import auth`        
2024-02-05T21:13:23.977577+00:00 app[web.1]:     -`auth.authenticate_user()`        
2024-02-05T21:13:23.977578+00:00 app[web.1]: - if in service account or other: please follow guidance in https://cloud.google.com/docs/authentication
2024-02-05T21:13:23.977579+00:00 app[web.1]: Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.

更新:我在迁移到使用API Key时找到了解决方案:

import { GoogleGenerativeAI } from "@google/generative-ai";
import dotenv from "dotenv";

dotenv.config();

const genAI = new GoogleGenerativeAI(process.env.API_KEY);

const model = "gemini-pro";
const generativeModel = genAI.getGenerativeModel({
  model: model,
  generation_config: {
    max_output_tokens: 8192,
    temperature: 0.8,
    top_p: 0.8,
    top_k: 5,
  },
});

export default generativeModel;

推荐答案

我认为,如何设置各种身份验证元素有几个问题.你有关于你是从哪里获得这些属性的参考资料吗?

最大的问题是VertexAI构造函数在其类型为VertexInit的初始化对象中没有googleAuth属性.但是它确实有一个类型为GoogleAuthOptionsgoogleAuthOptions属性.

所以我认为您的代码应该如下所示

const authOptions = {
  credentials: {
    client_email: process.env.CLIENT_EMAIL,
    private_key: process.env.PRIVATE_KEY,
  }
}

const vertex_ai = new VertexAI({
  project: process.env.PROJECT_ID,
  location: process.env.LOCATION,
  googleAuthOptions: authOptions,
});

同样值得判断的是,确保来自环境的各种值实际上都填充了您认为它们是的值.

Node.js相关问答推荐

Node.js promise 循环中的所有多个API调用

使用OpenAI API时遇到问题

已知NPM无法在node.js V12上运行的问题

使用Node.js中的";类型";:";模块";不导入文件

如何使用Nextjs路由从下一步/导航在新选项卡中通过";router.ush";打开链接

在内存中加载安全密钥安全吗?还是每次都从文件中读取?

如何在Mongoose for MongoDB中编写此查询

为什么 docker 容器内的应用程序无法访问它自己的 API 端点?

NodeJS:zlib.gzipSync 在不同平台上给出不同的明文输出

如何使用 Remix 仅在客户端呈现组件?

express cors request.body formData显示undefined

使用 Forms API 进行批量更新时生成 itemId

Mongodb聚合传递一个匹配的数组和一个不匹配的数组

AJAX 和 Node JS:在我的服务器中接收空数据

tsc:当我上传 React+next js 和 node 项目时,在 heroku 找不到

postman 发送请求……永远

AWS Kinesis 中的分区键是什么?

如何在 node 中找到引用站点 URL?

Node.js -Firebase 服务帐户私钥不会解析

AWS Lambda 函数写入 S3