去年在帮某金融机构做知识库升级时,我第一次接触到RAG(Retrieval-Augmented Generation)技术栈。传统问答系统要么依赖固定规则匹配(准确率低),要么纯靠大语言模型胡编乱造(幻觉问题严重)。而RAG通过"检索+生成"的混合架构,既能保证答案的专业性,又能保持自然语言交互的灵活性。
这次分享的这套方案,基于Spring AI框架整合了Alibaba Cloud的ReactAgent和Qdrant向量数据库,最终实现了:

(注:实际部署时应替换为自建图床)
核心采用"双引擎"设计:
关键创新点在于:
| 组件类型 | 候选方案 | 最终选择 | 决策依据 |
|---|---|---|---|
| 向量数据库 | Milvus/Pinecone/Qdrant | Qdrant | 内存占用低,K8s友好 |
| 大模型接入层 | LangChain/Spring AI | Spring AI | 与Java生态无缝集成 |
| 业务逻辑处理 | 自研Agent/ReactAgent | ReactAgent | 内置金融领域预训练策略 |
| 缓存层 | Redis/本地缓存 | Caffeine | 低延迟场景性能更优 |
特别提醒:Qdrant的集群模式需要额外配置
replication_factor参数,单机测试环境建议设为1
java复制// 文档切分策略示例
DocumentSplitter splitter = new TokenTextSplitter()
.setChunkSize(512)
.setChunkOverlap(50)
.setTokenizer(new HanLPTokenizer());
关键参数说明:
chunkSize=512:平衡检索精度和计算开销overlap=50:避免跨段落语义断裂python复制# 混合检索算法伪代码
def hybrid_search(query):
# 向量检索
vector_results = qdrant.search(
embedding=model.encode(query),
top_k=5
)
# 关键词检索
keyword_results = bm25.search(
query=query,
limit=3
)
# 结果融合
return fusion_algorithm(
vector_results,
keyword_results,
weights=[0.7, 0.3] # 可调参数
)
通过Prompt Engineering控制生成质量:
text复制你是一个专业的金融知识助手,请根据以下上下文回答问题:
{context}
要求:
1. 如果答案不在上下文中,必须回答"根据现有资料无法确定"
2. 涉及金额的数据必须标注数据来源
3. 使用中文回答,保持专业但易懂
问题:{question}
Qdrant的HNSW参数配置:
yaml复制optimizers:
indexing_threshold: 20000
memmap_threshold: 50000
hnsw:
m: 16
ef_construct: 200
payload_indexing: true
实测效果对比:
| 参数组 | 索引速度 | 查询延迟 | 准确率 |
|---|---|---|---|
| 默认参数 | 1x | 120ms | 82% |
| 优化参数 | 1.8x | 85ms | 89% |
采用两级缓存架构:
java复制Caffeine.newBuilder()
.maximumSize(10_000)
.expireAfterWrite(5, TimeUnit.MINUTES)
.build();
问题现象:
解决方案:
python复制from pyhanlp import *
CustomDictionary.add("沪深300")
java复制new HanLPTokenizer().enableFineGrainMode();
问题发现:
当文档超过10万份时,检索准确率下降37%
根本原因:
优化方案:
python复制from sklearn.decomposition import PCA
pca = PCA(n_components=256)
java复制// 基于Spring Security的注解式控制
@PreAuthorize("hasPermission(#docId, 'READ')")
public Document getDocument(String docId) {
//...
}
权限维度包括:
关键监控项:
使用Micrometer对接Prometheus:
java复制Metrics.counter("rag.query.count").increment();
生产环境推荐配置:
流量分配策略:
mermaid复制graph TD
A[负载均衡] --> B[Spring Pod1]
A --> C[Spring Pod2]
B --> D[Qdrant集群]
C --> D
重要提示:Qdrant的write性能受CPU核心数影响显著,建议配置CPU绑核
这套系统在金融合规场景下已稳定运行9个月,日均处理查询23万次。最让我意外的收获是:通过分析用户的"未知问题"日志,反向推动了知识库的持续完善,形成了数据飞轮效应。最近正在尝试将ReactAgent的决策过程可视化,这对审计场景会很有价值。