Cohere Chat

提供 Bedrock Cohere 对话客户端。
将生成式 AI 功能集成到重要的应用程序和工作流程中,以改善业务成果。

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'
}

启用 Cohere Chat

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

export SPRING_AI_BEDROCK_COHERE_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.anthropic.chat 前缀的属性,可让您配置 Claude Chat 客户端的实现。
属性 描述 默认值
spring.ai.bedrock.cohere.chat.enabled 启用或禁用对 Cohere 的支持 false
spring.ai.bedrock.cohere.chat.model 要使用的型号 ID。请参阅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 default
spring.ai.bedrock.cohere.chat.options.topK 指定模型用于生成下一个标记的标记选择数量 AWS Bedrock default
spring.ai.bedrock.cohere.chat.options.maxTokens 指定在生成的响应中使用的最大令牌数。 AWS Bedrock default
spring.ai.bedrock.cohere.chat.options.stopSequences 配置模型可识别的最多四个序列。 AWS Bedrock default
spring.ai.bedrock.cohere.chat.options.returnLikelihoods 标记可能性随响应一起返回。 AWS Bedrock default
spring.ai.bedrock.cohere.chat.options.numGenerations 模型应返回的最大代数。 AWS Bedrock default
spring.ai.bedrock.cohere.chat.options.logitBias 防止模型生成不需要的令牌或激励模型包含所需的令牌。 AWS Bedrock default
spring.ai.bedrock.cohere.chat.options.truncate 指定 API 如何处理长于最大令牌长度的输入 AWS Bedrock default

查看 CohereChatModel 以获取其他模型 ID。支持的值为:cohere.command-light-text-v14cohere.command-text-v14。模型 ID 值也可以在 AWS Bedrock 文档中找到基本模型 ID。

*提示: *所有 spring.ai.bedrock.cohere.chat.options 前缀的属性, 可以在运行期间通过添加特定请求参数到 Prompt 调用 实现覆盖.

聊天选项

BedrockCohereChatOptions 提供了模型配置,例如:temperature、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()
    ));

提示: 除了特定于模型的 BedrockCohereChatOptions 之外,您还可以使用通过 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.cohere.chat.enabled=true
spring.ai.bedrock.cohere.chat.options.temperature=0.8

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

手动配置

BedrockCohereChatClient 实现 ChatClientStreamingChatClient, 并使用 轻量级 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'
}

接下来, 创建一个 BedrockCohereChatClient 并将其用于文本生成:

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 提供了基于 AWS Bedrock Cohere Command 模型的轻量级Java 客户端。

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

CohereChatBedrockApi 支持 cohere.command-light-text-v14cohere.command-text-v14 模型的同步(e.g. chatCompletion())和流式 (e.g. 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();
作者:Jeebiz  创建时间:2024-04-05 23:39
最后编辑:Jeebiz  更新时间:2024-07-06 19:00