Llama Chat

Meta 的 Llama Chat 是 Llama 大型語言模型系列的一部分。它擅長對話式應用,參數規模從 70 億到 700 億不等。Llama Chat 利用公共數據集和超過 100 萬個人工標註,提供具備上下文意識的對話。

Llama-Chat 在來自公共數據源的 2 兆個 tokens 上進行訓練,提供廣泛的知識以進行深入的對話。嚴格的測試,包括超過 1,000 小時的紅隊演練和標註,確保了效能和安全性,使其成為 AI 驅動對話的可靠選擇。

AWS Llama 模型頁面Amazon Bedrock 使用者指南 包含關於如何使用 AWS 託管模型的詳細資訊。

先決條件

請參閱 關於 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 新增到您的建置檔案中。

啟用 Llama Chat 支援

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

export SPRING_AI_BEDROCK_LLAMA_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.llama.chat 是配置 Llama 聊天模型實作的屬性前綴。

屬性 描述 預設值

spring.ai.bedrock.llama.chat.enabled

啟用或停用 Llama 支援

false

spring.ai.bedrock.llama.chat.model

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

meta.llama3-70b-instruct-v1:0

spring.ai.bedrock.llama.chat.options.temperature

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

0.7

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

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

AWS Bedrock 預設值

spring.ai.bedrock.llama.chat.options.max-gen-len

指定在產生的回應中要使用的 tokens 最大數量。一旦產生的文字超過 maxGenLen,模型將會截斷回應。

300

請查看 LlamaChatBedrockApi#LlamaChatModel 以取得其他模型 ID。另一個支援的值是 meta.llama2-13b-chat-v1。模型 ID 值也可以在 AWS Bedrock 文件中找到基礎模型 ID

所有以 spring.ai.bedrock.llama.chat.options 為前綴的屬性都可以在執行時被覆寫,方法是將請求特定的 執行期選項 新增到 Prompt 呼叫中。

執行期選項

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

在啟動時,可以使用 BedrockLlamaChatModel(api, options) 建構子或 spring.ai.bedrock.llama.chat.options.* 屬性來配置預設選項。

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

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

範例控制器

建立 一個新的 Spring Boot 專案,並將 spring-ai-bedrock-ai-spring-boot-starter 新增到您的 pom(或 gradle)依賴項中。

src/main/resources 目錄下新增 application.properties 檔案,以啟用和配置 Anthropic 聊天模型

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.llama.chat.enabled=true
spring.ai.bedrock.llama.chat.options.temperature=0.8
regionsaccess-keysecret-key 替換為您的 AWS 憑證。

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

@RestController
public class ChatController {

    private final BedrockLlamaChatModel chatModel;

    @Autowired
    public ChatController(BedrockLlamaChatModel 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));
    }

    @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 this.chatModel.stream(prompt);
    }
}

手動配置

BedrockLlamaChatModel 實作了 ChatModelStreamingChatModel,並使用 底層 LlamaChatBedrockApi 用戶端 連接到 Bedrock Anthropic 服務。

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 新增到您的建置檔案中。

接下來,建立一個 BedrockLlamaChatModel 並使用它進行文字生成

LlamaChatBedrockApi api = new LlamaChatBedrockApi(LlamaChatModel.LLAMA2_70B_CHAT_V1.id(),
	EnvironmentVariableCredentialsProvider.create(),
	Region.US_EAST_1.id(),
	new ObjectMapper(),
	Duration.ofMillis(1000L));

BedrockLlamaChatModel chatModel = new BedrockLlamaChatModel(this.api,
    BedrockLlamaChatOptions.builder()
        .withTemperature(0.5)
        .withMaxGenLen(100)
        .withTopP(0.9).build());

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

// Or with streaming responses
Flux<ChatResponse> response = this.chatModel.stream(
    new Prompt("Generate the names of 5 famous pirates."));

底層 LlamaChatBedrockApi 用戶端

LlamaChatBedrockApi 提供了一個基於 AWS Bedrock 的輕量級 Java 用戶端 Meta Llama 2 和 Llama 2 Chat 模型

以下類別圖說明了 LlamaChatBedrockApi 介面和建構區塊

LlamaChatBedrockApi Class Diagram

LlamaChatBedrockApi 支援 meta.llama3-8b-instruct-v1:0meta.llama3-70b-instruct-v1:0meta.llama2-13b-chat-v1meta.llama2-70b-chat-v1 模型,用於同步(例如 chatCompletion())和串流(例如 chatCompletionStream())回應。

以下是一個簡單的程式碼片段,說明如何以程式方式使用 API

LlamaChatBedrockApi llamaChatApi = new LlamaChatBedrockApi(
        LlamaChatModel.LLAMA3_70B_INSTRUCT_V1.id(),
        Region.US_EAST_1.id(),
        Duration.ofMillis(1000L));

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

LlamaChatResponse response = this.llamaChatApi.chatCompletion(this.request);

// Streaming response
Flux<LlamaChatResponse> responseStream = this.llamaChatApi.chatCompletionStream(this.request);
List<LlamaChatResponse> responses = this.responseStream.collectList().block();

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