第一块:基础服务配置

server:
  port: 8080

含义:SpringBoot项目启动后,占用本机8080端口提供web服务。

第二块:spring 顶层配置 → 供给【Spring AI】框架(官方组件)

spring:
  application:
    name: java-llm-compare

项目名称,日志、监控里会展示这个服务名。

  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        options:
          model: llama3
          temperature: 0.7
      embedding:
        options:
          model: nomic-embed-text

✅ SpringAI 内置Ollama连接配置

  1. base-url:本地Ollama服务地址;
  2. chat.model: llama3:对话大模型,聊天问答使用;
  3. temperature:0.7:随机性,越高回答越有创造性,越低回答越稳定;
  4. embedding.model: nomic-embed-text嵌入向量模型,用来把文本转为向量存入Milvus。

① 当前 yml 里 spring.ai.ollama = 只用于 Ollama 本地大模型
Ollama 的定位:在你本机 / 内网服务器运行大模型程序。
如果你电脑没有安装 Ollama、没有下载模型文件,这段配置完全无效,不能对接 DeepSeek 云端 API。
② 建议不需要本地部署模型!普通家用电脑根本扛不住本地大模型运行
✅ 完全推荐直接用 DeepSeek 云端 API,不吃本机显卡、CPU 资源。
③ 本地跑 7B 参数模型最低需要 16G 显存;34B、67B 大模型普通 PC 根本跑不动,CPU 推理速度极慢。
如果希望对接DeepSeek的话,配置需要调整:

  ai:
    openai:
      # 利用 OpenAI 协议无缝对接 DeepSeek
      base-url: https://api.deepseek.com
      api-key: sk-***********************
      chat:
        options:
          model: deepseek-chat
          temperature: 0.7
      # ⚠️【关键踩坑点】必须关闭 OpenAI 默认的 Embedding 功能!否则会和本地模型冲突,且 DeepSeek 没有此接口会报 404
      embedding:
        enabled: false
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-transformers-spring-boot-starter</artifactId>
</dependency>

如果pom.xml中有这个配置,项目启动时会自动去 GitHub 下载模型文件,只要在 pom.xml 中配置了 spring-ai-transformers-spring-boot-starter 依赖,即使代码中没有显式使用,项目启动时 Spring Boot 的自动配置机制也会尝试加载它。
原因:
这是 Spring Boot “自动配置 (Auto-Configuration)” 机制的核心特性。它的设计理念是“约定优于配置”,旨在简化开发,让你通过添加依赖就能获得功能,无需手动编写大量配置代码。

其工作流程大致如下

依赖引入:我们在 pom.xml 中添加了 spring-ai-transformers-spring-boot-starter 依赖。

启动扫描:Spring Boot 应用启动时,会扫描 classpath 下所有的 jar 包。

触发配置:它发现这个 Starter 依赖,并找到其内部的自动配置类 TransformersEmbeddingModel。

条件判断与执行:自动配置类会根据 @Conditional 系列注解进行条件判断。对于 TransformersEmbeddingModel,只要没有通过配置明确禁用它,且类路径存在,它就会默认激活。

Bean 创建:条件满足后,Spring 就会创建 TransformersEmbeddingModel 这个 Bean。正是这个 Bean 在初始化时,会去尝试从网络下载模型文件。

整个过程是 Spring Boot 框架在启动时自动完成的,和我们是否在业务代码中调用无关。

解决方案:

