在Vertex AI SDK中调用Gemini

Daryl Saxton Lv1

Gemini介绍

Gemini是由Google开发的大模型,其原生具有强大的多模态能力,设计初期就在不同模态上进行预训练。目前其推出了三种规格的大模型:Nano,Flash,Pro,Ultra,用来适配不同的计算限制和应用要求。

Vertex AI SDK使用指南

本篇文章以Java语言为例,示范如何利用Vertex AI SDK调用Gemini能力

依赖

在pom.xml中添加vertexai依赖

1
2
3
4
5
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-vertexai</artifactId>
<version>1.6.0</version>
</dependency>

创建服务账号密钥

登录Google Cloud控制台,创建一个服务账号,并指定其角色和管理用户

链接:
https://console.cloud.google.com/iam-admin/serviceaccounts?walkthrough_id=iam--create-service-account-keys&start_index=1&hl=zh-cn#step_index=1

alt text

创建好后,进入该服务账号,点击密钥标签页,创建一个私钥:

alt text

创建后会触发下载一个json文件,这个就是密钥了,后面调用时会用到,其大概格式是这样:

1
2
3
4
5
6
7
8
9
10
11
12
{
"type": "service_account",
"project_id": "PROJECT_ID",
"private_key_id": "KEY_ID",
"private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
"client_email": "SERVICE_ACCOUNT_EMAIL",
"client_id": "CLIENT_ID",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
}

我们把它存到电脑上的一个路径下,如C:\Users\whoami\Documents\。

在Java工程中使用

如果我们使用的是IDEA,可以在Run/Debug Configurations中配置环境变量:

GOOGLE_APPLICATION_CREDENTIALS=C:\Users\whoami\Documents\credentials.json

alt text

接下来,我们就可以开始写代码调用Gemini了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.ChatSession;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.ResponseHandler;
import java.io.IOException;

public class ChatDiscussion {

public static void main(String[] args) throws IOException {
// TODO(developer): Replace these variables before running the sample.
String projectId = "your-google-cloud-project-id";
String location = "asia-east2";
String modelName = "gemini-1.5-flash";

chatDiscussion(projectId, location, modelName);
}

// Ask interrelated questions in a row using a ChatSession object.
public static void chatDiscussion(String projectId, String location, String modelName)
throws IOException {
// Initialize client that will be used to send requests. This client only needs
// to be created once, and can be reused for multiple requests.
try (VertexAI vertexAI = new VertexAI(projectId, location)) {
GenerateContentResponse response;

GenerativeModel model = new GenerativeModel(modelName, vertexAI);
// Create a chat session to be used for interactive conversation.
ChatSession chatSession = new ChatSession(model);

response = chatSession.sendMessage("Hello.");
System.out.println(ResponseHandler.getText(response));

response = chatSession.sendMessage("What are all the colors in a rainbow?");
System.out.println(ResponseHandler.getText(response));

response = chatSession.sendMessage("Why does it appear when it rains?");
System.out.println(ResponseHandler.getText(response));
System.out.println("Chat Ended.");
}
}
}

上面是一个简单的聊天提示请求,使用ChatSession这个类,我们可以和Gemini进行连续的对话。

在实际使用中,有这样一种场景,那就是我们在前端通过调用接口的方式发送问题,且需进行连续的对话,即发送新问题是还需要将历史问答信息同时传给Gemini。这个时候我们需要用到ContentMaker类和session中的setHistory方法了,我们只需要对上面的代码稍作改造即可,以下是一个具体的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
GenerateContentResponse response;
GenerativeModel model = new GenerativeModel(modelName, vertexAI);

ChatSession session = new ChatSession(model);

Content contentUser = ContentMaker.forRole("user").fromString("我今天很开心");
Content contentModel = ContentMaker.forRole("model").fromString("很高兴你有一个好心情");
session.setHistory(Arrays.asList(contentUser, contentModel));

response = session.sendMessage("请告诉我我上一句话说的什么内容");
String text = ResponseHandler.getText(response);

System.out.println(text);

输出:

alt text

从上面可以看到,我们用ContentMaker构造了一个用户的输入和一个大模型的输出,并且调用ChatSession中的setHistory方法将历史消息同时传递给Gemini,这样Gemini就可以根据上下文做出相应的回答了。

Gemini还有很多不同的玩法,具体可以参考文档:https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/overview?hl=zh-cn

  • 标题: 在Vertex AI SDK中调用Gemini
  • 作者: Daryl Saxton
  • 创建于 : 2024-07-30 21:35:48
  • 更新于 : 2024-07-30 22:26:18
  • 链接: https://www.dylsxtn.com/2024/07/30/在Verte-AI-SDK中调用Gemini/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。