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 访问。
自动配置
将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凭据替换regions 、access-key 和secret-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 实现了 ChatClient
和 StreamingChatClient
接口,并使用 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 支持 meta.llama2-13b-chat-v1
和 meta.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 获取更多信息。