提供基石Cohere聊天客户端。将生成式AI能力整合到提升业务成果的关键应用程序和工作流程中。

AWS Bedrock Cohere模型页面和Amazon Bedrock用户指南包含了如何使用AWS托管模型的详细信息。

先决条件

请参考亚马逊Bedrock上的Spring AI文档以设置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'
}
Tip
参考依赖管理部分,将Spring AI BOM添加到您的构建文件中。

启用Cohere聊天支持

默认情况下,Cohere模型是禁用的。要启用它,请将`spring.ai.bedrock.cohere.chat.enabled`属性设置为`true`。导出环境变量是设置此配置属性的一种方式:

export SPRING_AI_BEDROCK_COHERE_CHAT_ENABLED=true

聊天属性

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

Property

Description

Default

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.cohere.chat 是用来配置 Cohere 聊天客户端实现的属性前缀。

属性

描述

默认值

------------------------------------------

---------------------------------------------------------------------

-------------

spring.ai.bedrock.cohere.chat.enabled

启用或禁用对Cohere的支持

false

spring.ai.bedrock.cohere.chat.model

使用的模型id。参见https://github.com/spring-projects/spring-ai/blob/4ba9a3cd689b9fd3a3805f540debe398a079c6ef/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/api/CohereChatBedrockApi.java#L326C14-L326C29[CohereChatModel]了解支持的模型。

cohere.command-text-v14

spring.ai.bedrock.cohere.chat.options.temperature

控制输出的随机性。值范围可以是[0.0,1.0]

0.7

spring.ai.bedrock.cohere.chat.options.topP

在采样时考虑的最高累积概率。

AWS Bedrock默认值

spring.ai.bedrock.cohere.chat.options.topK

指定模型生成下一个词元时使用的选项数量。

AWS Bedrock默认值

spring.ai.bedrock.cohere.chat.options.maxTokens

指定生成响应中使用的最大词元数量。

AWS Bedrock默认值

spring.ai.bedrock.cohere.chat.options.stopSequences

配置模型识别的最多四个序列。

AWS Bedrock默认值

spring.ai.bedrock.cohere.chat.options.returnLikelihoods

返回的响应中包含了词元可能性。

AWS Bedrock默认值

spring.ai.bedrock.cohere.chat.options.numGenerations

模型应返回的最大生成次数。

AWS Bedrock默认值

spring.ai.bedrock.cohere.chat.options.logitBias

防止模型产生不想要的词元或者激励模型包含特定的词元。

AWS Bedrock默认值

spring.ai.bedrock.cohere.chat.options.truncate

指定API处理超过最大词元长度的输入的方式。

AWS Bedrock默认值

查看https://github.com/spring-projects/spring-ai/blob/4ba9a3cd689b9fd3a3805f540debe398a079c6ef/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/api/CohereChatBedrockApi.java#L326C14-L326C29[CohereChatModel]了解其他模型ID。支持的值包括:cohere.command-light-text-v14`和`cohere.command-text-v14。模型ID的值也可以在https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids-arns.html[AWS Bedrock文档中的基础模型ID]找到。

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

运行时选项

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

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

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

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

样本控制器

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

在`src/main/resources`目录下添加一个`application.properties`文件,以启用和配置Cohere 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.cohere.chat.enabled=true
spring.ai.bedrock.cohere.chat.options.temperature=0.8
Tip
regionsaccess-keysecret-key 替换成你的 AWS 凭证。

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

@RestController
public class ChatController {

private final BedrockCohereChatClient chatClient;

@Autowired
public ChatController(BedrockCohereChatClient 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 BedrockCohereChatClient实现了`ChatClient`和`StreamingChatClient`,并使用[low-level-api]连接到Bedrock Cohere服务。

将`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添加到您的构建文件中。
CohereChatBedrockApi api = new CohereChatBedrockApi(CohereChatModel.COHERE_COMMAND_V14.id(),
		EnvironmentVariableCredentialsProvider.create(), Region.US_EAST_1.id(), new ObjectMapper());

BedrockCohereChatClient chatClient = new BedrockCohereChatClient(api,
	    BedrockCohereChatOptions.builder()
					.withTemperature(0.6f)
					.withTopK(10)
					.withTopP(0.5f)
					.withMaxTokens(678)
					.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."));

低级别CohereChatBedrockApi客户端

以下类图演示了CohereChatBedrockApi接口和构建块:

bedrock cohere chat low level api

CohereChatBedrockApi支持`cohere.command-light-text-v14`和`cohere.command-text-v14`模型,用于同步(例如`chatCompletion())和流式(例如`chatCompletionStream())请求。

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

CohereChatBedrockApi cohereChatApi = new CohereChatBedrockApi(
	CohereChatModel.COHERE_COMMAND_V14.id(),
	Region.US_EAST_1.id());

var request = CohereChatRequest
	.builder("What is the capital of Bulgaria and what is the size? What it the national anthem?")
	.withStream(false)
	.withTemperature(0.5f)
	.withTopP(0.8f)
	.withTopK(15)
	.withMaxTokens(100)
	.withStopSequences(List.of("END"))
	.withReturnLikelihoods(CohereChatRequest.ReturnLikelihoods.ALL)
	.withNumGenerations(3)
	.withLogitBias(null)
	.withTruncate(Truncate.NONE)
	.build();

CohereChatResponse response = cohereChatApi.chatCompletion(request);

var request = CohereChatRequest
	.builder("What is the capital of Bulgaria and what is the size? What it the national anthem?")
	.withStream(true)
	.withTemperature(0.5f)
	.withTopP(0.8f)
	.withTopK(15)
	.withMaxTokens(100)
	.withStopSequences(List.of("END"))
	.withReturnLikelihoods(CohereChatRequest.ReturnLikelihoods.ALL)
	.withNumGenerations(3)
	.withLogitBias(null)
	.withTruncate(Truncate.NONE)
	.build();

Flux<CohereChatResponse.Generation> responseStream = cohereChatApi.chatCompletionStream(request);
List<CohereChatResponse.Generation> responses = responseStream.collectList().block();