Cohere 嵌入

提供 Bedrock Cohere 嵌入客户端。将生成式 AI 功能集成到基本应用程序和工作流中,从而改善业务成果。

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

先决条件

请参阅 Spring AI 关于 Amazon Bedrock 的文档 以设置 API 访问权限。

添加存储库和 BOM

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

为了帮助进行依赖项管理,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'
}
参考 依赖项管理 部分,将 Spring AI BOM 添加到构建文件。

启用 Cohere 嵌入支持

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

export SPRING_AI_BEDROCK_COHERE_EMBEDDING_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.cohere.embedding(在 BedrockCohereEmbeddingProperties 中定义)是配置 Cohere 的嵌入模型实现的属性前缀。

属性

描述

默认值

spring.ai.bedrock.cohere.embedding.enabled

启用或禁用对 Cohere 的支持

false

spring.ai.bedrock.cohere.embedding.model

要使用的模型 ID。请参阅 CohereEmbeddingModel 以了解受支持的模型。

cohere.embed-multilingual-v3

spring.ai.bedrock.cohere.embedding.options.input-type

为每种类型添加特殊令牌,以将它们相互区分。您不应该将不同类型混合在一起,除非混合搜索和检索的类型。在这种情况下,使用 search_document 类型嵌入语料库,并使用 search_query 类型嵌入查询。

SEARCH_DOCUMENT

spring.ai.bedrock.cohere.embedding.options.truncate

指定 API 如何处理长度超过最大令牌长度的输入。如果您指定 LEFT 或 RIGHT,则模型会丢弃输入,直到剩余输入正好等于模型的最大输入令牌长度。

NONE

查看 CohereEmbeddingModel 以了解其他模型 ID。支持的值为:cohere.embed-multilingual-v3cohere.embed-english-v3。还可以在 AWS Bedrock 基本模型 ID 文档 中找到模型 ID 值。

所有以 spring.ai.bedrock.cohere.embedding.options 为前缀的属性都可以通过向 EmbeddingRequest 调用添加请求特定的 运行时选项 在运行时进行覆盖。

运行时选项

BedrockCohereEmbeddingOptions.java 提供模型配置,例如 input-typetruncate

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

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

EmbeddingResponse embeddingResponse = embeddingModel.call(
    new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
        BedrockCohereEmbeddingOptions.builder()
        	.withInputType(InputType.SEARCH_DOCUMENT)
        .build()));

示例控制器

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

src/main/resources 目录下添加一个 application.properties 文件,以启用和配置 Cohere Embedding 客户端

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.embedding.enabled=true
spring.ai.bedrock.cohere.embedding.options.input-type=search-document
用你的 AWS 凭证替换 regionsaccess-keysecret-key

这将创建一个 BedrockCohereEmbeddingModel 实现,你可以将其注入到你的类中。这是一个简单的 @Controller 类的示例,它使用聊天模型进行文本生成。

@RestController
public class EmbeddingController {

    private final EmbeddingModel embeddingModel;

    @Autowired
    public EmbeddingController(EmbeddingModel embeddingModel) {
        this.embeddingModel = embeddingModel;
    }

    @GetMapping("/ai/embedding")
    public Map embed(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of(message));
        return Map.of("embedding", embeddingResponse);
    }
}

手动配置

BedrockCohereEmbeddingModel 实现 EmbeddingModel,并使用 底层 CohereEmbeddingBedrockApi 客户端 连接到 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'
}
参考 依赖项管理 部分,将 Spring AI BOM 添加到构建文件。

接下来,创建一个 BedrockCohereEmbeddingModel,并将其用于文本嵌入

var cohereEmbeddingApi =new CohereEmbeddingBedrockApi(
		CohereEmbeddingModel.COHERE_EMBED_MULTILINGUAL_V1.id(),
		EnvironmentVariableCredentialsProvider.create(), Region.US_EAST_1.id(), new ObjectMapper());


var embeddingModel = new BedrockCohereEmbeddingModel(cohereEmbeddingApi);

EmbeddingResponse embeddingResponse = embeddingModel
	.embedForResponse(List.of("Hello World", "World is big and salvation is near"));

底层 CohereEmbeddingBedrockApi 客户端

CohereEmbeddingBedrockApi 是一个轻量级的 Java 客户端,基于 AWS Bedrock Cohere Command 模型

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

bedrock cohere embedding low level api

CohereEmbeddingBedrockApi 支持 cohere.embed-english-v3cohere.embed-multilingual-v3 模型,用于单次和批处理嵌入计算。

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

CohereEmbeddingBedrockApi api = new CohereEmbeddingBedrockApi(
		CohereEmbeddingModel.COHERE_EMBED_MULTILINGUAL_V1.id(),
		EnvironmentVariableCredentialsProvider.create(),
		Region.US_EAST_1.id(), new ObjectMapper());

CohereEmbeddingRequest request = new CohereEmbeddingRequest(
		List.of("I like to eat apples", "I like to eat oranges"),
		CohereEmbeddingRequest.InputType.search_document,
		CohereEmbeddingRequest.Truncate.NONE);

CohereEmbeddingResponse response = api.embedding(request);