watsonx.ai 嵌入

使用Watsonx.ai,您可以运行各种大型语言模型 (LLM) 并从中生成嵌入。Spring AI 通过WatsonxAiEmbeddingModel支持Watsonx.ai文本嵌入。

嵌入是浮点数的向量(列表)。两个向量之间的距离衡量它们的关联性。较小的距离表示较高的关联性,较大的距离表示较低的关联性。

前提条件

您首先需要拥有watsonx.ai 的 SaaS 实例(以及 IBM Cloud 帐户)。

请参考免费试用免费试用 watsonx.ai

更多信息可以在这里找到这里

添加仓库和BOM

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

为了帮助进行依赖管理,Spring AI 提供了一个 BOM(物料清单),以确保在整个项目中使用一致版本的 Spring AI。请参考依赖管理部分,将 Spring AI BOM 添加到您的构建系统。

自动配置

Spring AI 为 Watsonx.ai 嵌入模型提供 Spring Boot 自动配置。要启用它,请将以下依赖项添加到您的 Maven pom.xml 文件

<dependency>
   <groupId>org.springframework.ai</groupId>
   <artifactId>spring-ai-watsonx-ai-spring-boot-starter</artifactId>
</dependency>

或您的 Gradle build.gradle 构建文件。

dependencies {
    implementation 'org.springframework.ai:spring-ai-watsonx-ai-spring-boot-starter'
}
请参考依赖管理部分,将 Spring AI BOM 添加到您的构建文件。

spring.ai.watsonx.embedding.options.* 属性用于配置所有嵌入请求使用的默认选项。

嵌入属性

前缀spring.ai.watsonx.ai用作属性前缀,允许您连接到watsonx.ai。

属性 描述 默认值

spring.ai.watsonx.ai.base-url

连接的URL

us-south.ml.cloud.ibm.com

spring.ai.watsonx.ai.embedding-endpoint

文本端点

ml/v1/text/embeddings?version=2023-05-29

spring.ai.watsonx.ai.project-id

项目ID

-

spring.ai.watsonx.ai.iam-token

IBM Cloud 帐户 IAM 令牌

-

前缀spring.ai.watsonx.embedding.options是配置Watsonx.ai的EmbeddingModel实现的属性前缀。

属性 描述 默认值

spring.ai.watsonx.ai.embedding.enabled

启用Watsonx.ai嵌入模型

true

spring.ai.watsonx.ai.embedding.options.model

要使用的嵌入模型

ibm/slate-30m-english-rtrvr

运行时选项

WatsonxAiEmbeddingOptions.java 提供了 Watsonx.ai 配置,例如要使用的模型。

也可以使用spring.ai.watsonx.embedding.options属性配置默认选项。

EmbeddingResponse embeddingResponse = embeddingModel.call(
    new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
        WatsonxAiEmbeddingOptions.create()
            .withModel("Different-Embedding-Model-Deployment-Name"))
);

示例控制器

这将创建一个您可以注入到类中的EmbeddingModel实现。这是一个使用EmbeddingModel实现的简单@Controller类的示例。

@RestController
public class EmbeddingController {

    private final EmbeddingModel embeddingModel;

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

    @GetMapping("/ai/embedding")
    public ResponseEntity<Embedding> embedding(@RequestParam String text) {
        EmbeddingResponse response = this.embeddingModel.embedForResponse(List.of(text));
        return ResponseEntity.ok(response.getResult());
    }
}