Llama2 对话

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

从公共数据源的 2 兆标记中训练而成,Llama-2-Chat 为富有洞见的对话提供了广泛的知识。经过严格的测试,包括超过 1,000 小时的红队测试和标注,确保了性能和安全性,使其成为 AI 驱动对话的可靠选择。

AWS Llama 2 模型页面Amazon Bedrock 用户指南 包含有关如何使用 AWS 托管模型的详细信息。

先决条件

请参阅 Spring AI 在 Amazon Bedrock 上的文档 以设置 API 访问。

添加仓库和 BOM

Spring AI 构件发布在 Spring 里程碑和快照仓库中。请参阅 仓库 部分,将这些仓库添加到您的构建系统中。

为了帮助依赖管理,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'
}
请参阅Dependency Management部分,将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聊天客户端实现的属性前缀。

属性 描述 默认值

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]范围内,包括0.0和1.0。值越接近1.0,生成的响应就越多样化,而值越接近0.0,模型生成的响应通常就越不令人惊讶。此值指定后端在调用模型时使用的默认值。

0.7

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

在采样时要考虑的令牌的最大累积概率。模型使用组合的Top-k和nucleus采样。Nucleus采样考虑概率总和至少为topP的最小令牌集。

AWS Bedrock默认值

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

指定生成响应中要使用的最大令牌数。一旦生成的文本超过maxGenLen,模型就会截断响应。

300

查看Llama2ChatBedrockApi#Llama2ChatModel获取其他模型ID。另一个支持的值是meta.llama2-13b-chat-v1。模型ID值也可以在AWS Bedrock文档中的基本模型ID中找到。

所有以spring.ai.bedrock.llama2.chat.options为前缀的属性都可以通过在Prompt调用中添加特定于请求的聊天选项来在运行时进行覆盖。

聊天选项

BedrockLlama2ChatOptions.java 提供模型配置,例如温度、topK、topP等。

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

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

ChatResponse response = chatClient.call(
    new Prompt(
        "生成5位著名海盗的名字。",
        BedrockLlama2ChatOptions.builder()
            .withTemperature(0.4)
        .build()
    ));
除了模型特定的BedrockLlama2ChatOptions,您还可以使用一个可移植的ChatOptions实例,该实例是通过ChatOptionsBuilder#builder()创建的。

示例控制器(自动配置)

创建一个新的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
用您的AWS凭据替换regionsaccess-keysecret-key

这将创建一个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);
    }
}

手动配置

BedrockLlama2ChatClient 实现了 ChatClientStreamingChatClient 接口,并使用 Low-level Llama2ChatBedrockApi Client 连接 Bedrock Anthropid 服务。

将依赖项 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'
}
请参考 Dependency Management 章节来将 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("生成 5 个著名海盗的名字。"));

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

Low-level Llama2ChatBedrockApi 客户端

Llama2ChatBedrockApi 提供了一个轻量级的 Java 客户端,用于访问 AWS Bedrock Meta Llama 2 和 Llama 2 Chat 模型

以下类图演示了 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("你好,我叫")
		.withTemperature(0.9f)
		.withTopP(0.9f)
		.withMaxGenLen(20)
		.build();

Llama2ChatResponse response = llama2ChatApi.chatCompletion(request);

// 流式响应
Flux<Llama2ChatResponse> responseStream = llama2ChatApi.chatCompletionStream(request);
List<Llama2ChatResponse> responses = responseStream.collectList().block();

请参考 Llama2ChatBedrockApi.java 的 JavaDoc 获取更多信息。