一、基础概念类(标准答案)
1. 什么是本地知识库 / RAG?和直接问大模型有什么区别?
- 本地知识库:把企业内部文档、PDF、业务数据等向量化后存入向量库,让大模型**只基于本地私有数据回答**,不依赖模型自带知识。
- RAG(检索增强生成):先从知识库检索相关内容,再交给大模型生成答案,本质是**外挂私有知识**。
- 区别:
- 大模型自带知识是通用、过时的,**不能实时更新**;
- 直接问会出现**幻觉**,RAG 能保证**来源可追溯**;
- 本地知识库**数据不出内网**,满足隐私与合规要求。
2. RAG 的核心流程是什么?
标准六步:
1. 文档加载:读取 PDF/Word/Excel/网页/数据库数据
2. 文本切片:按语义或长度切分成 Chunk
3. 向量化:通过 Embedding 模型转为向量
4. 向量入库:存入向量数据库建立索引
5. 相似度检索:用户问题转向量,召回最相关片段
6. 提示词拼接:把检索内容+问题+历史对话喂给大模型生成答案
3. 为什么要做文档切片?不切会怎样?
- 大模型有**上下文窗口限制**,超长文本会被截断;
- 向量检索需要**粒度适中**,太长相关性差,太短信息碎片化;
- 不切分:
- 无法完整输入模型
- 检索召回不准
- 答案逻辑混乱、容易幻觉
4. 向量数据库是干嘛的?和普通数据库区别?
- 作用:**存储高维向量,支持高效相似度检索**(余弦、内积、欧氏距离)。
- 与普通数据库区别:
- 普通库做精确匹配,向量库做**模糊语义匹配**;
- 支持**百万级高维数据快速检索**;
- 自带索引优化(IVF、HNSW),普通库不擅长。
5. 什么是 Embedding?作用是什么?
- 将文本、图片转为**固定长度高维数值向量**,让机器能理解语义。
- 作用:
- 把文字变成可计算的数字
- 实现**语义相似度计算**
- 是 RAG 检索的基础
6. RAG 和微调(Fine-tune)区别?怎么选?
- RAG:外挂知识,**实时更新、成本低、隐私安全、适合结构化文档**。
- 微调:修改模型权重,**成本高、周期长、不能实时更新、适合风格/逻辑学习**。
- 选择原则:
- 业务文档频繁更新 → RAG
- 私有数据不能出外网 → RAG
- 要统一回答风格、复杂指令遵循 → 微调+RAG结合
二、架构与选型类(标准答案)
1. 项目整体架构
经典三层:
1. 接入层:前端/接口 → SpringBoot 后端 → Spring AI / LangChain
2. 核心处理层:文档解析 → 切片 → Embedding → 向量检索
3. 存储层:MySQL(元数据)+ PGVector/Milvus(向量)+ MinIO(源文件)
2. 常用技术栈(背这套最稳)
- 大模型:Qwen、Llama3、ChatGLM(Ollama 本地部署)
- 向量库:**PGVector**(易用)、Milvus(高性能)、Chroma(轻量)
- 框架:**Spring AI**(Java 主流)、LangChain4j
- 文档解析:PDFBox、Tika、OpenPDF
- 部署:Docker + Docker Compose
3. 为什么选 PGVector?
- 基于 PostgreSQL,**学习成本低、运维简单**;
- 支持**结构化+向量混合查询**;
- 企业接受度高,不用额外维护独立组件;
- 支持索引优化,满足中小规模场景。
4. 文本切片策略
- 优先**语义分块**:按段落、标题层级切分;
- 辅助**固定长度**:512/1024 字符,加**重叠窗口(100~200字符)**;
- 目的:避免上下文断裂,提升召回准确率。
5. 检索方式
- 基础:**余弦相似度检索**
- 进阶:**混合检索**(关键词 BM25 + 向量检索)
- 重排:使用 Rerank 模型精排,提升准确率
三、关键技术细节(深度必背)
1. 长文档切割上下文丢失怎么解决?
- 使用**滑动窗口+重叠切片**;
- 保留**标题、层级结构**;
- 检索后**多块内容拼接**,补充上下文;
- 使用**父子分块**:细粒度检索,粗粒度生成。
2. 检索不准确、答非所问怎么办?
- 优化切片大小与重叠度
- 改用**混合检索**
- 加入 Rerank 重排模型
- 优化 Embedding 模型
- 对查询做**意图识别与改写**
3. 重复、冲突文档怎么处理?
- 建立**文档指纹**去重
- 按更新时间保留最新版本
- 增加**权重机制**,高优先级覆盖低优先级
- 冲突内容在提示词中让模型择优回答
4. 增量更新知识库
- 新增:直接解析切片入库
- 修改:先删除旧向量,再插入新向量
- 删除:根据文档 ID 批量删除向量
- 避免全量重建,提升效率
5. 敏感数据不出内网
- 大模型本地部署(Ollama)
- Embedding 本地运行
- 向量库内网部署
- 全程不调用第三方 API
- 数据不落地、不日志打印敏感信息
6. 向量维度怎么选?
- 通用:**768 / 1024 维**
- 维度太高:占用存储大、检索慢
- 维度太低:语义表达不足,召回差
- 根据 Embedding 模型默认维度选择即可
7. 百万级数据检索优化
- 使用 HNSW/IVF 索引
- 分段建索引,按业务维度分片
- 混合检索减少向量召回数量
- 使用 Rerank 精排替代粗排
8. 怎么避免幻觉?
- 严格限制模型**只能使用检索内容**
- 提示词强制:**不知道就说未找到,不编造**
- 增加引用溯源,展示来源片段
- 低置信度答案直接拒绝回答
9. 效果评估指标
- 召回率、精确率
- 回答准确率、流畅度
- 幻觉率
- 响应耗时
- 用户满意度
10. 多轮对话实现
- 保存**历史问答对**
- 限制历史轮数,防止超长
- 对历史做**摘要压缩**
- 结合当前问题做**上下文关联改写**
四、SpringBoot 落地(Java 后端必背)
1. SpringBoot 集成本地大模型
- 通过 HTTP 调用 Ollama 本地接口
- 使用 Spring AI 封装 ChatClient
- 支持同步/流式(SSE)返回
2. Spring AI 实现 Embedding
- 注入 EmbeddingModel
- 调用 embed 方法转文本为向量
- 批量插入 PGVector
3. 流式输出 SSE
- 使用 Spring MVC 的 SseEmitter
- 或 Spring AI 内置 Stream 接口
- 前端 EventSource 接收
4. PDF/Word 解析
- PDFBox 解析 PDF
- Tika 解析多格式文档
- 清洗空格、换行、乱码
5. 并发与稳定性
- 接口限流
- 异步处理文档导入
- 重试机制
- 全局异常处理
6. Docker 部署
- 大模型:Ollama 容器
- 后端:SpringBoot 容器
- 数据库:PostgreSQL + PGVector
- 使用 docker-compose 一键启动
五、场景优化题(高分答案)
1. 数据量大检索慢
- 建 HNSW 索引
- 混合检索减少召回量
- 业务维度分片
- 使用 Rerank 精排
2. 用户问题模糊
- 意图识别
- 问题澄清交互
- 关键词提取
- 多轮引导补全信息
3. 冲突答案
- 按时间/权重排序
- 提示词要求模型综合说明
- 展示多个来源供用户参考
4. 响应慢
- 异步构建索引
- 缓存高频问答
- 优化向量检索参数
- 模型量化(GPTQ、GGUF)
六、项目亮点包装(面试加分)
- 实现**本地私有化部署**,数据安全合规
- 采用**混合检索+重排**,准确率显著提升
- 支持**多格式文档自动解析入库**
- 支持**增量更新+权限隔离**
- 基于 SpringBoot 微服务架构,可横向扩展
- 完整日志、监控、异常兜底机制