Llama2 Chat

Meta’s 的 Llama 2 Llama 2 大型语言模型集合的一部分。它在基于对话的应用中表现出色,参数规模在 70 亿到 700 亿之间。 Llama Chat 利用公共数据集和超过 100 万条人工注释,提供上下文感知对话。

Llama-2-Chat 使用来自公共数据源的 2 万亿个代币进行训练,为富有洞察力的对话提供广泛的知识。经过严格的测试,包括超过 1,000 小时的红队和注释,确保了性能和安全性,使其成为人工智能驱动对话的可靠选择。

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

先决条件

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

添加存储库和 BOM

Spring AI 工件发布在 Spring MilestoneSnapshot 存储库中。请参阅存储库部分将这些存储库添加到您的构建系统中。

为了帮助进行依赖管理,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'
}

启用 Llama2 Chat

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

export SPRING_AI_BEDROCK_LLAMA2_CHAT_ENABLED=true

Chat 属性

spring.ai.bedrock.aws 前缀的属性,是用于配置与 AWS Bedrock 的连接。
属性 描述 默认值
spring.ai.bedrock.aws.region AWS region to use. us-east-1
spring.ai.bedrock.aws.access-key AWS access key. -
spring.ai.bedrock.aws.secret-key AWS secret key. -
spring.ai.bedrock.llama2.chat 前缀的属性,可让您配置 Llama2 Chat 客户端的实现。
属性 描述 默认值
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 和 Nucleus 采样。Nucleus 采样考虑概率和至少为 topP 的最小标记集。 AWS Bedrock default
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 提供了模型配置,例如 temperature、topK、topP 等。

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

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

On start-up, the default options can be configured with the BedrockLlama2ChatClient(api, options) constructor or the spring.ai.bedrock.llama2.chat.options.* properties.

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

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

提示: 除了特定于模型的 BedrockLlama2ChatOptions 之外,您还可以使用通过 ChatOptionsBuilder#builder() 创建的可移植 ChatOptions 实例。

Sample Controller (自动配置)

创建 一个新的 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

提示: 将 regions, access-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);
    }
}

手动配置

BedrockLlama2ChatClient 实现 ChatClientStreamingChatClient, 并使用 轻量级 Api 客户端连接到 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'
}

接下来, 创建一个 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."));

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

轻量级 Llama2ChatBedrockApi 客户端

Llama2ChatBedrockApi 提供了基于 AWS Bedrock 的 Meta Llama 2 和 Llama 2 Chat 模型的轻量级Java 客户端。

以下类图说明了 Llama2ChatBedrockApi 接口和构建块:

Llama2ChatBedrockApi 支持 meta.llama2-13b-chat-v1meta.llama2-70b-chat-v1 模型的同步(e.g. chatCompletion())和流式 (e.g. 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 以获取更多信息。

作者:Jeebiz  创建时间:2024-04-05 23:39
最后编辑:Jeebiz  更新时间:2024-07-06 19:00