‌AI系列2:Spring AI调用本地模型 传送门PyCharm无法识别LangChain库的问题Spring AI从Token说起最近火起来的不止有大模型还有伴随着大模型的Token。对于Token是什么简而言之在大型语言模型LLM中Token是模型处理文本时的最小基本单位。Token不仅仅是一个技术概念还是各个大模型厂商的计费单位与能力限制计费单位调用 OpenAI (如 GPT-4)、Claude 等商业 API 时费用是按处理的总 Token 数计算的输入 Token 输出 Token能力限制模型都有一个“上下文窗口”Context Window比如 4096 或 128k Token。这限制了模型一次能处理的文本总长度你的输入 模型输出在前面通过Spring AI调用了国内大模型Deepseek​但是随着使用过程中提问越来越多消耗的Token的也越多免费的额度很快就用完了。​所以如果基于学习的需要可以搭建本地模型来避免这个问题。通过Ollama搭建本地模型Ollama是什么Ollama的官方地址是Ollama。看看Ollama的官方介绍Ollama是快速上手使用大型语言模型如 gpt-oss、Gemma 4、DeepSeek-R1、Qwen3 等的最简单方法。这既是它的定位也是它的目标通过Ollama可以在本地电脑上运行和管理大模型Ollama是一个开源、轻量级的工具它极大地简化了在本地电脑上运行和管理大型语言模型LLM即Large Language Model如DeepSeek、Llama等的过程Ollama安装Ollama的下载地址Download Ollama on Windows如果是window可以直接下载进行安装​安装也比较简单安装好之后成功界面如下​模型安装初次使用Ollama的时候要先进行模型下载Ollama​比如在这个界面搜索qwen模型可以根据电脑的配置选择不同步参数的模型​​复制对应的命令到cmd窗口执行一下ollama run qwen3.5就开始下载了​成功之后会在Ollama上面显示对应的模型选择就可以进行对话了​Spring AI集成Ollama前提条件当然就是要安装Ollama以及下载对应的模型这样就没有Token焦虑了。依赖管理Spring AI 为Ollama聊天集成提供了Spring Boot自动配置。 要启用它请将以下依赖项添加到项目的Maven中pom.xml文件dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-ollama/artifactId /dependency聊天模型API对于Spring AI来说springAI为聊天模型定义了统一的ChatModel接口。接口同上一节这里就不再赘述了。属性信息前缀spring.ai.ollama是用于配置与 Ollama 的连接的属性前缀。它可以分为基本属性与聊天属性。基本属性Ollama服务的url是基本属性之一至于其它基本属性会在后面讨论# 运行 Ollama API 服务器的URL。 spring.ai.ollama.base-urllocalhost:11434可以直接访问这个地址localhost:11434聊天属性以下是 Ollama 聊天模型的高级请求参数属性描述默认值spring.ai.model.chat启用 Ollama 聊天模型。Ollamaspring.ai.ollama.chat.options.model要使用的受支持模型的名称。米斯特拉尔spring.ai.ollama.chat.options.format返回响应的格式。目前唯一接受的值是json-spring.ai.ollama.chat.options.keep_alive控制模型在请求后加载到内存中的时间5 分钟还有一些可选的参数可以设置因为比较多这里就不列出有需要的可以查看聊天属性模型调用可以在上个例子中调整配置或者新建一个测试项目。这里主要看看配置信息这里主要需要3个基本属性application.propertiesspring: ai: ollama: base-url: http://localhost:11434 chat: options: model: qwen3.5:0.8b temperature: 0.7Controller代码同上RestController public class ChatController { private final OllamaChatModel chatModel; Autowired public ChatController(OllamaChatModel chatModel) { this.chatModel chatModel; } GetMapping(/ai/generate) public MapString,String generate(RequestParam(value message, defaultValue Tell me a joke) String message) { return Map.of(generation, this.chatModel.call(message)); } GetMapping(/ai/generateStream) public FluxChatResponse generateStream(RequestParam(value message, defaultValue Tell me a joke) String message) { Prompt prompt new Prompt(new UserMessage(message)); return this.chatModel.stream(prompt); } }测试qwen模型把项目启动起来发起一个请求http://localhost:8080/ai/generate?message你是谁呀自动拉取模型前面介绍基本属性时说到了Ollama的基本属性之一url这是因为Ollama的基本属性配置还有关于自动拉取模型的。官方上是这样定义这个属性的Spring AI Ollama 可以在模型在 Ollama 实例中不可用时自动拉取模型。 此功能对于开发和测试以及将应用程序部署到新环境特别有用。拉取模型有三种策略always在PullModelStrategy.ALWAYS始终拉取模型即使它已经可用。有助于确保您使用的是最新版本的模型when_missing在PullModelStrategy.WHEN_MISSING仅当模型尚不可用时才提取模型。这可能会导致使用旧版本的模型never在PullModelStrategy.NEVER从不自动拉取模型由于下载模型时可能会延迟因此不建议在生产环境中使用自动拉取。相反请考虑提前评估和预下载必要的模型。通过配置属性和默认选项定义的所有模型都可以在启动时自动拉取。 可以使用配置属性配置拉取策略、超时和最大重试次数spring: ai: ollama: init: pull-model-strategy: always timeout: 60s max-retries: 1这里找个小参数模型来试试kimi-k2.7-code:cloud。重启一下应用会打印出以下日志会发现主动去拉取对应的模型2026-06-13T23:38:40.60908:00 INFO 10052 --- [spring-ai-starter-model-ollama] [ient-2-Worker-0] o.s.a.o.management.OllamaModelManager : Pulling the kimi-k2.7-code:cloud model - Status: pulling manifest 2026-06-13T23:38:43.02808:00 INFO 10052 --- [spring-ai-starter-model-ollama] [ient-2-Worker-0] o.s.a.o.management.OllamaModelManager : Pulling the kimi-k2.7-code:cloud model - Status: pulling c49aea1df6fc 2026-06-13T23:38:43.03708:00 INFO 10052 --- [spring-ai-starter-model-ollama] [ient-2-Worker-0] o.s.a.o.management.OllamaModelManager : Pulling the kimi-k2.7-code:cloud model - Status: verifying sha256 digest 2026-06-13T23:38:43.03808:00 INFO 10052 --- [spring-ai-starter-model-ollama] [ient-2-Worker-0] o.s.a.o.management.OllamaModelManager : Pulling the kimi-k2.7-code:cloud model - Status: writing manifest 2026-06-13T23:38:43.03908:00 INFO 10052 --- [spring-ai-starter-model-ollama] [ient-2-Worker-0] o.s.a.o.management.OllamaModelManager : Pulling the kimi-k2.7-code:cloud model - Status: success 2026-06-13T23:38:43.04008:00 INFO 10052 --- [spring-ai-starter-model-ollama] [ main] o.s.a.o.management.OllamaModelManager : Completed pulling the kimi-k2.7-code:cloud model 2026-06-13T23:38:43.13908:00 INFO 10052 --- [spring-ai-starter-model-ollama] [ main] o.s.a.o.management.OllamaModelManager : Start pulling model: mxbai-embed-large 2026-06-13T23:38:44.85808:00 INFO 10052 --- [spring-ai-starter-model-ollama] [ient-2-Worker-0] o.s.a.o.management.OllamaModelManager : Pulling the mxbai-embed-large model - Status: pulling manifest写在最后至此就可以通过springAI实现了调用本地模型了这样既学习了通过Ollama部署本地模型又学习了Spring AI与Ollama的集成。下一节会讨论一下Ollama这个应用本身的一些相关特性进行学习