核心思路是绕过应用启动时的自动下载,主要有三种方法:

  • 方案一:提前手动下载模型文件(最推荐)
    这是最直接有效的办法。你可以提前把模型文件下载到本地,再通过配置指向它。

    1. 超链接下载文件 (可点击下载)
    2. 将文件放入项目资源目录:例如,放在 src/main/resources/onnx/ 文件夹下。
    3. application.propertiesapplication.yml 中配置本地路径
      spring.ai.embedding.transformer.onnx.modelUri=classpath:onnx/model.onnx
      spring.ai.embedding.transformer.tokenizer.uri=classpath:onnx/tokenizer.json
      
  • 方案二:使用国内镜像源
    你可以在配置文件中将下载地址替换为国内镜像,例如 Hugging Face 的镜像站:

    spring.ai.embedding.transformer.onnx.modelUri=https://hf-mirror.com/sentence-transformers/all-MiniLM-L6-v2/resolve/main/onnx/model.onnx
    spring.ai.embedding.transformer.tokenizer.uri=https://hf-mirror.com/sentence-transformers/all-MiniLM-L6-v2/resolve/main/tokenizer.json
    
  • 方案三:配置缓存目录
    你可以指定一个自己有权限的目录作为缓存,但这个方法本身不能解决下载失败的问题,通常需要和方案一或二结合使用:

    spring.ai.embedding.transformer.cache.directory=/path/to/your/cache
    

—————————————————————————————————————————————————

    vectorstore:
      milvus:
        collection-name: spring_ai_collection
        client:
          host: localhost
          port: 19530
        embedding-dimension: 768

SpringAI 自带 Milvus向量库配置(报错来源就在这里!)
5. collection-name: spring_ai_collection
SpringAI读写向量,只会操作Milvus里名叫spring_ai_collection的集合;
6. client.host/port:Milvus数据库地址端口;
7. embedding-dimension:768
nomic-embed-text输出向量固定768长度,创建集合时用来定义向量字段;

⚠️ 当前缺失配置!Milvus开启账号鉴权,需要补充用户名密码

client:
  host: localhost
  port: 19530
  username: root
  password: Milvus

重点特性:SpringAI自动装配会自动创建集合,但是不会自动创建向量索引,这就是你 index not found 的根源。


第三块:app 自定义配置 → 供给【LangChain4j】框架

app:
  ollama:
    base-url: http://localhost:11434
    chat-model: llama3
    embedding-model: nomic-embed-text
  milvus:
    host: localhost
    port: 19530
    collection-name: langchain4j_collection
    dimension: 768

关键知识点:

app: 这一段SpringBoot原生不会自动识别!
这些参数不会自动生效,必须你手动写 @ConfigurationProperties 配置类读取,提供给LangChain4j使用。

  1. collection-name: langchain4j_collection
    LangChain4j操作向量,使用Milvus中另一个独立集合;
  2. dimension:768 同样适配 nomic-embed-text;

⚠️ 重中之重:两套Milvus集合隔离

框架 读取配置路径 Milvus集合名称
Spring AI spring.ai.vectorstore.milvus spring_ai_collection
LangChain4j app.milvus(手动代码读取) langchain4j_collection

👉 两个是Milvus中完全独立的两张“表”!
你往SpringAI存入向量,LangChain4j查不到;反之同理。
不要混淆集合名称,不要交叉使用。

当前存在的3个隐患清单

  1. spring.ai.vectorstore.milvus.client 缺少账号密码
    Milvus默认开启登录校验,后续大概率出现连接失败;
  2. SpringAI自动创建集合,不会自动构建索引,就是你遇到的 index not found
  3. Milvus Java SDK版本 2.3.6 和服务端v2.6.13不匹配,建议升级至2.6.0

补充:最简修正后的完整yml片段(直接复制覆盖)

spring:
  ai:
    vectorstore:
      milvus:
        collection-name: spring_ai_collection
        client:
          host: localhost
          port: 19530
          username: root
          password: Milvus
        embedding-dimension: 768
        initialize-schema: true  # 开启自动初始化,如果集合不存在,会初始化创建

两个框架区别

  • Spring AI:Spring官方推出,适配Spring生态,配置直接写在spring.ai下,开箱即用;
  • LangChain4j:第三方Java大模型框架,Spring没有原生自动装配,所有参数需要手动绑定读取(也就是app下这一段配置)。

实现效果:
在这里插入图片描述

更多推荐