1. 项目概述:基于RAG的智能文档问答系统
作为一名长期与技术文档打交道的开发者,我深知在海量文件中寻找特定信息有多痛苦。传统的全文检索工具虽然速度快,但缺乏语义理解能力;而大语言模型虽然能理解问题,却经常给出与文档无关的"幻觉答案"。这就是为什么我要开发Everything plus——一个结合两者优势的智能文档问答系统。
这个系统的核心价值在于:
- 精准定位:能快速找到文档中与问题最相关的段落
- 语义理解:即使问题表述与文档措辞不同,也能找到相关内容
- 答案可靠:所有回答都基于实际文档内容,杜绝AI编造
- 本地部署:完全开源的技术栈,保护数据隐私
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 技术栈选型
选择技术栈时,我遵循三个原则:开源、轻量、易扩展。最终确定的架构如下:
code复制前端(React) ← HTTP → 后端(Flask) ←→ 检索引擎(Elasticsearch)
↑
↓
向量模型(Sentence-Transformers)
↑
↓
大语言模型(Ollama)
后端选择Flask的原因:
- 轻量级,适合快速开发原型
- Python生态完善,方便集成各种NLP库
- 异步任务支持良好(通过Celery)
数据库选型考量:
- 用户数据用MySQL:关系型数据适合结构化存储
- 文档索引用Elasticsearch:专为搜索优化
- 向量数据直接存在Elasticsearch:避免引入额外组件
2.2 核心工作流程
系统处理每个问题的完整流程:
- 查询解析:分析用户问题的意图和关键词
- 混合检索:同时执行关键词搜索和向量搜索
- 结果融合:用RRF算法合并两种检索结果
- 答案生成:将最相关的文档片段提供给LLM生成最终回答
- 结果呈现:展示答案并标注来源文
