Logistics_AI:Spring AI + Milvus 物流智能助手
基于 Spring AI、Milvus 向量数据库和 Redis 的物流行业智能助手,实现 RAG 知识库问答与数据分析。
Logistics_AI:Spring AI + Milvus RAG 物流智能问答系统
项目背景
物流行业有大量文档——运输条款、报关流程、保险政策、常见问题——客服人员每天需要查询这些文档来回答客户咨询。传统方案是关键词搜索,但用户提问题时不会用精确的关键词。RAG(检索增强生成) 是更实用的方案:把文档向量化存入向量数据库,用户提问时找到相关文档片段,再让 LLM 基于这些片段生成答案。
这是我做 BigGraph RAG 平台之前的技术验证项目,验证了"Spring AI + Milvus 能否在企业场景落地"。
技术选型
Spring AI
Spring AI 是 Spring 生态的 AI 抽象层,为 Java 项目提供统一的 LLM 调用接口:
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-3.5-turbo
vectorstore:
milvus:
client:
host: 192.168.8.133
port: 19530
username:
password:
它的核心价值在于可切换的 LLM Provider——今天用 OpenAI,明天换通义千问,不需要改业务代码。对于企业来说,这意味着不绑定特定云厂商。
Milvus 向量数据库
Milvus 是开源的向量数据库,专门用于存储和检索高维向量。相比 Elasticsearch 的向量插件,Milvus 在大规模向量检索场景下性能更好。
在 VM 上通过 Docker 部署:
docker run -d --name milvus-standalone -p 19530:19530 -p 9091:9091 milvusdb/milvus:2.3-latest
RAG 完整流程
1. 文档处理
物流文档 → 分块(每段 500 字符) → 向量化(Embedding) → 存入 Milvus
分块策略在实践中很重要:块太大包含无关信息降低精度,块太小丢失上下文。在物流文档场景,按段落分块(大约 300-500 字)效果最好。
2. 检索
用户问题 → 向量化 → 查询 Milvus Top-K → 获取相关文档片段
@Service
public class RAGService {
@Autowired
private VectorStore vectorStore;
public String answer(String question) {
// 检索 Top-3 相关文档
List<Document> docs = vectorStore.similaritySearch(
SearchRequest.query(question).withTopK(3));
// 构建增强提示
String context = docs.stream()
.map(Document::getContent)
.collect(Collectors.joining("\n\n"));
// LLM 生成回答
return aiClient.generate(
"基于以下文档回答用户问题:\n" + context + "\n\n问题:" + question);
}
}
3. 生成
LLM 基于检索到的文档片段生成回答,并且在提示词中要求"如果文档中没有相关信息,请说不知道,不要编造"。
与 BigGraph RAG 的对比
Logistics_AI 是我 RAG 技术路线上的第一个验证项目:
| 维度 | Logistics_AI | BigGraph |
|---|---|---|
| 框架 | Spring AI | LangChain + LangGraph |
| 向量库 | Milvus | Qdrant + ES 混合检索 |
| Agent | 单轮问答 | LangGraph Agent + 工具调用 |
| 部署 | 单体 | 分布式 |
BigGraph 在多个方向上是 Logistics_AI 的升级:更强的检索能力(混合检索)、Agent 自主决策、更灵活的部署方案。
踩坑
Spring AI 版本兼容:早期 Spring AI 版本迭代很快,API 变化大。解决方案:锁定特定版本(当时用 0.8.x),不要轻易升级。
向量维度匹配:Embedding 模型输出的向量维度必须和 Milvus 集合创建时指定的维度一致。换 Embedding 模型时需要重建集合。
分块策略调优:初始用固定 200 字符分块导致大量截断。后改为按段落分块 + 200 字符重叠滑动窗口,检索精度提升明显。
总结
RAG 是当前企业级 AI 最实用的落地模式——不需要训练模型、知识更新只要更新向量数据库、可解释性强(可以看到 LLM 参考了哪些文档)。Spring AI 让 Java 团队能以最低成本接入 AI 能力。