链接:https://developers.generativeai.google/api/rest/generativelanguage [生成语言] PaLM API 允许开发者使用 PaLM 模型构建生成式 AI 应用程序。大型语言模型(LLMs)是一种强大而多功能的机器学习模型,它通过一系列提示使计算机理解和生成自然语言。PaLM API 基于谷歌的下一代 LLM,即 PaLM。它擅长执行各种不同的任务,如代码生成、推理和写作。你可以使用 PaLM API 为内容生成、对话代理、摘要和分类系统等用例构建生成式 AI 应用程序。

基于链接:https://developers.generativeai.google/api/rest/generativelanguage/models [模型 REST API]。

先决条件

要访问PaLM2 REST API,您需要从链接获取访问API密钥:https://makersuite.google.com/app/apikey[makersuite]。

Note
目前PaLM API在美国以外地区无法使用,但您可以使用VPN进行测试。

Spring AI项目定义了一个名为`spring.ai.vertex.ai.api-key`的配置属性,你应该将其设置为获取的`API Key`的值。导出环境变量是设置该配置属性的一种方式:

export SPRING_AI_VERTEX_AI_API_KEY=<INSERT KEY HERE>

添加仓库和BOM

Spring AI 工件发布在 Spring Milestone 和 Snapshot 仓库中。请参阅 仓库部分,以将这些仓库添加到您的构建系统中。

为了帮助依赖管理,Spring AI提供了一个BOM(物料清单),以确保整个项目中使用一致版本的Spring AI。请参阅依赖管理部分,将Spring AI BOM添加到您的构建系统中。

自动配置

Spring AI为VertexAI嵌入式客户端提供Spring Boot自动配置。要启用它,请将以下依赖项添加到项目的Maven `pom.xml`文件中:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-vertex-ai-palm2-spring-boot-starter</artifactId>
</dependency>

或添加到您的Gradle build.gradle 构建文件中。

dependencies {
    implementation 'org.springframework.ai:spring-ai-vertex-ai-palm2-spring-boot-starter'
}
Tip
请参考依赖管理部分,将Spring AI BOM添加到你的构建文件中。

嵌入属性

前缀 spring.ai.vertex.ai 被用作属性前缀,使你能够连接到 VertexAI。

Property Description Default

spring.ai.vertex.ai.ai.base-url

The URL to connect to

https://generativelanguage.googleapis.com/v1beta3

spring.ai.vertex.ai.api-key

The API Key

-

前缀 spring.ai.vertex.ai.embedding 是一个属性前缀,它允许你为 VertexAI 聊天配置嵌入式客户端实现。

属性 描述 默认值

spring.ai.vertex.ai.embedding.enabled

启用 Vertex AI PaLM API 嵌入客户端。

true

spring.ai.vertex.ai.embedding.model

使用的 Vertex 嵌入模型

embedding-gecko-001

样本控制器

访问https://start.spring.io/[创建]一个新的Spring Boot项目,并将`spring-ai-vertex-ai-palm2-spring-boot-starter`添加到你的pom(或gradle)依赖中。

在`src/main/resources`目录下添加一个`application.properties`文件,以启用并配置VertexAi Chat客户端:

spring.ai.vertex.ai.api-key=YOUR_API_KEY
spring.ai.vertex.ai.embedding.model=embedding-gecko-001
Tip
api-key 替换为您的 VertexAI 凭证。

这将创建一个 VertexAiPaLm2EmbeddingClient 实现,你可以将它注入到你的类中。这里有一个简单的 @Controller 类的例子,它使用嵌入客户端进行文本生成。

@RestController
public class EmbeddingController {

private final EmbeddingClient embeddingClient;

@Autowired
    public EmbeddingController(EmbeddingClient embeddingClient) {
        this.embeddingClient = embeddingClient;
    }

    @GetMapping("/ai/embedding")
    public Map embed(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        EmbeddingResponse embeddingResponse = this.embeddingClient.embedForResponse(List.of(message));
        return Map.of("embedding", embeddingResponse);
    }
}

手动配置

The VertexAiPaLm2EmbeddingClient 实现了 EmbeddingClient 并使用 [low-level-api] 与 VertexAI 服务连接。

将`spring-ai-vertex-ai`依赖项添加到项目的Maven `pom.xml`文件中:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-vertex-ai-palm2</artifactId>
</dependency>

或添加到您的Gradle build.gradle 构建文件中。

dependencies {
    implementation 'org.springframework.ai:spring-ai-vertex-ai-palm2'
}
Tip
请参考依赖管理部分,将Spring AI BOM添加到你的构建文件中。

接下来,创建一个`VertexAiPaLm2EmbeddingClient`并使用它来进行文本生成:

VertexAiPaLm2Api vertexAiApi = new VertexAiPaLm2Api(< YOUR PALM_API_KEY>);

var embeddingClient = new VertexAiPaLm2EmbeddingClient(vertexAiApi);

EmbeddingResponse embeddingResponse = embeddingClient
	.embedForResponse(List.of("Hello World", "World is big and salvation is near"));

低级别 VertexAiPaLm2Api 客户端 [[低级别 API]]

VertexAiPaLm2Api 提供了用于 VertexAiPaLm2Api 聊天 API 的轻量级 Java 客户端。

以下类图阐述了`VertexAiPaLm2Api`嵌入接口和构建模块:

vertex ai chat low level api

这是一个简单的代码片段,展示如何以编程方式使用API:

VertexAiPaLm2Api vertexAiApi = new VertexAiPaLm2Api(< YOUR PALM_API_KEY>);

// Generate
var prompt = new MessagePrompt(List.of(new Message("0", "Hello, how are you?")));

GenerateMessageRequest request = new GenerateMessageRequest(prompt);

GenerateMessageResponse response = vertexAiApi.generateMessage(request);

// 嵌入文本
Embedding embedding = vertexAiApi.embedText("你好,你怎么样?");

// 批量嵌入
List<Embedding> embeddings = vertexAiApi.batchEmbedText(List.of("Hello, how are you?", "I am fine, thank you!"));