Cohere 嵌入
提供 Bedrock Cohere 嵌入模型。将生成式 AI 能力集成到关键应用和工作流中,从而改善业务成果。
AWS Bedrock Cohere 模型页面 和 Amazon Bedrock 用户指南 包含关于如何使用 AWS 托管模型的详细信息。
先决条件
请参考 Spring AI 关于 Amazon Bedrock 的文档 了解如何设置 API 访问。
添加仓库和 BOM
Spring AI 构件发布在 Maven Central 和 Spring Snapshot 仓库中。请参见 Artifact Repositories 部分,将这些仓库添加到您的构建系统中。
为了辅助依赖管理,Spring AI 提供了一份 BOM(物料清单),以确保整个项目中 Spring AI 的版本保持一致。请参考 Dependency Management 章节,将 Spring AI BOM 添加到你的构建系统中。
自动配置
Spring AI 的自动配置和 starter 模块的 artifact 名称发生了重大变更。有关更多信息,请参阅 升级说明。
在项目的 Maven pom.xml 文件中添加 spring-ai-starter-model-bedrock 依赖:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-bedrock</artifactId>
</dependency>
或你的 Gradle build.gradle 构建文件。
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-bedrock'
}
请参见 依赖管理 部分,以在您的构建文件中添加 Spring AI BOM。
启用 Cohere Embedding 支持
默认情况下,Cohere 嵌入模型处于禁用状态。要启用它,请在应用程序配置中将 spring.ai.model.embedding 属性设置为 bedrock-cohere:
spring.ai.model.embedding=bedrock-cohere
或者,您可以使用 Spring 表达式语言 (SpEL) 来引用环境变量:
# In application.yml
spring:
ai:
model:
embedding: ${AI_MODEL_EMBEDDING}
# In your environment or .env file
export AI_MODEL_EMBEDDING=bedrock-cohere
也可以在启动应用程序时,使用 Java 系统属性来设置此属性:
java -Dspring.ai.model.embedding=bedrock-cohere -jar your-application.jar
嵌入属性
前缀 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.aws.profile.name | AWS profile 名称。 | - |
| spring.ai.bedrock.aws.profile.credentials-path | AWS 凭证文件路径。 | - |
| spring.ai.bedrock.aws.profile.configuration-path | AWS 配置文件路径。 | - |
嵌入模型的自动配置启用和禁用现在通过前缀为 spring.ai.model.embedding 的顶层属性进行配置。
启用方式:spring.ai.model.embedding=bedrock-cohere(默认已启用)
禁用方式:spring.ai.model.embedding=none(或任何不匹配 bedrock-cohere 的值)
此项变更旨在支持多个模型的配置。
前缀 spring.ai.bedrock.cohere.embedding(定义于 BedrockCohereEmbeddingProperties)是用于配置 Cohere 嵌入模型实现的属性前缀。
| 属性 | 描述 | 默认值 |
|---|---|---|
| spring.ai.model.embedding | 启用或禁用对 Cohere 的支持 | bedrock-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.input-type | 预置特殊标记以区分不同类型的输入。除搜索和检索中混合使用类型的情况外,不应混合不同类型的输入。在此情况下,请针对语料库使用 search_document 类型进行嵌入,并使用 search_query 类型对查询进行嵌入。 | SEARCH_DOCUMENT |
| spring.ai.bedrock.cohere.embedding.truncate | 指定 API 如何处理超过最大 token 长度的输入。如果指定 LEFT 或 RIGHT,模型将丢弃输入,直到剩余输入恰好达到模型的最大输入 token 长度。 | NONE |
通过 Amazon Bedrock 访问 Cohere 时,无法使用截断(truncating)功能。这是 Amazon Bedrock 的问题。Spring AI 类 BedrockCohereEmbeddingModel 会截断至 2048 个字符长度,这是该模型支持的最大长度。
参阅 CohereEmbeddingModel 以获取其他模型 ID。支持的值为:cohere.embed-multilingual-v3 和 cohere.embed-english-v3。模型 ID 值也可以在 AWS Bedrock 基础模型 ID 文档 中找到。
所有以 spring.ai.bedrock.cohere.embedding 为前缀的属性,都可以在运行时通过向 EmbeddingRequest 调用中添加请求特定的 运行时选项 进行覆盖。
运行时选项
BedrockCohereEmbeddingOptions.java 提供了模型配置,例如 input-type 或 truncate。
启动时,默认选项可以通过 BedrockCohereEmbeddingModel(api, options) 构造函数或 spring.ai.bedrock.cohere.embedding.* 属性进行配置。
在运行时,您可以通过向 EmbeddingRequest 调用添加新的、针对特定请求的选项来覆盖默认选项。例如,要为某个特定请求覆盖默认的输入类型:
EmbeddingResponse embeddingResponse = embeddingModel.call(
new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
BedrockCohereEmbeddingOptions.builder()
.inputType(InputType.SEARCH_DOCUMENT)
.build()));
示例控制器
在 Spring Initializr 中创建一个新的 Spring Boot 项目,并将 spring-ai-starter-model-bedrock 添加到你的 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.model.embedding=bedrock-cohere
spring.ai.bedrock.cohere.embedding.input-type=search-document
请将 regions、access-key 和 secret-key 替换为你的 AWS 凭据。
这将创建一个 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'
}
请参阅 Dependency Management 部分,以将 Spring AI BOM 添加到您的构建文件中。
接下来,创建一个 BedrockCohereEmbeddingModel,并将其用于文本嵌入:
var cohereEmbeddingApi =new CohereEmbeddingBedrockApi(
CohereEmbeddingModel.COHERE_EMBED_MULTILINGUAL_V1.id(),
EnvironmentVariableCredentialsProvider.create(), Region.US_EAST_1.id(), new JsonMapper());
var embeddingModel = new BedrockCohereEmbeddingModel(this.cohereEmbeddingApi);
EmbeddingResponse embeddingResponse = this.embeddingModel
.embedForResponse(List.of("Hello World", "World is big and salvation is near"));
底层 CohereEmbeddingBedrockApi 客户端
CohereEmbeddingBedrockApi 提供的是基于 AWS Bedrock Cohere Command models 的轻量级 Java 客户端。
以下类图展示了 CohereEmbeddingBedrockApi 接口及其构建模块:

CohereEmbeddingBedrockApi 支持 cohere.embed-english-v3 和 cohere.embed-multilingual-v3 模型,用于单条及批量嵌入计算。
以下是一个简单的代码片段,演示如何通过编程方式使用 API:
CohereEmbeddingBedrockApi api = new CohereEmbeddingBedrockApi(
CohereEmbeddingModel.COHERE_EMBED_MULTILINGUAL_V1.id(),
EnvironmentVariableCredentialsProvider.create(),
Region.US_EAST_1.id(), new JsonMapper());
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 = this.api.embedding(this.request);