系列
- 所属专栏:《Java 开发者从零实现 RAG 知识库》
- 文章类型:按需查阅的附录,不计入 12 篇主线进度
- 建议前置:至少完成第 1 篇 Ollama 安装;更换 Embedding 模型前完成第 7 篇 Qdrant
- 返回主线:《第12篇:AI 与 RAG 术语索引》
这不是 RAG 主线的必修章节。当电脑内存不足、希望提高回答速度,或要替换 Embedding 模型时,再回来查阅。
默认聊天模型是 qwen3:14b。24 GB 以下内存、同时运行较多应用或希望提高响应速度时,可以改用 qwen3:8b。
Embedding 模型仍然使用 bge-m3。不要因为更换聊天模型而修改 Qdrant 的 1024 维向量配置。
先判断你要换哪一类模型
| 想改善什么 | 应该更换 | 是否需要重建 Qdrant 索引 |
|---|---|---|
| 内存占用、回答速度、答案风格 | 聊天模型,例如 qwen3:14b 换成 qwen3:8b |
不需要 |
| 语义检索效果、向量维度或 Embedding 服务 | Embedding 模型,当前是 bge-m3 |
需要 |
原因是聊天模型只在检索完成后阅读 Prompt,它不会生成存入 Qdrant 的向量。Embedding 模型决定向量空间和维度,文档向量和问题向量必须由同一个模型生成。
完成进度
- 1. 确认要换聊天模型还是 Embedding 模型
- 2. 先下载新模型并单独验证
- 3. 只修改当前运行模块的配置
- 4. 用
ollama ps或请求日志确认聊天模型 - 5. 如果更换 Embedding 模型,创建新 Collection 并重新入库
第 1 步:下载并验证 8B 模型
bash
ollama pull qwen3:8b
ollama list
ollama run qwen3:8b
能正常回答后输入 /bye 退出。
第 2 步:只修改正在学习的模块
不需要一次修改所有示例。每个模块都是独立学习阶段,只修改当前准备运行的入口即可。
01-ollama-basics
前五个阶段分别保存自己的模型名:
text
step01/RawHttpCall.java 请求 JSON 中的 model
step02/ParsedResponse.java 请求 JSON 中的 model
step03/InteractiveChat.java MODEL 常量
step04/ContextChat.java MODEL 常量
step05/SystemPromptChat.java MODEL 常量
把当前类中的:
java
qwen3:14b
改成:
java
qwen3:8b
03-markdown-rag
修改 MarkdownRagDemo 创建 OllamaChatClient 时传入的模型名:
java
new OllamaChatClient(
httpClient,
objectMapper,
URI.create("http://localhost:11434/api/chat"),
"qwen3:8b"
);
04-qdrant-rag
修改 QdrantRagDemo 创建 OllamaChatClient 时传入的模型名:
java
new OllamaChatClient(
httpClient,
objectMapper,
URI.create("http://localhost:11434/api/chat"),
"qwen3:8b"
);
05-spring-rag
Spring Boot 模块不需要修改 Java 代码。启动前设置环境变量:
bash
RAG_OLLAMA_CHAT_MODEL=qwen3:8b \
mvn -f 05-spring-rag/pom.xml spring-boot:run
Spring Boot 会把 RAG_OLLAMA_CHAT_MODEL 映射到:
yaml
rag:
ollama:
chat-model: qwen3:8b
也可以直接修改 05-spring-rag/src/main/resources/application.yml,但环境变量更适合临时切换,不会产生 Git 修改。
第 3 步:确认实际聊天模型
查看 Ollama 当前加载的模型:
bash
ollama ps
网页回答速度变快并不能证明配置一定生效,应以 ollama ps 或 Ollama 请求日志中的模型名为准。
更换 Embedding 模型时为什么必须重新入库
不同 Embedding 模型生成的向量不在同一个语义空间中,维度也可能不同。不能用新模型生成问题向量,再去搜索旧 bge-m3 文档向量。
安全的切换顺序是:
text
下载并验证新 Embedding 模型
↓
查看新模型的向量维度
↓
创建一个新名称、新维度的 Collection
↓
使用新模型把全部文档重新入库
↓
同时切换 embedding-model 和 collection
↓
验证检索效果后,再决定是否保留旧 Collection
先查看新模型的实际维度:
bash
curl -s http://localhost:11434/api/embed \
-H 'Content-Type: application/json' \
-d '{
"model": "新的-embedding-模型名",
"input": ["维度测试"]
}' | jq '.embeddings[0] | length'
然后使用返回的维度创建新 Collection。例如新模型返回 768 维:
bash
curl -X PUT http://localhost:6333/collections/kubernetes_chunks_new_embedding \
-H 'Content-Type: application/json' \
-d '{
"vectors": {
"size": 768,
"distance": "Cosine"
}
}'
768只是示例,必须替换为前一条命令返回的真实维度。不要直接修改或删除原 Collection,先保留回退能力。
Spring Boot 模块可以在启动时同时指定新模型和新 Collection:
bash
RAG_OLLAMA_EMBEDDING_MODEL=新的-embedding-模型名 \
RAG_QDRANT_COLLECTION=kubernetes_chunks_new_embedding \
mvn -f 05-spring-rag/pom.xml spring-boot:run
服务启动后,使用第 10 篇的知识管理 API 把原文档重新提交到新 Collection。只改配置不会自动搬运旧向量。
常见问题
提示模型不存在
模型名称必须与 ollama list 完全一致,包括标签。例如本教程使用的是 qwen3:8b,不是 qwen3-8b。
更换聊天模型后 Qdrant 维度错误
聊天模型不参与向量化。确认 embedding-model 仍是 bge-m3,Collection 仍是 1024 维。
更换 Embedding 模型后检索结果很奇怪
检查文档和问题是否使用同一个 Embedding 模型生成向量。如果 Collection 中还是旧向量,需要把所有文档重新入库,不能只重启应用。
测试仍然断言 qwen3:14b
部分客户端单元测试会明确验证默认模型名。学习时临时使用环境变量不会修改测试默认值;如果永久改变代码默认模型,需要同步更新对应测试。
本篇小结
- 默认聊天模型是
qwen3:14b,内存紧张或想更快时可以改用qwen3:8b;这不需要重建向量索引。 - 不需要一次改完所有示例,只修改当前正在运行的模块入口即可。
01-ollama-basics、03-markdown-rag、04-qdrant-rag改 Java 中的模型名,05-spring-rag用环境变量RAG_OLLAMA_CHAT_MODEL临时切换,不产生 Git 修改。- 用
ollama ps确认真正加载的模型,不要凭回答速度判断配置是否生效。 - 更换 Embedding 模型时,必须确认新维度、创建新 Collection,并使用新模型重新入库全部文档。
本篇自测
- 从
qwen3:14b换到qwen3:8b后,为什么不用重新入库? - 更换 Embedding 模型时,为什么不能继续搜索原 Collection?
- 为什么建议创建新 Collection,而不是直接删除旧 Collection?
- 临时切换 Spring Boot 聊天模型时,哪个环境变量最合适?
参考答案:聊天模型不生成 Qdrant 向量;不同 Embedding 模型的向量空间和维度可能不同;新 Collection 可以保留回退和对比能力;使用 RAG_OLLAMA_CHAT_MODEL。
下一篇
到此,RAG 主线教程和模型切换附录已经结束。可以回到《Java RAG 实战专栏导读:从零跑通 Ollama + Qdrant + Spring Boot 知识库》复习整体路线。
完整代码都在 GitHub(欢迎 Star ⭐)
本专栏的全部示例代码都已开源,包含 5 个可独立运行的 Maven 模块、自动化测试和完整分篇教程。建议 Fork / Clone 下来,边读边跑:
🔗 https://github.com/bysbsh/ai-rag-learning-guide
- 代码与教程同步更新,对照每一篇动手实践效果最好。
- 如果这份教程帮到了你,点个 Star 就是对我最大的支持,也方便你之后找回最新版本。
- 遇到问题或发现错漏,欢迎在仓库提 Issue / PR。项目采用 MIT 协议,可自由学习与二次创作。