2026/2/23 8:20:21
网站建设
项目流程
大连建设网站便民服务,9 12米农村自建房设计图,阳江公司做网站,高端网站建设公司好吗一、Transformers (ONNX) 嵌入
TransformersEmbeddingModel 是一个 EmbeddingModel 实现#xff0c;它使用选定的 句子转换器 在本地计算 句子嵌入。
您可以使用任何 HuggingFace 嵌入模型。
它使用 预训练 的 Transformer 模型#xff0c;这些模型已序列化为 开放神经网络…一、Transformers (ONNX) 嵌入TransformersEmbeddingModel 是一个 EmbeddingModel 实现它使用选定的 句子转换器 在本地计算 句子嵌入。您可以使用任何 HuggingFace 嵌入模型。它使用 预训练 的 Transformer 模型这些模型已序列化为 开放神经网络交换ONNX 格式。应用 Deep Java Library 和 Microsoft ONNX Java 运行时库来运行 ONNX 模型并在 Java 中计算嵌入。二、先决条件要在 Java 中运行我们需要将分词器和 Transformer 模型序列化为 ONNX 格式。使用 optimum-cli 序列化 - 一种快速实现此目的的方法是使用 optimum-cli 命令行工具。以下代码片段准备了一个 Python 虚拟环境安装所需的包并使用 optimum-cli 序列化例如导出指定的模型python3 -m venv venvsource./venv/bin/activate(venv)pipinstall--upgrade pip(venv)pipinstalloptimum onnx onnxruntime sentence-transformers(venv)optimum-cliexportonnx --model sentence-transformers/all-MiniLM-L6-v2 onnx-output-folder该代码片段将 sentence-transformers/all-MiniLM-L6-v2 转换器导出到 onnx-output-folder 文件夹中。后者包含嵌入模型使用的 tokenizer.json 和 model.onnx 文件。您可以选择任何 HuggingFace 转换器标识符或直接提供文件路径来替代 all-MiniLM-L6-v2。三、自动配置Spring AI 的自动配置和 starter 模块的工件名称发生了重大变化。更多信息请参阅 升级说明。Spring AI 为 ONNX Transformer 嵌入模型提供了 Spring Boot 自动配置。要启用它请将以下依赖项添加到项目的 Maven pom.xml 文件中dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-transformers/artifactId/dependency或添加到您的 Gradle build.gradle 构建文件中dependencies{implementationorg.springframework.ai:spring-ai-starter-model-transformers}请参阅 依赖管理 部分将 Spring AI BOM 添加到您的构建文件中。请参阅 工件仓库 部分将这些仓库添加到您的构建系统中。要配置它请使用 spring.ai.embedding.transformer.* 属性。例如将此添加到您的 application.properties 文件中以使用 intfloat/e5-small-v2 文本嵌入模型配置客户端spring.ai.embedding.transformer.onnx.modelUrihttps://huggingface.co/intfloat/e5-small-v2/resolve/main/model.onnx spring.ai.embedding.transformer.tokenizer.urihttps://huggingface.co/intfloat/e5-small-v2/raw/main/tokenizer.json支持的完整属性列表如下3.1 嵌入属性嵌入自动配置的启用和禁用现在通过顶级属性 spring.ai.model.embedding 前缀进行配置。要启用spring.ai.model.embeddingtransformers默认启用要禁用spring.ai.model.embeddingnone或任何与 transformers 不匹配的值进行此更改是为了允许配置多个模型。3.2 错误和特殊情况如果看到类似 Caused by: ai.onnxruntime.OrtException: Supplied array is ragged,… 的错误您还需要在 application.properties 中启用分词器填充如下所示spring.ai.embedding.transformer.tokenizer.options.paddingtrue如果出现类似 The generative output names don’t contain expected: last_hidden_state. Consider one of the available model outputs: token_embeddings, …. 的错误您需要根据您的模型将模型输出名称设置为正确的值。请考虑错误消息中列出的名称。例如spring.ai.embedding.transformer.onnx.modelOutputNametoken_embeddings如果出现类似 ai.onnxruntime.OrtException: Error code - ORT_FAIL - message: Deserialize tensor onnx::MatMul_10319 failed.GetFileLength for ./model.onnx_data failed:Invalid fd was supplied: -1 的错误这意味着您的模型大于 2GB并被序列化为两个文件model.onnx 和 model.onnx_data。model.onnx_data 称为外部数据应位于与 model.onnx 相同的目录下。目前唯一的解决方法是将大型的 model.onnx_data 复制到运行 Boot 应用程序的文件夹中。如果出现类似 ai.onnxruntime.OrtException: Error code - ORT_EP_FAIL - message: Failed to find CUDA shared provider 的错误这意味着您正在使用 GPU 参数spring.ai.embedding.transformer.onnx.gpuDeviceId但缺少 onnxruntime_gpu 依赖项。dependencygroupIdcom.microsoft.onnxruntime/groupIdartifactIdonnxruntime_gpu/artifactId/dependency请根据 CUDA 版本选择适当的 onnxruntime_gpu 版本ONNX Java 运行时。四、手动配置如果不使用 Spring Boot您可以手动配置 Onnx Transformers 嵌入模型。为此请将 spring-ai-transformers 依赖项添加到项目的 Maven pom.xml 文件中dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-transformers/artifactId/dependency请参阅 依赖管理 部分将 Spring AI BOM 添加到您的构建文件中。然后创建一个新的 TransformersEmbeddingModel 实例并使用 setTokenizerResource(tokenizerJsonUri) 和 setModelResource(modelOnnxUri) 方法设置导出的 tokenizer.json 和 model.onnx 文件的 URI。支持 classpath:、file: 或 https: URI 模式。如果未显式设置模型TransformersEmbeddingModel 默认使用 sentence-transformers/all-MiniLM-L6-v2以下代码片段说明了如何手动使用 TransformersEmbeddingModelTransformersEmbeddingModelembeddingModelnewTransformersEmbeddingModel();// 可选默认为 classpath:/onnx/all-MiniLM-L6-v2/tokenizer.jsonembeddingModel.setTokenizerResource(classpath:/onnx/all-MiniLM-L6-v2/tokenizer.json);// 可选默认为 classpath:/onnx/all-MiniLM-L6-v2/model.onnxembeddingModel.setModelResource(classpath:/onnx/all-MiniLM-L6-v2/model.onnx);// 可选默认为 ${java.io.tmpdir}/spring-ai-onnx-model// 默认只缓存 http/https 资源。embeddingModel.setResourceCacheDirectory(/tmp/onnx-zoo);// 可选如果看到类似 ai.onnxruntime.OrtException: Supplied array is ragged, ... 的错误请设置分词器填充embeddingModel.setTokenizerOptions(Map.of(padding,true));embeddingModel.afterPropertiesSet();ListListDoubleembeddingsthis.embeddingModel.embed(List.of(Hello world,World is big));如果手动创建 TransformersEmbeddingModel 实例则必须在设置属性之后、使用客户端之前调用 afterPropertiesSet() 方法。第一次 embed() 调用会下载大型 ONNX 模型并将其缓存在本地文件系统中。因此第一次调用可能比平时花费更长的时间。使用 #setResourceCacheDirectory() 方法设置存储 ONNX 模型的本地文件夹。默认缓存文件夹是 ${java.io.tmpdir}/spring-ai-onnx-model。将 TransformersEmbeddingModel 创建为 Bean 更为方便且推荐。这样您就不必手动调用 afterPropertiesSet()。BeanpublicEmbeddingModelembeddingModel(){returnnewTransformersEmbeddingModel();}