运行时选项
OllamaEmbeddingOptions.java提供了Ollama的配置,如要使用的模型、低级GPU和CPU调优等。
OllamaOptions类已被弃用。对于聊天模型,请使用OllamaChatOptions;对于嵌入模型,请使用OllamaEmbeddingOptions。新类提供了类型安全、特定于模型的配置选项。
默认选项也可以通过spring.ai.ollama.embedding.options属性进行配置。
在启动时,使用OllamaEmbeddingModel(OllamaApi ollamaApi, OllamaEmbeddingOptions defaultOptions)来配置所有嵌入请求所使用的默认选项。在运行时,您可以使用OllamaEmbeddingOptions实例作为EmbeddingRequest的一部分来覆盖默认选项。
例如,要为特定请求覆盖默认的模型名称:
EmbeddingResponseembeddingResponse= embeddingModel.call(newEmbeddingRequest(List.of("Hello World", "World is big and salvation is near"), OllamaEmbeddingOptions.builder() .model("Different-Embedding-Model-Deployment-Name")) .truncates(false) .build());
自动拉取模型
当您的Ollama实例中没有模型时,Spring AIOllama可以自动拉取模型。此功能对于开发和测试以及将应用程序部署到新环境特别有用。
您还可以按名称提取数千个免费的GGUF Hugging Face模型中的任何一个。
有三种策略可用于提取模型:
由于下载模型时可能存在延迟,因此不建议在生产环境中使用自动拉取功能。相反,应考虑提前评估并预下载必要的模型。
所有通过配置属性和默认选项定义的模型,在启动时都可以自动加载。您可以使用配置属性来配置加载策略、超时时间和最大重试次数:
spring:ai:ollama:init:pull-model-strategy: alwaystimeout: 60smax-retries: 1
只有在Ollama中所有指定的模型都可用后,应用程序才会完成初始化。根据模型的大小和互联网连接速度,这可能会显著减慢应用程序的启动时间。
您可以在启动时初始化其他模型,这对于在运行时动态使用的模型非常有用:
spring: ai: ollama:init: pull-model-strategy: always embedding: additional-models: - mxbai-embed-large - nomic-embed-text
如果您只想对特定类型的模型应用拉取策略,则可以将嵌入模型从初始化任务中排除:
spring: ai: ollama:init: pull-model-strategy: always embedding: include: false
此配置将对除嵌入模型外的所有模型应用拉取策略。
HuggingFace模型
Ollama可以即开即用地访问所有GGUF Hugging Face Embedding模型。您可以通过名称获取这些模型:ollama pull hf.co/<username>/<model-repository>,或者配置自动获取策略:自动获取模型:
spring.ai.ollama.embedding.options.model=hf.co/mixedbread-ai/mxbai-embed-large-v1spring.ai.ollama.init.pull-model-strategy=always
spring.ai.ollama.embedding.options.model:指定要使用的Hugging Face GGUF模型。
spring.ai.ollama.init.pull-model-strategy=always:(可选)启用启动时的自动模型拉取。对于生产环境,您应提前下载模型以避免延迟:ollama pull hf.co/mixedbread-ai/mxbai-embed-large-v1。
示例控制器
这将创建一个EmbeddingModel实现,你可以将其注入到你的类中。以下是一个使用EmbeddingModel实现的简单@Controller类的示例。
@RestControllerpublicclassEmbeddingController {privatefinal EmbeddingModel embeddingModel;@Autowiredpublic 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); }}
手动配置
如果你没有使用Spring Boot,可以手动配置OllamaEmbeddingModel。为此,请将spring-ai-ollama依赖项添加到项目的Maven pom.xml或Gradle build.gradle构建文件中:
Maven
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama</artifactId></dependency>
Gradle
dependencies {implementation'org.springframework.ai:spring-ai-ollama'}
接下来,创建一个OllamaEmbeddingModel实例,并使用专用的chroma/all-minilm-l6-v2-f32嵌入模型来计算两个输入文本的嵌入:
varollamaApi= OllamaApi.builder().build();varembeddingModel=newOllamaEmbeddingModel(this.ollamaApi, OllamaEmbeddingOptions.builder() .model(OllamaModel.MISTRAL.id()) .build());EmbeddingResponseembeddingResponse=this.embeddingModel.call(newEmbeddingRequest(List.of("Hello World", "World is big and salvation is near"), OllamaEmbeddingOptions.builder() .model("chroma/all-minilm-l6-v2-f32")) .truncate(false) .build());
OllamaEmbeddingOptions 为所有嵌入请求提供配置信息。