天津网站建设招聘网站建设公司是怎么找客户
一、嵌入模型 (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;}}
– 求知若饥,虚心若愚。