‌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文件:

XML 复制代码
<dependency>
   <groupId>org.springframework.ai</groupId>
   <artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>

聊天模型API

对于Spring AI来说,springAI为聊天模型定义了统一的ChatModel接口。接口同上一节,这里就不再赘述了。

属性信息

前缀spring.ai.ollama是用于配置与 Ollama 的连接的属性前缀。它可以分为基本属性与聊天属性。

基本属性

Ollama服务的url是基本属性之一(至于其它基本属性会在后面讨论):

java 复制代码
# 运行 Ollama API 服务器的URL。	
spring.ai.ollama.base-url=localhost:11434

可以直接访问这个地址:localhost:11434

聊天属性

以下是 Ollama 聊天模型的高级请求参数:

|------------------------------------------|--------------------------------------------------------------------------------------------|--------|
| 属性 | 描述 | 默认值 |
| spring.ai.model.chat | 启用 Ollama 聊天模型。 | Ollama |
| spring.ai.ollama.chat.options.model | 要使用的受支持模型的名称。 | 米斯特拉尔 |
| spring.ai.ollama.chat.options.format | 返回响应的格式。目前,唯一接受的值是json | - |
| spring.ai.ollama.chat.options.keep_alive | 控制模型在请求后加载到内存中的时间 | 5 分钟 |

还有一些可选的参数可以设置,因为比较多这里就不列出,有需要的可以查看:聊天属性

模型调用

可以在上个例子中调整配置,或者新建一个测试项目。这里主要看看配置信息,这里主要需要3个基本属性application.properties:

java 复制代码
spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        options:
          model: qwen3.5:0.8b
          temperature: 0.7

Controller代码同上

java 复制代码
@RestController
public class ChatController {

    private final OllamaChatModel chatModel;

    @Autowired
    public ChatController(OllamaChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map<String,String> generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", this.chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
	public Flux<ChatResponse> 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):从不自动拉取模型

由于下载模型时可能会延迟,因此不建议在生产环境中使用自动拉取。相反,请考虑提前评估和预下载必要的模型。

通过配置属性和默认选项定义的所有模型都可以在启动时自动拉取。 可以使用配置属性配置拉取策略、超时和最大重试次数:

java 复制代码
spring:
  ai:
    ollama:
      init:
        pull-model-strategy: always
        timeout: 60s
        max-retries: 1

这里找个小参数模型来试试:kimi-k2.7-code:cloud。

重启一下应用,会打印出以下日志:会发现主动去拉取对应的模型

java 复制代码
2026-06-13T23:38:40.609+08: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.028+08: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.037+08: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.038+08: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.039+08: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.040+08: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.139+08: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.858+08: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这个应用本身的一些相关特性进行学习

相关推荐
阿洛学长38 分钟前
Cursor下载安装使用教程(最新详细图文)
人工智能·gpt·深度学习·ai·ai编程
longxibo1 小时前
《DeepSeek 源码分析及企业应用实践》--前言
人工智能·aigc·ai编程
utmhikari4 小时前
【日常随笔】深入回答纯Vibe Coding写后端项目的几个问题
后端·ai编程·vibecoding
ZzT4 小时前
各大 AI 的系统提示词被扒光了,我从里面学到了写指令的功夫
ai编程·claude
gauch5 小时前
大模型如何生成回答:token、上下文递增与 temperature=0 的不稳定性
openai·ai编程
AI-好学者6 小时前
RAG知识点_3_高级实践
人工智能·ai·架构·langchain·ai编程
老程序猿7 小时前
一个撇号里,藏得下 3 个 bit——system prompt 隐写手法拆解
ai编程·claude
Elcker8 小时前
KoiWeave-架构设计
人工智能·ai编程