必须配置专属知识库将非结构化文档转化为向量语义空间,支持PDF/TXT/MD/DOCX/XLSX(排除加密、扫描、复杂表格文件),经OCR预处理后存入纯英文路径文件夹;安装ChromaDB与依赖,用build_vector_db.py脚本切分嵌入并持久化索引;最后在FastAPI的/chat接口中集成检索逻辑,实现问题驱动的上下文注入推理。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要让DeepSeek本地模型真正理解你的业务文档、内部手册或项目资料,必须配置专属知识库——它不是简单把PDF扔进文件夹,而是将非结构化内容转化为模型能检索、能引用的向量语义空间。
准备可被索引的原始数据
从本地目录中整理出所有需纳入知识库的文件:PDF、TXT、Markdown、Word(.docx)、Excel(.xlsx)均可,但【不支持加密PDF、扫描图片型PDF、带复杂表格嵌套的旧版.doc】。若存在扫描件,请先用OCR工具(如PaddleOCR)转为文本再保存为TXT;若Word含大量批注或修订痕迹,务必接受全部更改并清除元数据。
将这些文件统一放入一个空文件夹,例如 ./my_knowledge_base/,路径中不要含中文或空格。
安装向量数据库与分块工具
执行以下命令安装 ChromaDB(轻量、免服务端、适合单机部署)和文本切分依赖:
pip install chromadb==1.5.0 sentence-transformers==2.2.2 pypdf==3.17.2 python-docx==1.1.2 openpyxl==3.1.2
注意:不要安装 chromadb[http] 或启用远程模式,本地知识库必须走嵌入式模式,否则启动时会因连接超时失败。
构建向量化知识索引
新建 Python 脚本 build_vector_db.py,内容如下:
import os<br>from pathlib import Path<br>import chromadb<br>from sentence_transformers import SentenceTransformer<br>from pypdf import PdfReader<br>from docx import Document<br>import openpyxl<br><br># 初始化嵌入模型(自动下载all-MiniLM-L6-v2)<br>embedder = SentenceTransformer("all-MiniLM-L6-v2")<br><br># 创建持久化向量数据库<br>client = chromadb.PersistentClient(path="./chroma_db")<br>collection = client.create_collection(name="deepseek_knowledge", metadata={"hnsw:space": "cosine"})<br><br># 逐文件读取→切块→嵌入→存入<br>for file_path in Path("./my_knowledge_base").rglob("*.*"):<br> if file_path.suffix.lower() in [".pdf", ".txt", ".md", ".docx", ".xlsx"]:<br> try:<br> content = ""<br> if file_path.suffix == ".pdf":<br> reader = PdfReader(file_path)<br> content = "\n".join([page.extract_text() or "" for page in reader.pages])<br> elif file_path.suffix == ".docx":<br> doc = Document(file_path)<br> content = "\n".join([p.text for p in doc.paragraphs])<br> # 其他格式依此类推…<br> # 按句号/换行切分段落,每段≤200字符<br> chunks = [c.strip() for c in content.replace("。", "。\n").split("\n") if len(c.strip()) > 15]<br> # 批量嵌入并写入<br> embeddings = embedder.encode(chunks).tolist()<br> collection.add(<br> documents=chunks,<br> embeddings=embeddings,<br> ids=[f"{file_path.stem}_{i}" for i in range(len(chunks))]<br> )<br> except Exception as e:<br> print(f"跳过 {file_path}: {e}")
运行该脚本:python build_vector_db.py。首次运行会自动下载嵌入模型(约85MB),耗时取决于文档总页数——100页PDF通常在90秒内完成索引构建。
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
在推理服务中接入知识库检索
修改你已有的 FastAPI 推理服务代码(如 main.py),在 /chat 接口内插入检索逻辑:
第一步:在文件顶部导入
import chromadb<br>from sentence_transformers import SentenceTransformer
第二步:在 app 初始化后加载向量库
client = chromadb.PersistentClient(path="./chroma_db")<br>collection = client.get_collection("deepseek_knowledge")<br>embedder = SentenceTransformer("all-MiniLM-L6-v2")
第三步:在 /chat 处理函数中加入检索段
@app.post("/chat")<br>async def chat_endpoint(request: QueryRequest):<br> # 1. 用用户问题生成嵌入向量<br> query_embedding = embedder.encode([request.question]).tolist()[0]<br> # 2. 检索最相关3个文本块<br> results = collection.query(query_embeddings=[query_embedding], n_results=3)<br> # 3. 拼接为上下文(限制总长≤1024字符)<br> context = "\n---\n".join([doc for doc in results["documents"][0]])[:1024]<br> # 4. 构造带上下文的prompt<br> full_prompt = f"已知信息:{context}\n\n用户:{request.question}\nAI:" <br> inputs = tokenizer(full_prompt, return_tensors="pt", max_length=1024).to("cuda")<br> outputs = model.generate(**inputs, max_new_tokens=256)<br> response = tokenizer.decode(outputs[0], skip_special_tokens=True)<br> return {"answer": response.split("AI:")[-1]}
重启服务后,每次请求都会自动从你的知识库中拉取匹配片段,并作为上下文注入模型推理过程。


















