ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

手把手搭建个人知识库问答助手:interview-guide RAG知识库上传、向量化与SSE流式问答教程

手把手搭建个人知识库问答助手:interview-guide RAG知识库上传、向量化与SSE流式问答教程 手把手搭建个人知识库问答助手interview-guide RAG知识库上传、向量化与SSE流式问答教程【免费下载链接】interview-guide基于 Spring Boot 4.1、Java 25、Spring AI 2.0、React、PostgreSQL/pgvector、Redis 和 RustFS 构建的开源 AI 面试平台支持简历智能分析、模拟面试、语音面试和知识库 RAG。项目地址: https://gitcode.com/gh_mirrors/inter/interview-guideinterview-guide是一个基于 Spring Boot 4.1 Spring AI 2.0 PostgreSQL/pgvector 的开源 AI 面试平台。本教程带你用它内置的知识库模块一步步搭建一个个人知识库问答助手上传 PDF、DOCX、Markdown 等文档系统自动完成分块、向量化、SSE 流式问答让 AI 只基于你自己的资料回答问题而不是一本正经地胡说八道。全程只需要一台电脑 Docker 一个 AI 模型的 API Key无需任何向量数据库的部署经验。 先看懂RAG 知识库问答是如何工作的RAGRetrieval-Augmented Generation检索增强生成的核心思路是先查资料再回答阶段做了什么谁来负责① 上传接收文档校验格式与大小计算内容哈希去重KnowledgeBaseUploadService.java② 解析用 Apache Tika 提取正文PDF/DOCX/TXT/MDDocumentParseService.java③ 分块按 Token 切分成适合 Embedding 的文本块KnowledgeBaseVectorProperties.java④ 向量化调用 Embedding 模型把文本块转成向量存入pgvectorVectorizeStreamConsumer.java⑤ 检索把你的问题也转成向量做相似度匹配召回 TopK 片段KnowledgeBaseQueryService.java⑥ 生成把召回片段塞进 PromptLLM 边生成边通过SSE推给前端RagChatController.java几个值得新手注意的设计决策都在 README.md 中有说明不单独部署 Milvus 等向量库直接用 PostgreSQL 的 pgvector 扩展一个库搞定关系数据 向量检索架构更精简向量化走异步通过 Redis Stream 投递任务上传后立即返回大文档不卡页面还支持失败自动重试检索参数可按问题长度动态分档短问题 TopK20、中问题 TopK12、长问题 TopK8相似度阈值 0.25~0.28见 KnowledgeBaseQueryProperties.java。 第一步环境准备与一键启动环境要求JDK 25、Node.js 18、Docker。1. 克隆仓库git clone https://gitcode.com/gh_mirrors/inter/interview-guide cd interview-guide2. 配置 AI 模型密钥项目默认使用阿里云百炼DashScope的 OpenAI 兼容接口复制环境变量模板后填入 API Keycp .env.example .env # 编辑 .env至少填写 # AI_BAILIAN_API_KEY你的APIKey # AI_MODELqwen3.5-flash 如果手头是 Kimi、DeepSeek、GLM 的 Key 也行——项目设置页支持多 Provider 管理与默认模型切换无需改代码。3. 启动依赖服务PostgreSQL Redis RustFS项目提供了 docker-compose.dev.yml一条命令拉起全部依赖docker compose -f docker-compose.dev.yml up -d启动后用docker ps确认端口已发布0.0.0.0:5432-5432才算正常服务地址用途PostgreSQL pgvectorlocalhost:5432存知识库元数据 向量Redislocalhost:6379缓存 向量化异步任务队列RustFSS3 兼容localhost:9000存原始文档文件如果只想完整体验前端后端依赖全部容器化也可以直接docker-compose up -d --build使用 docker-compose.yml。4. 启动前后端# 终端 1后端Spring Boot端口 8080 ./gradlew :app:bootRun # 终端 2前端Vite端口 5173 cd frontend corepack enable pnpm install pnpm dev浏览器打开http://localhost:5173即可看到界面接口文档在http://localhost:8080/swagger-ui.html。 第二步上传你的知识库文档进入知识库管理页面前端入口代码见 KnowledgeBaseManagePage.tsx把你想让 AI 掌握的文档拖进去即可比如团队内部文档、API 手册PDF / DOCX学习笔记、Markdown 文档产品说明、FAQTXT上传背后的完整流程KnowledgeBaseUploadService.java文件校验单文件上限50MB支持 PDF、DOCX、DOC、TXT、MD 等格式哈希去重用内容 SHA 值查重重复上传不会浪费算力文件入库原始文件存到 RustFS元数据写入 PostgreSQL状态置为PENDING投递异步任务向量化任务丢进 Redis Stream接口立即返回不阻塞。上传成功后文档状态会经历PENDING → PROCESSING → COMPLETED失败则为FAILED完整定义见 VectorStatus.java。在管理页可以实时看到每个知识库的向量化进度。⚙️ 向量化幕后分块策略与 pgvector 存储向量化其实是三步切块 → Embedding → 存向量。interview-guide 使用 Spring AI 的TokenTextSplitter做分块默认参数见 application.yml 中的app.ai.rag.vectorization配置参数默认值作用chunkSize800 token每个文本块的目标大小兼顾语义完整性与检索精度minChunkSizeChars350 字符过小的碎片会并入相邻块避免半句话maxNumChunks10000单文档最大块数防止超大文件拖垮向量库keepSeparatortrue保留句号、换行等分隔符块边界更干净分块策略由 KnowledgeBaseVectorProperties.java 统一构建调整参数后需要对知识库重新向量化才生效——管理页提供了重新向量化按钮对应revectorize接口向量化失败的文档也可以在这里手动重试无需登录服务器看日志。所有向量最终写入 PostgreSQL 的vector_store表由 Flyway 迁移脚本创建查询时基于余弦相似度召回最相关的文本块。 第三步体验 SSE 流式问答文档向量化完成后打开问答助手页面KnowledgeBaseQueryPage.tsx选择关联的知识库开始提问。SSEServer-Sent Events流式响应是这个页面最直观的体验后端通过text/event-stream把 LLM 生成的 token逐段推送到浏览器答案像打字机一样实时蹦出来而不是干等 10 秒才出现整段回复。对应的后端接口定义在 KnowledgeBaseController.javaPostMapping(value /api/knowledgebase/query/stream, produces MediaType.TEXT_EVENT_STREAM_VALUE) public FluxString queryKnowledgeBaseStream(RequestBody QueryRequest request) { ... }除了打字机效果问答链路还内置了几个提升准确性的机制KnowledgeBaseQueryProperties.javaQuery 改写默认开启AI 会先把你的口语化问题改写成更适合检索的表述再去找资料动态 TopK 与相似度阈值问题越短召回越多TopK 20/12/8低于阈值的低相关片段直接丢弃查不到就拒答不硬编多轮上下文保留最近 10 条历史消息追问它支持哪些格式时 AI 知道它指什么。会话管理让问答更像助手前端还提供完整的 RAG 聊天会话能力RagChatController.java新建/删除会话、重命名、置顶、为每个会话单独关联不同知识库、Markdown 渲染与虚拟列表长对话不卡顿。比如你可以建一个后端面试会话只关联技术文档库再建一个产品 FAQ会话只关联产品手册。 核心模块路径速查想继续深挖代码从这几个入口看起最高效知识库接口上传/下载/查询/流式app/src/main/java/interview/guide/modules/knowledgebase/KnowledgeBaseController.java上传与去重逻辑app/src/main/java/interview/guide/modules/knowledgebase/service/KnowledgeBaseUploadService.java向量化消费者Redis Streamapp/src/main/java/interview/guide/modules/knowledgebase/listener/VectorizeStreamConsumer.javaRAG 检索与流式生成app/src/main/java/interview/guide/modules/knowledgebase/service/KnowledgeBaseQueryService.java前端知识库页面frontend/src/pages/架构设计文档docs/❓ 常见问题Q1知识库一直卡在处理中怎么办先确认 Redis 已启动docker ps查看interview-redis再看后端日志是否有向量化报错确认无误后在管理页点击重新向量化手动重试。Q2AI 回答没找到相关内容是我的文档有问题吗大概率是问题与文档不匹配。试试换个问法、缩小关联的知识库范围或检查文档是否真的向量化完成状态为 COMPLETED。项目默认对低相似度片段拒答这其实是在帮你避免幻觉。Q3修改了分块/检索参数不生效分块参数调整必须对知识库执行重新向量化运行时模型配置写入~/.interview-guide/目录可在设置页切换或在 Swagger 里调用/api/llm-provider/reload重载。Q4能换用自己的向量模型吗可以。设置页支持切换默认向量模型Embedding Provider与聊天模型独立管理配置安全落盘且支持 API Key 加密。写在最后到这里一个属于你自己的 RAG 知识库问答助手就跑起来了文档一丢向量化自动完成问题随到随答答案流式吐出。它只是 interview-guide 的一个侧面——这个项目还包含简历智能分析、文字/语音模拟面试、面试日程管理、知识库题库出题与评估等完整功能基于 Java 25 虚拟线程、Redis Stream 异步架构和 Spring AI 构建非常适合作为学习RAG 工程化实践的完整参考项目。动手试试吧你的第一份知识库文档可能就是今晚的事 【免费下载链接】interview-guide基于 Spring Boot 4.1、Java 25、Spring AI 2.0、React、PostgreSQL/pgvector、Redis 和 RustFS 构建的开源 AI 面试平台支持简历智能分析、模拟面试、语音面试和知识库 RAG。项目地址: https://gitcode.com/gh_mirrors/inter/interview-guide创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表