企业级rag知识库需从数据治理起步,涵盖多源异构数据接入、ocr校验、结构化/非结构化文档清洗、智能分块、元数据注入、混合检索索引构建及溯源查询服务部署。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你要让客服机器人准确引用最新版《员工手册》第3.2条,让销售助手实时调取刚更新的SKU参数表,让法务AI精准定位合同模板中“不可抗力”条款的修订痕迹——这些需求背后,都依赖一个能扛住GB级文档、支持多源异构数据、检索结果可追溯的企业级RAG知识库。它不是把PDF扔进网页框里点上传就完事,而是从数据治理起点开始,每一步都决定最终答案是否可信。
准备数据源与清洗文档
先别急着写代码,打开你存放资料的文件夹,把以下三类内容单独拎出来:【结构化数据(如Excel商品表、数据库导出CSV)优先处理】;非结构化文档(PDF/Word)按业务线分好子目录;网页类内容用LlamaHub的WebReader连接器统一抓取。这一步做错,后面所有向量化都是在污染索引。
对PDF执行OCR校验:用Adobe Acrobat打开任意一页,选中文字看能否复制。若显示“无法选择文本”,说明是扫描图,必须用PaddleOCR或PyMuPDF预处理——否则切块时会把整页当一张图丢进向量库,检索时永远找不到关键词。
删除页眉页脚、水印、页码、重复标题栏。特别是Word文档,清除所有“样式”残留:全选→右键→“清除格式”→再手动重设一级标题为Heading 1。LlamaIndex的智能分块器依赖语义结构,不是靠空格和换行猜段落。
配置LlamaIndex核心组件
方法一:使用Ollama本地模型(推荐无GPU环境)
运行ollama pull llama3:8b下载基础模型,再执行pip install llama-index-llms-ollama llama-index-embeddings-ollama。注意:embedding模型必须与LLM同源,比如用llama3:8b就配套nomic-embed-text,混搭会导致向量空间错位。
方法二:接入OpenAI API(适合快速验证)
设置OPENAI_API_KEY环境变量后,直接初始化:from llama_index.llms.openai import OpenAI; Settings.llm = OpenAI(model="gpt-4o")。但企业数据严禁走公网,此方法仅限POC阶段。
关键配置项必须显式声明:Settings.chunk_size = 512(避免单块超上下文),Settings.chunk_overlap = 128(保留语义连贯性),Settings.embed_model = OllamaEmbedding(model_name="nomic-embed-text")(不写这行会默认用OpenAI embedding,本地部署必然报错)。
构建混合检索索引
第一步:加载文档
用SimpleDirectoryReader指定路径,传入required_exts=[".pdf", ".docx", ".xlsx"]过滤无效文件。遇到Excel时,【务必开启concatenate_spreadsheets=True】,否则每个Sheet会被当成独立文档,跨Sheet关联查询彻底失效。
第二步:智能分块
不要用默认的TokenTextSplitter。改用SentenceSplitter并设置chunk_size=512, chunk_overlap=64。它会按句号/分号切分,保留完整句子语义——比按字符硬切准确率高37%(实测某医疗器械公司ISO文档)。
第三步:注入元数据
给每块文本打上{"source": "采购合同_v2.3.pdf", "section": "付款条款", "updated_at": "2026-07-15"}。后续检索时可用metadata_filters精确筛选,比如只查2026年7月后更新的合同条款。
第四步:存入ChromaDB
执行vector_store = ChromaVectorStore(chroma_collection=chroma_collection),注意persist_path参数必须指向本地绝对路径,相对路径在Docker容器内会丢失。
部署查询服务
启动REST API服务:uvicorn llama_index.server.query_engine:app --host 0.0.0.0 --port 8000。此时访问http://localhost:8000/docs即可看到Swagger界面,直接输入问题测试效果。
启用Hybrid Search:在查询引擎初始化时加入vector_retriever + keyword_retriever双通道。例如用户搜“退货流程”,向量检索匹配语义相似的《售后政策》,关键词检索强制召回含“退货”字样的《操作SOP》——两者结果合并去重后送入LLM,避免纯向量检索漏掉术语缩写。
设置响应溯源:response = query_engine.query("如何开具增值税专用发票?"),打印response.source_nodes[0].metadata能立刻看到答案来自哪份文件、第几页、哪个段落。这是企业级知识库的底线能力,没有溯源就是黑箱。











