‌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这个应用本身的一些相关特性进行学习

相关推荐
向量引擎1 小时前
AI API 正在进入“请求生命周期治理”阶段:从模型迁移、Agent 接入到成本与安全排错的工程化方法
java·人工智能·python·aigc·ai编程·ai写作·gpu算力
Doker 多克1 小时前
Spring AI Alibaba—快速构建ReactAgent
java·开发语言·前端·ai编程
Tangyuewei2 小时前
我用 AI 辅助开发了一个发型 App,然后打包成了 APK
android·人工智能·ai编程
zhengfei6112 小时前
第6章 Agent 评估、测试与生产最佳实践
ai编程
Nile2 小时前
解密Palantir系列二:4.Palantir Foundry:七问判断该不该上
人工智能·ai·agent·ai编程·ai-native
AI产品库2 小时前
小米MiMo技术团队正式发布并开源终端原生AI编程助手 MiMo Code,标志着小米首次进入Coding Agent赛道
人工智能·开源·ai编程
V搜xhliang024611 小时前
AI智能体的数据安全与合规实践
人工智能·学习·数据分析·自动化·ai编程
玉鸯16 小时前
6 行代码就能跑的 Agent,Claude Code、Codex、Cursor的同一底层
agent·ai编程
任我坤16 小时前
16G显卡跑本地大模型:三大框架选型指南
ai·prompt·ai编程