'''Meta的Llama 2聊天 是Llama 2大型语言模型系列的一部分。它在基于对话的应用程序中表现出色,参数规模从70亿到700亿不等。通过利用公共数据集和超过100万的人类注释,Llama聊天提供了有上下文意识的对话。'''

经过对公共数据来源中的2万亿个标记进行训练,Llama-2-Chat 提供了丰富的知识,用于深入的对话交流。通过严格的测试,包括超过1000小时的红队测试和注释,确保了其性能和安全性,使其成为人工智能对话的可靠选择。

'''AWS Llama 2 Model PageAmazon Bedrock User Guide 包含了关于如何使用AWS托管模型的详细信息。'''

先决条件

请参阅Spring AI关于Amazon Bedrock的文档以设置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'
}
Tip
参考依赖管理章节,将Spring AI BOM添加到构建文件中。

启用Llama2聊天支持

默认情况下Bedrock Llama2模型是禁用的。要启用它,将`spring.ai.bedrock.llama2.chat.enabled`属性设置为`true`。导出环境变量是设置这个配置属性的一种方法:

export SPRING_AI_BEDROCK_LLAMA2_CHAT_ENABLED=true

聊天属性

前缀 spring.ai.bedrock.aws 是用来配置与 AWS Bedrock 连接的属性前缀。

属性 描述 默认值

spring.ai.bedrock.aws.region

使用的AWS区域。

us-east-1

spring.ai.bedrock.aws.access-key

AWS访问密钥。

-

spring.ai.bedrock.aws.secret-key

AWS密钥。

前缀 spring.ai.bedrock.llama2.chat 是用于配置 Llama2 的聊天客户端实现的属性前缀。

Property Description Default

spring.ai.bedrock.llama2.chat.enabled

启用或禁用对 Llama2 的支持

false

spring.ai.bedrock.llama2.chat.model

要使用的模型ID(见下文)

meta.llama2-70b-chat-v1

spring.ai.bedrock.llama2.chat.options.temperature

控制输出的随机性。值的范围可以是[0.0,1.0](含),接近1.0的值将产生更多变化的回应,而接近0.0的值通常会导致模型的回应不那么出人意料。此值指定后端在调用模型时使用的默认值。

0.7

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

在采样时考虑的令牌的最大累积概率。模型使用结合了 Top-k 和核心采样的方法。核心采样考虑的是累积概率至少为topP的最小令牌集。

AWS Bedrock 默认值

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

指定生成回应时使用的最大令牌数量。一旦生成的文本超过maxGenLen,模型将截断回应。

300

访问 Llama2ChatBedrockApi#Llama2ChatModel 以查看其他模型标识符。另一个支持的值是 meta.llama2-13b-chat-v1。模型标识符的值也可以在 AWS Bedrock 文档中的基础模型标识符中找到。

Tip
所有以 spring.ai.bedrock.llama2.chat.options 为前缀的属性可以在运行时被覆盖,方法是在 Prompt 调用中添加一个特定请求的 [chat-options]

运行时选项

在启动时,可以使用 BedrockLlama2ChatClient(api, options) 构造函数或 spring.ai.bedrock.llama2.chat.options.* 属性来配置默认选项。

在运行时,您可以通过向`Prompt`调用添加新的、特定于请求的选项来覆盖默认选项。例如,要覆盖特定请求的默认温度:

ChatResponse response = chatClient.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        BedrockLlama2ChatOptions.builder()
            .withTemperature(0.4)
        .build()
    ));

样本控制器

'''创建一个新的Spring Boot项目,并将`spring-ai-bedrock-ai-spring-boot-starter`添加到你的pom(或gradle)依赖中。'''

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

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

spring.ai.bedrock.llama2.chat.enabled=true
spring.ai.bedrock.llama2.chat.options.temperature=0.8
Tip
regionsaccess-keysecret-key 替换为您的AWS凭据。

这将创建一个`BedrockLlama2ChatClient`实现,你可以将其注入到你的类中。以下是一个使用聊天客户端进行文本生成的简单`@Controller`类的例子。

@RestController
public class ChatController {

private final BedrockLlama2ChatClient chatClient;

@Autowired
    public ChatController(BedrockLlama2ChatClient 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 BedrockLlama2ChatClient实现了`ChatClient`和`StreamingChatClient`,并使用低级Llama2ChatBedrockApi客户端连接到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'
}
Tip
参考依赖管理章节,将Spring AI BOM添加到构建文件中。

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

Llama2ChatBedrockApi api = new Llama2ChatBedrockApi(Llama2ChatModel.LLAMA2_70B_CHAT_V1.id(),
	EnvironmentVariableCredentialsProvider.create(), Region.US_EAST_1.id(), new ObjectMapper());

BedrockLlama2ChatClient chatClient = new BedrockLlama2ChatClient(api,
    BedrockLlama2ChatOptions.builder()
        .withTemperature(0.5f)
        .withMaxGenLen(100)
        .withTopP(0.9f).build());

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

// 或使用流响应
Flux<ChatResponse> response = chatClient.stream(
    new Prompt("生成5个著名海盗的名字。"));

低级Llama2ChatBedrockApi客户端

'''Llama2ChatBedrockApi提供了在AWS Bedrock之上的轻量级Java客户端 Meta Llama 2和Llama 2聊天模型。'''

以下类图展示了Llama2ChatBedrockApi接口和构建模块:

"Llama2ChatBedrockApi 类图"

Llama2ChatBedrockApi 支持 meta.llama2-13b-chat-v1meta.llama2-70b-chat-v1 模型,用于同步(例如 chatCompletion())和流式(例如 chatCompletionStream())响应。

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

Llama2ChatBedrockApi llama2ChatApi = new Llama2ChatBedrockApi(
        Llama2ChatModel.LLAMA2_70B_CHAT_V1.id(),
        Region.US_EAST_1.id());

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

Llama2ChatResponse response = llama2ChatApi.chatCompletion(request);

// Streaming response
Flux<Llama2ChatResponse> responseStream = llama2ChatApi.chatCompletionStream(request);
List<Llama2ChatResponse> responses = responseStream.collectList().block();

根据`Llama2ChatBedrockApi.java`的JavaDoc获取更多信息。