Jurassic-2 Chat

AI21 Labs Jurassic on Amazon Bedrock Jurassic 是 AI21 Labs 針對企業所推出的可靠 FM 系列,為複雜的語言生成任務提供動力,例如問題解答、文字生成、搜尋和摘要,應用範圍涵蓋數千個實際應用程式。

先決條件

請參閱關於 Amazon Bedrock 的 Spring AI 文件,以了解如何設定 API 存取權。

新增儲存庫和 BOM

Spring AI 的產出物發佈在 Spring Milestone 和 Snapshot 儲存庫中。請參閱儲存庫章節,將這些儲存庫新增至您的建置系統。

為了協助進行相依性管理,Spring AI 提供了 BOM(物料清單),以確保在整個專案中使用一致版本的 Spring AI。請參閱相依性管理章節,將 Spring AI BOM 新增至您的建置系統。

自動設定

spring-ai-bedrock-ai-spring-boot-starter 相依性新增至您專案的 Maven pom.xml 檔案

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

或新增至您的 Gradle build.gradle 建置檔案。

dependencies {
    implementation 'org.springframework.ai:spring-ai-bedrock-ai-spring-boot-starter'
}
請參閱相依性管理章節,將 Spring AI BOM 新增至您的建置檔案。

啟用 Jurassic-2

預設情況下,Bedrock Jurassic-2 模型為停用狀態。若要啟用它,請將 spring.ai.bedrock.jurassic2.chat.enabled 屬性設定為 true。匯出環境變數是設定此組態屬性的一種方式

export SPRING_AI_BEDROCK_JURASSIC2_CHAT_ENABLED=true

聊天屬性

字首 spring.ai.bedrock.aws 是用於設定與 AWS Bedrock 連線的屬性字首。

屬性 描述 預設值

spring.ai.bedrock.aws.region

要使用的 AWS 區域。

us-east-1

spring.ai.bedrock.aws.timeout

要使用的 AWS 超時時間。

5m

spring.ai.bedrock.aws.access-key

AWS 存取金鑰。

-

spring.ai.bedrock.aws.secret-key

AWS 秘密金鑰。

-

字首 spring.ai.bedrock.jurassic2.chat 是用於設定 Jurassic-2 聊天模型實作的屬性字首。

屬性 描述 預設值

spring.ai.bedrock.jurassic2.chat.enabled

啟用或停用對 Jurassic-2 的支援

false

spring.ai.bedrock.jurassic2.chat.model

要使用的模型 ID(請參閱下方)

ai21.j2-mid-v1

spring.ai.bedrock.jurassic2.chat.options.temperature

控制輸出的隨機性。值可以介於 [0.0,1.0] 之間,包含端點值。值越接近 1.0,產生的回應變化性越高;值越接近 0.0,模型產生的回應通常越不令人意外。此值指定後端在呼叫模型時要使用的預設值。

0.7

spring.ai.bedrock.jurassic2.chat.options.top-p

取樣時要考慮的權杖最大累積機率。模型使用組合的 Top-k 和 nucleus 取樣。Nucleus 取樣會考慮機率總和至少為 topP 的最小權杖集合。

AWS Bedrock 預設值

spring.ai.bedrock.jurassic2.chat.options.max-tokens

指定在產生的回應中要使用的最大權杖數。一旦產生的文字超過 maxTokens,模型就會截斷回應。

500

請查看 Ai21Jurassic2ChatBedrockApi#Ai21Jurassic2ChatModel 以取得其他模型 ID。支援的另一個值為 ai21.j2-ultra-v1。模型 ID 值也可以在AWS Bedrock 文件中找到基本模型 ID

所有以 spring.ai.bedrock.jurassic2.chat.options 為字首的屬性都可以在執行階段被覆寫,方法是將請求特定的執行階段選項新增至 Prompt 呼叫。

執行階段選項

BedrockAi21Jurassic2ChatOptions.java 提供了模型組態,例如 temperature、topP、maxTokens 等。

在啟動時,可以使用 BedrockAi21Jurassic2ChatModel(api, options) 建構函式或 spring.ai.bedrock.jurassic2.chat.options.* 屬性來設定預設選項。

