1. 引言大语言模型LLM的兴起让企业看到了知识管理自动化的曙光。然而通用大模型无法直接访问企业内部私有的、实时的知识库导致回答往往“一本正经地胡说八道”。检索增强生成Retrieval-Augmented GenerationRAG技术正是为了解决这一痛点而生。对于资源有限的中小企业而言构建一套“能用、好用、可维护”的 RAG 系统并非简单地将文档扔给向量数据库。本文将从 0 到 1拆解一个企业级 RAG 的完整架构提供一套可直接落地的技术选型与实现思路。2. 核心架构总览一个生产级的 RAG 系统远不止“检索 生成”两步。它需要一套完整的流水线来保证数据的质量、检索的准确性和回答的可靠性。下图展示了我们即将构建的架构多源文档PDF/Word/网页/数据库文档解析与清洗文档分块Chunking向量化嵌入Embedding向量数据库Milvus/Chroma用户查询查询改写与路由混合检索向量 关键词重排序RerankerLLM 生成回答输出与引用整个流程可以分为两大阶段数据预处理离线和在线推理。3. 数据预处理知识库的基石这是 RAG 系统中最容易被忽视但也是最重要的环节。垃圾进垃圾出。3.1 文档解析与清洗企业数据源多样包括 PDF、Word、Markdown、HTML 以及数据库记录。技术选型PDF推荐使用PyMuPDFfitz或pdfplumber它们能较好地提取文本和表格。Word/HTMLpython-docx和BeautifulSoup是成熟的选择。通用方案Unstructured库是一个强大的工具能处理多种格式并自动识别文档元素。清洗要点去除页眉页脚、水印、无关的导航栏。统一编码UTF-8。对 OCR 识别出的文本进行纠错。3.2 文档分块Chunking分块策略直接影响检索效果。块太小语义不完整块太大噪声多且容易超出 LLM 上下文窗口。推荐策略语义分块。首先按 Markdown 标题###或文档的段落结构进行初步分割。然后使用LangChain或LlamaIndex的RecursiveCharacterTextSplitter以段落\n\n为分隔符设置chunk_size512token和chunk_overlap128。进阶对于代码或表格可以单独定义分块逻辑避免被截断。fromlangchain.text_splitterimportRecursiveCharacterTextSplitter text_splitterRecursiveCharacterTextSplitter(chunk_size512,chunk_overlap128,separators[\n\n,\n,。,, ,],length_functionlen,)chunkstext_splitter.split_text(cleaned_document)3.3 向量化嵌入Embedding将文本块转换为向量是语义检索的基础。技术选型开源首选BAAI/bge-large-zh-v1.5或BAAI/bge-m3。它们在中文语义理解上表现优异且支持本地部署无数据泄露风险。商业 APIOpenAItext-embedding-3-small或阿里DashScope的 embedding 模型效果稳定但需付费。部署使用Sentence-Transformers库加载模型并封装成微服务供后续流程调用。4. 在线推理从查询到答案当用户提问时系统需要快速、准确地找到相关信息并生成答案。4.1 查询改写与路由用户的原始问题往往不够精确。直接检索效果不佳。查询改写利用一个小型 LLM如 GPT-3.5-turbo 或 Qwen-7B将用户问题改写成更适合检索的形式。例如将“它怎么用”改写成“XX产品的使用方法是什么”。查询路由根据问题类型路由到不同的检索策略。例如事实性问题走向量检索总结性问题走全文搜索。4.2 混合检索单一向量检索可能遗漏关键词完全匹配但语义相似度不高的结果。实现同时进行向量检索语义相似度和关键词检索BM25 算法。融合使用Reciprocal Rank Fusion (RRF)算法将两种检索结果按排名加权合并得到最终的候选文档列表。4.3 重排序Reranker向量检索返回的 Top-K 结果中前几个可能并不相关。重排序模型能对候选结果进行更精细的交叉编码打分。技术选型BAAI/bge-reranker-v2-m3是一个优秀的轻量级重排序模型。作用将 Top-50 的结果重排序只取 Top-5 作为 LLM 的上下文。这一步能显著提升最终回答的准确性。# 伪代码示例fromsentence_transformersimportCrossEncoder rerankerCrossEncoder(BAAI/bge-reranker-v2-m3)pairs[[query,doc]fordocincandidate_docs]scoresreranker.predict(pairs)# 按 scores 排序取 Top-54.4 LLM 生成与引用将用户问题与重排序后的文档片段拼接成 Prompt交给 LLM 生成最终答案。Prompt 设计明确要求 LLM 基于上下文回答如果找不到答案则说“不知道”并强制要求给出引用来源如文档块 ID 或文件名。技术选型对于中小企业推荐使用Qwen2.5-7B-Instruct或DeepSeek-V2-Lite等开源模型通过vLLM或Ollama部署成本可控。5. 技术栈与部署建议组件推荐方案说明文档解析UnstructuredPyMuPDF处理多格式文档向量数据库Milvus(推荐) /ChromaMilvus 更适合生产Chroma 适合原型Embedding 模型BAAI/bge-m3本地部署兼顾效果与安全Reranker 模型BAAI/bge-reranker-v2-m3轻量级效果显著LLMQwen2.5-7B-Instruct通过 vLLM 部署支持高并发编排框架LangChain/LlamaIndex快速搭建流水线降低开发成本部署Docker Compose将所有服务容器化一键部署6. 总结与展望本文从 0 到 1 拆解了一个企业级 RAG 系统的完整架构涵盖了数据预处理、在线推理、技术选型等核心环节。对于中小企业而言关键在于重视数据质量花 80% 的精力在文档清洗和分块上。引入重排序这是提升准确率性价比最高的手段。拥抱开源使用BAAI系列模型和Milvus在保证效果的同时控制成本。RAG 技术仍在快速发展未来多模态 RAG、Agentic RAG 等方向值得持续关注。希望本文能为你的企业知识库建设提供一个清晰的起点。