deepseek网页版无法用于企业知识库,因其仅为纯对话接口,不支持文档上传、切片、向量化及向量库存储等rag必需功能,上传文件不会持久化,也无法实现内部文档语义检索。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

能直接用,但必须绕开官方网页版——它不开放文档索引能力。内部文档检索本质是 RAG(检索增强生成)闭环,核心在本地数据接入、向量化和语义召回,不是调 API 那种“问答即服务”。
为什么不能直接用 deepseek.com 网页版做企业知识库
网页版 deepseek.com 是纯对话接口,不提供文档上传、切片、embedding、向量入库等 RAG 必需环节。它连 KnowledgeBase.add_documents() 这类方法都没有暴露,所有输入都当 prompt 处理,无法建立持久化索引。你上传的 PDF 会被丢弃,下次提问时不会被召回。
常见错误现象:
- 在网页版拖入 PDF 后提问“这份文档里提到的验收标准是什么”,返回“未找到相关信息”
- 尝试用“请基于我上传的《采购流程V3.2》回答……”引导,模型只复述训练数据里的通用流程
- 误以为开启“联网搜索”就能搜内部文件——那只是查公网,跟你的共享盘毫无关系
必须自建的三个硬性组件:loader + embedding + vectorstore
缺一不可。loader 负责把 Word/PDF/Confluence 页面变成文本块;embedding 模型把每块文本转成向量;vectorstore(如 Chroma 或 Milvus)存这些向量并支持相似度查询。
实操建议:
- loader 选型看格式:PDF 用
PyPDF2(简单)或unstructured(保留表格/标题结构);Confluence 用官方 REST API +requests拉取 HTML 再清洗 - embedding 模型别硬套
text-embedding-ada-002:它是 OpenAI 的,需联网且贵。改用开源模型如bert-base-chinese或m3e-base,pip install sentence-transformers即可加载 - vectorstore 初期用
Chroma(轻量、单机、Python 原生);数据超 10 万文档再切到Milvus(需 Docker、支持分布式)
LangChain + DeepSeek 的最小可行链路怎么写
不是“装个 deepseek 包就行”,而是用 LangChain 做胶水,把 DeepSeek 当 LLM,其他模块各司其职。关键在于 retrieval_qa_chain 的初始化逻辑。
典型错误配置:
- 直接传
model_path="./models/deepseek-7b-q4.bin"给LLM,但没配device="cuda"导致 OOM -
Chroma.from_documents()没设persist_directory,重启 Python 进程后索引全丢 - query 时没加
return_source_documents=True,根本不知道答案从哪篇文档来的
精简可运行片段(删减异常处理):
from langchain.llms import DeepSeek
from langchain.chains import RetrievalQA
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
from langchain.document_loaders import DirectoryLoader
<h1>1. 加载文档(假设所有 PDF 在 ./docs/)</h1><p>loader = DirectoryLoader("./docs/", glob="*<em>/</em>.pdf")
docs = loader.load()</p><h1>2. 初始化 embedding 模型(离线可用)</h1><p>embeddings = HuggingFaceEmbeddings(model_name="m3e-base")</p><h1>3. 构建向量库(自动持久化到 ./chroma_db/)</h1><p>vectorstore = Chroma.from_documents(docs, embeddings, persist_directory="./chroma_db/")
vectorstore.persist() # 显式保存</p><h1>4. 初始化 DeepSeek LLM(注意 device 和 model_path)</h1><p>llm = DeepSeek(model_path="./models/deepseek-7b-q4.bin", device="cuda")</p><h1>5. 绑定检索器与 LLM</h1><p>qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
return_source_documents=True
)</p><h1>6. 查询</h1><p>result = qa_chain({"query": "采购合同审批需要几个部门会签?"})
print(result["result"])
for doc in result["source_documents"]:
print(f"来源: {doc.metadata['source']}, 页码: {doc.metadata.get('page', '?')}")
</p>
OCR 文档(扫描件/PNG)必须单独过 DeepSeek-OCR-2
普通 loader 对图片类 PDF 或 JPG 完全无效。它们不是文本容器,而是像素阵列。强行用 PyPDF2 读出来是空字符串或乱码。
正确路径:
- 先用
DeepSeek-OCR-2把图像转成带结构的 Markdown(含标题层级、表格、代码块) - 再把生成的 Markdown 文件喂给上面的
DirectoryLoader流程 - 不要试图让 OCR 和 embedding 在一个进程里串行跑——
DeepSeek-OCR-2是重 GPU 计算,embedding 是 CPU/GPU 推理,混在一起容易显存溢出或卡死
部署要点:
-
DeepSeek-OCR-2必须用 Docker 启动(官方镜像已预装 CUDA 驱动和 FlashAttention),裸 Python 无法运行 - OCR 输出目录要和后续 loader 的输入目录对齐,比如 OCR 存到
./ocr_output/,loader 就读./ocr_output/ - 扫描件质量差(模糊、倾斜、阴影)时,
DeepSeek-OCR-2的layout_analysis参数要设为True,否则表格识别率暴跌
最易被忽略的点:元数据(metadata)必须打标。光有向量不够,得知道每段向量对应哪份文档、第几页、属于哪个部门。否则检索出结果却无法定位原始文件,等于白搭。这个 metadata 不是可选项,是生产环境的强制字段。










