智能知识库问答系统 — 基于 Spring AI 构建,集成大语言模型、向量数据库和 RAG(检索增强生成)全链路,实现文档驱动的精准问答。
技术亮点
1. 分层记忆设计
借鉴认知科学的分层思路:短期记忆(当前对话上下文) + 实体记忆(用户关键信息持久化到 H2)。每次只加载相关记忆,避免无关历史干扰 LLM 判断。
2. 双模型架构
主力模型 DeepSeek(远程 API)用于生产,Ollama 本地模型用于链路验证和冒烟测试。兼顾性能与开发效率。
3. 分层 RAG 优化
从基础向量搜索逐层叠加:文本清洗 → 递归分块 → LLM 查询重写 → MMR 去重 → 自动元数据分类,每层解决一个具体痛点,不一步到位过度设计。
4. Redis 短期记忆层
对话记忆从项目内存迁移至 Redis,利用 Redis 的 TTL 机制实现短期记忆自动过期,appendonly 持久化保证重启不丢。
5. RabbitMQ 异步处理层
引入 RabbitMQ 将耗时操作异步化:文件上传后先落盘再发 MQ,消费者异步完成清洗→分块→向量化存储;审计日志异步落库不阻塞接口响应。通过 prefetch=1 + max-concurrency=3 控制 LLM API 并发,天然削峰。
核心架构
用户问题 → 查询重写(LLM) → 向量召回(Qdrant) → MMR 去重 → 拼 Prompt → LLM 回答
↑
文件上传 → 分块 → 向量化
项目结构
src/main/java/com/springrag/
├── agent/ # 多 Agent + IntentRouter(规则 70% + LLM 30% 统一路由)
├── common/ # 通用枚举(模型、角色等)
├── config/ # ChatClient + Redis + H2 记忆持久化 + Session 管理
├── controller/ # REST 接口层
├── service/ # 业务逻辑(聊天、知识库、Function Calling)
└── vectorstore/ # RAG 搜索链路(重写器、分块器、重排器、分类器)