当前位置: 首页 > news >正文

Spring AI Alibaba EmbeddingModel使用

一、嵌入模型 (Embedding Model)简介

1、核心概念

嵌入模型(EmbeddingModel)是嵌入过程中采用的模型。

当前 EmbeddingModel的接口主要用于将文本转换为数值向量,接口的设计主要围绕这两个目标展开:

  • 可移植性:
    • 该接口确保在各种嵌入模型之间的轻松适配。
    • 它允许开发者在不同的嵌入技术或模型之间切换,所需的代码更改最小化。
    • 这一设计与 Spring 模块化和互换性的理念一致。
  • 简单性:
    • 嵌入模型简化了文本转换为嵌入的过程。
    • 通过提供如 embed(String text)和 embed(Document document)这样简单的方法,它去除了处理原始文本数据和嵌入算法的复杂性。
    • 这个设计选择使开发者,尤其是那些初次接触 AI 的开发者,更容易在他们的应用程序中使用嵌入,而无需深入了解其底层机制。

嵌入(Embedding)的工作原理是将文本、图像和视频转换为称为向量(Vectors)的浮点数数组。
这些向量旨在捕捉文本、图像和视频的含义。
嵌入数组的长度称为向量的维度(Dimensionality)。

2、EmbeddingModel简介

EmbeddingModel API提供多种选项,将文本转换为Embeddings,支持单个字符串、结构化的Document对象或文本批处理。

有多种快捷方式可以获得文本Embeddings。例如:embed(String text)方法,它接受单个字符串并返回相应的 Embedding 向量。

EmbeddingModel所有方法都围绕着call方法实现,这是调用 EmbeddingModel的主要方法。

通常,Embedding返回一个float数组,以数值向量格式表示Embeddings。

  • embedForResponse方法:提供了更全面的输出,可能包括有关Embeddings的其他信息。
  • dimensions方法:是开发人员快速确定 Embedding 向量大小的便利工具,这对于理解 Embedding space 和后续处理步骤非常重要。

涉及的几个重要类:

  • EmbeddingRequest类:是一种ModelRequest,它接受文本对象列表和可选的Embedding请求选项。
  • EmbeddingResponse类:保存了AI模型的输出,其中每个 Embedding 实例包含来自单个文本输入的结果向量数据。同时,它还携带了有关 AI 模型响应的 EmbeddingResponseMetadata元数据。
  • Embedding类:表示一个 Embedding 向量。

二、嵌入模型 (Embedding Model)使用

Spring AI Alibaba 嵌入模型 (Embedding Model):https://java2ai.com/docs/1.0.0-M6.1/tutorials/embedding/

Spring AI Alibaba 支持以上 Model 抽象与通义系列模型的适配,并通过 spring-ai-alibaba-starter AutoConfiguration 自动初始化了默认实例,因此我们可以在应用程序中直接注入 ChatModel、ImageModel 等 bean,当然在需要的时候也可以自定义 Model 实例。

1、编写 Controller接口

示例需求:获取用户输入文本的数值向量Embeddings。

在普通 Controller Bean 中注入 EmbeddingModel 实例,并为 Prompt 指定函数,实现下面几个功能:

  • 简单调用
  • 流式调用
@Slf4j
@RestController
@RequestMapping("/dashscope/embedding-model")
public class DashScopeEmbeddingModelController {

    private final EmbeddingModel embeddingModel;

    /**
     * 使用如下的方式自动注入 EmbeddingModel
     *
     * @param embeddingModel
     */
    public DashScopeEmbeddingModelController(EmbeddingModel embeddingModel) {
        this.embeddingModel = embeddingModel;
    }


    /**
     * 简单调用
     */
    @GetMapping("/simple/chat")
    public Map simpleChat(@RequestParam(defaultValue = "西安未来5天天气状况") String userInputPrompt) {
        EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of(userInputPrompt));

        float[] aiOutput = embeddingResponse.getResult().getOutput();
        log.info("simpleChat --> userInputPrompt = {}, aiOutput = {}", userInputPrompt, aiOutput);

        return Map.of("embeddingResponse", embeddingResponse);
    }

    /**
     * 使用编程方式自定义 LLMs EmbeddingOptions 参数,
     * {@link com.alibaba.cloud.ai.dashscope.embedding.DashScopeEmbeddingOptions}
     * 优先级高于在 application.yml 中配置的 LLMs 参数!
     */
    @GetMapping("/customOptions/embedding")
    public float[] customOptionsEmbedding(@RequestParam(defaultValue = "西安未来5天天气状况") String userInputPrompt) {

        // 自定义 LLMs Options 参数
        DashScopeEmbeddingOptions customOptions = DashScopeEmbeddingOptions.builder()
                // 默认使用的是 text-embedding-v1模型
                .withModel("text-embedding-v2")
                .build();

        EmbeddingResponse embeddingResponse = embeddingModel.call(
                new EmbeddingRequest(List.of(userInputPrompt), customOptions)
        );

        Embedding embedding = embeddingResponse.getResult();
        float[] aiOutput = embedding.getOutput();
        log.info("simpleChat --> userInputPrompt = {}, aiOutput = {}", userInputPrompt, aiOutput);

        return aiOutput;
    }

}

在这里插入图片描述

– 求知若饥,虚心若愚。

相关文章:

  • 堆的常见应用2
  • MySQL中的内连接与外连接详解:基础与进阶应用
  • 函数:链式访问
  • 【操作系统】(五)操作系统引导(Boot)
  • Leetcode13-罗马数字转整数
  • Django框架指南:从入门到进阶
  • 【蓝桥杯】3月27日笔记
  • C++:无序关联容器
  • 修改 docker0 网卡配置的详细步骤
  • Baklib内容中台驱动AI技术融合创新
  • 无穿戴动作捕捉设备:无穿戴,无标记点摄像头智能捕捉人体姿态
  • 【Exception】MybatisPlusException: can not find lambda cache for this entity
  • 【JavaScript】七、函数
  • Spring集成Web环境搭建
  • 什么是LangChain,为什么我们选择使用LangChain,以及它的典型应用场景
  • HCIE-day15-L3VPN
  • 练习:求平方根
  • mysql数据恢复 深度扫描碎片 智能给出恢复建议并执行恢复操作
  • 【Python实用技巧】OS模块详解:文件与目录操作的瑞士军刀
  • 前端性能优化:深入解析哈希算法与TypeScript实践
  • 怎么做卖卷网站/如何进行网站推广
  • 代做设计网站好/友链交换有什么作用
  • 奥运会网页设计欣赏/seo联盟
  • 杭州做网站公司哪家好/郑州专业seo推荐
  • 国外做电商网站/电商线上推广渠道
  • 国外学校网站模板/今日重大事件