VertexAI Gemini Chat

Vertex AI Gemini API 允许开发人员使用 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 模型的规格请参见模型信息

Gemini API Reference

先决条件

设置您的 Java 开发环境。
通过运行以下命令进行身份验证。使用你的Google Cloud project ID替换PROJECT_IDGoogle Cloud username 替换 ACCOUNT

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'
}

Chat 属性

spring.ai.vertex.ai.gemini 前缀的属性,是用于配置与 VertexAI 的连接。
属性 描述 默认值
spring.ai.vertex.ai.gemini.projectId Google Cloud Platform project ID -
spring.ai.vertex.ai.gemini.location Region -
spring.ai.vertex.ai.gemini.credentialsUri Vertex AI Gemini 凭证的 URI。当提供时,它用于创建一个GoogleCredentials`实例来验证VertexAI`. -
spring.ai.vertex.ai.gemini.chat 前缀的属性,可让您配置 VertexAI Gemini 对话客户端的实现。
属性 描述 默认值
spring.ai.vertex.ai.gemini.chat.options.model 要使用的 Vertex AI Gemini 对话模型 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.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 注册表中。 -

提示: 所有 spring.ai.vertex.ai.gemini.chat.options 前缀的属性, 可以在运行期间通过添加特定请求参数到 Prompt 调用 实现覆盖.

聊天选项

VertexAiGeminiChatOptions.java 提供了模型配置,例如:temperature、topK、topP 等。

启动时,可以使用VertexAiGeminiChatOptions(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()
    ));

提示: 除了特定于模型的 VertexAiChatPaLm2Options 创建的可移植 ChatOptions 实例。

Function Calling(函数调用)

您可以使用 VertexAiGeminiChatClient 注册自定义 Java 函数,并让 Gemini Pro 模型智能地选择输出包含调用一个或多个注册函数的参数的 JSON 对象。这是一种将 LLM 功能与外部工具和 API 连接起来的强大技术。阅读有关Vertex AI Gemini 函数调用的更多信息。

多模态

多模态是指模型同时理解和处理来自各种来源(包括文本、图像、音频和其他数据格式)的信息的能力。这种范式代表了人工智能模型的重大进步。

谷歌的 Gemini AI 模型通过理解和集成文本、代码、音频、图像和视频来支持此功能。有关更多详细信息,请参阅博客文章Gemini 简介。

Spring AI 的 Message 接口 通过引入Media 类型 来支持多模态AI模型。

该类型包含有关消息中媒体附件的数据和信息,使用 Spring 的 org.springframework.util.MimeTypejava.lang.Object 作为原始媒体数据。

下面是从 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)));

Sample Controller (自动配置)

创建 一个新的 Spring Boot 项目并将其添加 spring-ai-vertex-ai-palm2-spring-boot-starter 到您的 pom(或 gradle)依赖项中。

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

提示: 将 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);
    }
}

手动配置

VertexAiGeminiChatClient 实现 ChatClientStreamingChatClient, 并使用 轻量级 Api 客户端连接到 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'
}

接下来, 创建一个 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 是一个流式选项生成器.
作者:Jeebiz  创建时间:2024-04-05 23:42
最后编辑:Jeebiz  更新时间:2024-07-06 19:00