在執行階段,您可以透過將新的、請求特定的選項新增至 Prompt 呼叫來覆寫預設選項。例如,若要覆寫特定請求的預設 temperature

ChatResponse response = chatModel.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        BedrockAi21Jurassic2ChatOptions.builder()
            .withTemperature(0.4)
        .build()
    ));
除了模型特定的 BedrockAi21Jurassic2ChatOptions 之外,您還可以使用可攜式的 ChatOptions 實例,該實例是使用 ChatOptionsBuilder#builder() 建立的。

範例控制器

建立新的 Spring Boot 專案,並將 spring-ai-bedrock-ai-spring-boot-starter 新增至您的 pom(或 gradle)相依性。

src/main/resources 目錄下新增 application.properties 檔案,以啟用和設定 Jurassic-2 聊天模型

spring.ai.bedrock.aws.region=eu-central-1
spring.ai.bedrock.aws.timeout=1000ms
spring.ai.bedrock.aws.access-key=${AWS_ACCESS_KEY_ID}
spring.ai.bedrock.aws.secret-key=${AWS_SECRET_ACCESS_KEY}

spring.ai.bedrock.jurassic2.chat.enabled=true
spring.ai.bedrock.jurassic2.chat.options.temperature=0.8
regionsaccess-keysecret-key 替換為您的 AWS 憑證。

這將建立一個 BedrockAi21Jurassic2ChatModel 實作,您可以將其注入到您的類別中。以下是一個簡單的 @Controller 類別範例,該類別使用聊天模型進行文字生成。

@RestController
public class ChatController {

    private final BedrockAi21Jurassic2ChatModel chatModel;

    @Autowired
    public ChatController(BedrockAi21Jurassic2ChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", this.chatModel.call(message));
    }

}

手動設定

BedrockAi21Jurassic2ChatModel 實作了 ChatModel,並使用低階用戶端連線到 Bedrock Jurassic-2 服務。

spring-ai-bedrock 相依性新增至您專案的 Maven pom.xml 檔案

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

或新增至您的 Gradle build.gradle 建置檔案。

dependencies {
    implementation 'org.springframework.ai:spring-ai-bedrock'
}
請參閱相依性管理章節,將 Spring AI BOM 新增至您的建置檔案。

接下來,建立一個 BedrockAi21Jurassic2ChatModel 並將其用於文字生成

Ai21Jurassic2ChatBedrockApi api = new Ai21Jurassic2ChatBedrockApi(Ai21Jurassic2ChatModel.AI21_J2_MID_V1.id(),
    EnvironmentVariableCredentialsProvider.create(),
    Region.US_EAST_1.id(),
    new ObjectMapper(),
    Duration.ofMillis(1000L));

BedrockAi21Jurassic2ChatModel chatModel = new BedrockAi21Jurassic2ChatModel(this.api,
    BedrockAi21Jurassic2ChatOptions.builder()
        .withTemperature(0.5)
        .withMaxTokens(100)
        .withTopP(0.9).build());

ChatResponse response = this.chatModel.call(
    new Prompt("Generate the names of 5 famous pirates."));

低階用戶端

Ai21Jurassic2ChatBedrockApi 在 AWS Bedrock Jurassic-2 和 Jurassic-2 Chat 模型之上提供了一個輕量級 Java 用戶端。

Ai21Jurassic2ChatBedrockApi 支援 ai21.j2-mid-v1ai21.j2-ultra-v1 模型,並且僅支援同步 (chatCompletion())。

以下是如何以程式設計方式使用 API 的簡單程式碼片段

Ai21Jurassic2ChatBedrockApi jurassic2ChatApi = new Ai21Jurassic2ChatBedrockApi(
        Ai21Jurassic2ChatModel.AI21_J2_MID_V1.id(),
        Region.US_EAST_1.id(),
        Duration.ofMillis(1000L));

Ai21Jurassic2ChatRequest request = Ai21Jurassic2ChatRequest.builder("Hello, my name is")
        .withTemperature(0.9)
        .withTopP(0.9)
        .withMaxTokens(20)
        .build();

Ai21Jurassic2ChatResponse response = this.jurassic2ChatApi.chatCompletion(this.request);

請參閱 Ai21Jurassic2ChatBedrockApi.java 的 JavaDoc 以取得更多資訊。