[Vertex AI Gemini API](https://cloud.google.com/vertex-ai/docs/generative-ai/multimodal/overview)允许开发者使用Gemini模型构建生成式AI应用程序。Vertex AI Gemini API支持作为输入的多模态提示,并输出文本或代码。多模态模型是一种能够处理来自多种模态的信息,包括图像、视频和文本的模型。例如,你可以向模型发送一张饼干盘的照片,并要求它给你提供这些饼干的食谱。
Gemini是Google DeepMind开发的一系列生成式AI模型,设计用于多模态用例。Gemini API允许您访问Gemini 1.0 Pro Vision和Gemini 1.0 Pro模型。有关Vertex AI Gemini API模型的规格,请参见链接:https://cloud.google.com/vertex-ai/docs/generative-ai/learn/models#gemini-models[模型信息]。
链接:https://cloud.google.com/vertex-ai/docs/generative-ai/model-reference/gemini[Gemini API 参考]
先决条件
设置你的Java开发环境。通过运行以下命令进行认证。将`PROJECT_ID`替换为你的Google Cloud项目ID,将`ACCOUNT`替换为你的Google Cloud用户名。
gcloud config set project PROJECT_ID &&
gcloud auth application-default login ACCOUNT
自动配置
Spring AI为VertexAI Gemini聊天客户端提供了Spring Boot自动配置支持。要启用它,请将以下依赖项添加到您项目的Maven `pom.xml`文件中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-vertex-ai-gemini-spring-boot-starter</artifactId>
</dependency>
或者添加到你的Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-vertex-ai-gemini-spring-boot-starter'
}
Tip
|
参考依赖管理部分,将Spring AI BOM添加到您的构建文件中。 |
聊天属性
前缀 spring.ai.vertex.ai.gemini
被用作属性前缀,允许你连接到 VertexAI。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.vertex.ai.gemini.projectId |
Google Cloud Platform 项目 ID |
- |
spring.ai.vertex.ai.gemini.location |
区域 |
- |
spring.ai.vertex.ai.gemini.credentialsUri |
Vertex AI Gemini 凭据的 URI。当提供时,它被用来创建一个 |
- |
前缀 spring.ai.vertex.ai.gemini.chat
是一个属性前缀,它让你可以为 VertexAI Gemini Chat 配置聊天客户端实现。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.vertex.ai.gemini.chat.options.model |
这是要使用的 Vertex AI Gemini Chat 模型 |
gemini-pro-vision |
spring.ai.vertex.ai.gemini.chat.options.temperature |
控制输出的随机性。值的范围可以是 [0.0,1.0](包含)。接近 1.0 的值将产生更多变化的响应,而接近 0.0 的值通常会导致来自生成器的响应较少出人意料。这个值指定了在后端调用生成器时使用的默认值。 |
0.8 |
spring.ai.vertex.ai.gemini.chat.options.topK |
抽样时考虑的最大令牌数。生成器使用结合了 Top-k 和核心采样的方法。Top-k 抽样考虑了可能性最高的 topK 个令牌。 |
- |
spring.ai.vertex.ai.gemini.chat.options.topP |
抽样时考虑的令牌最大累积概率。生成器使用结合了 Top-k 和核心采样的方法。核心采样考虑了概率和至少为 topP 的最小令牌集。 |
- |
spring.ai.vertex.ai.gemini.chat.options.candidateCount |
返回的生成响应消息数量。这个值必须在 [1, 8] 之间,包含端点。默认为 1。 |
- |
spring.ai.vertex.ai.gemini.chat.options.candidateCount |
返回的生成响应消息数量。这个值必须在 [1, 8] 之间,包含端点。默认为 1。 |
- |
spring.ai.vertex.ai.gemini.chat.options.maxOutputTokens |
生成的最大令牌数。 |
- |
spring.ai.vertex.ai.gemini.chat.options.frequencyPenalty |
频率惩罚 |
- |
spring.ai.vertex.ai.gemini.chat.options.presencePenalty |
存在惩罚 |
- |
spring.ai.vertex.ai.gemini.chat.options.functions |
在单个提示请求中启用函数调用的函数列表,通过它们的名称来识别。这些名称的函数必须存在于 functionCallbacks 注册表中。 |
- |
Tip
|
所有以 spring.ai.vertex.ai.gemini.chat.options 为前缀的属性可以在运行时被覆盖,方法是在 Prompt 调用中添加一个特定请求的 运行时选项。
|
运行时选项
'''VertexAiGeminiChatOptions.java 文件提供了模型配置,例如温度、topK等。'''
在启动时,可以通过`VertexAiGeminiChatClient(api, options)`构造函数或`spring.ai.vertex.ai.chat.options.*`属性配置默认选项。
在运行时,您可以通过向`Prompt`调用添加新的、特定于请求的选项来覆盖默认选项。例如,为了覆盖特定请求的默认温度:
ChatResponse response = chatClient.call(
new Prompt(
"Generate the names of 5 famous pirates.",
VertexAiPaLm2ChatOptions.builder()
.withTemperature(0.4)
.build()
));
Tip
|
除了特定于模型的 VertexAiChatPaLm2Options ,您还可以使用一个便携式的[ChatOptions]实例,该实例通过[ChatOptionsBuilder#builder()]创建。
|
函数调用
您可以使用VertexAiGeminiChatClient注册自定义的Java函数,并让Gemini Pro模型智能地选择输出一个包含参数的JSON对象,以调用一个或多个注册的函数。这是一种将大型语言模型(LLM)能力与外部工具和API连接起来的强大技术。阅读更多关于Vertex AI Gemini函数调用的信息。
多模态
多模态指的是模型能够同时理解和处理来自不同来源的信息,包括文本、图片、音频和其它数据格式。这一范式代表了人工智能模型的重大进步。
Google的双子AI模型通过理解和整合文本、代码、音频、图片和视频来支持这项能力。想了解更多详细信息,请参考博客文章https://blog.google/technology/ai/google-gemini-ai/#introducing-gemini【介绍双子】。
Spring AI的`Message`接口通过引入媒体类型支持多模态AI模型。这种类型包含了消息中媒体附件的数据和信息,使用Spring的`org.springframework.util.MimeType`和一个`java.lang.Object`来表示原始媒体数据。
以下是从 https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/VertexAiGeminiChatClientIT.java [VertexAiGeminiChatClientIT.java] 中提取的一个简单代码示例,展示了用户文本与图像的结合。
byte[] data = new ClassPathResource("/vertex-test.png").getContentAsByteArray();
var userMessage = new UserMessage("Explain what do you see o this picture?",
List.of(new Media(MimeTypeUtils.IMAGE_PNG, data)));
ChatResponse response = chatClient.call(new Prompt(List.of(userMessage)));
样本控制器
访问 '''https://start.spring.io/''' ,[创建]一个新的Spring Boot项目,并在你的pom(或gradle)依赖中添加 spring-ai-vertex-ai-palm2-spring-boot-starter
。
在`src/main/resources`目录下,添加一个`application.properties`文件,以启用并配置VertexAi聊天客户端:
spring.ai.vertex.ai.gemini.project-id=PROJECT_ID
spring.ai.vertex.ai.gemini.location=LOCATION
spring.ai.vertex.ai.gemini.chat.options.model=vertex-pro-vision
spring.ai.vertex.ai.gemini.chat.options.temperature=0.5
Tip
|
将 api-key 替换为您的 VertexAI 凭据。
|
这将创建一个`VertexAiGeminiChatClient`实现,你可以将其注入到你的类中。这里是一个使用聊天客户端进行文本生成的简单`@Controller`类的示例。
@RestController
public class ChatController {
private final VertexAiGeminiChatClient chatClient;
@Autowired
public ChatController(VertexAiGeminiChatClient chatClient) {
this.chatClient = chatClient;
}
@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("generation", chatClient.call(message));
}
@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
Prompt prompt = new Prompt(new UserMessage(message));
return chatClient.stream(prompt);
}
}
手动配置
The VertexAiGeminiChatClient 实现了 ChatClient
并使用 VertexAI
连接到 Vertex AI Gemini 服务。
将`spring-ai-vertex-ai-gemini`依赖项添加到您项目的Maven `pom.xml`文件中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-vertex-ai-gemini</artifactId>
</dependency>
或者添加到你的Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-vertex-ai-gemini'
}
Tip
|
参考依赖管理部分,将Spring AI BOM添加到您的构建文件中。 |
接下来,创建一个`VertexAiGeminiChatClient`并使用它来生成文本:
VertexAI vertexApi = new VertexAI(projectId, location);
var chatClient = new VertexAiGeminiChatClient(vertexApi,
VertexAiGeminiChatOptions.builder()
.withTemperature(0.4)
.build());
ChatResponse response = chatClient.call(
new Prompt("Generate the names of 5 famous pirates."));
VertexAiGeminiChatOptions` 提供了聊天请求的配置信息。VertexAiGeminiChatOptions.Builder
是流畅的选项构建器。