'''Meta的Llama 2聊天 是Llama 2大型语言模型系列的一部分。它在基于对话的应用程序中表现出色,参数规模从70亿到700亿不等。通过利用公共数据集和超过100万的人类注释,Llama聊天提供了有上下文意识的对话。'''
经过对公共数据来源中的2万亿个标记进行训练,Llama-2-Chat 提供了丰富的知识,用于深入的对话交流。通过严格的测试,包括超过1000小时的红队测试和注释,确保了其性能和安全性,使其成为人工智能对话的可靠选择。
'''AWS Llama 2 Model Page 和 Amazon Bedrock User Guide 包含了关于如何使用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'
}
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]。
|
运行时选项
The [BedrockLlama2ChatOptions.java](https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama2/BedrockLlama2ChatOptions.java) 提供了模型配置,例如温度、topK、topP等。
在启动时,可以使用 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
|
将 regions 、access-key 和 secret-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 支持 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("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获取更多信息。