用 deepseek-v4-pro 搭建企业知识库问答系统

“公司报销流程有更新吗?为什么我的差旅申请被打回了?”——小李在群里@了财务,等了半小时没人回,最后在杂乱无章的共享文件夹里翻到一份过期的 PDF,照着填又被驳回。这场景几乎每个公司都在发生:知识散落在文档、聊天记录、内部 Wiki 里,找起来像大海捞针。

而今天,用一个大模型加上几页公司文档,就能让任何人直接问“我的报销单为什么被退”,系统三秒内给出答案,并附上原文出处。这种能力背后是一项叫 RAG(检索增强生成) 的技术——大模型在回答前,先像图书管理员一样快速检索相关资料,再根据资料组织答案,而不是凭空编造。

我们选择 deepseek-v4-pro 作为核心大脑。它在长上下文理解、逻辑推理上表现极强,尤其适合需要精确引用企业政策的场景。但 671B 参数的 full-size 版本需要企业级 GPU 集群才能跑起来;如果是在普通工作站甚至个人电脑上验证,完全可以用同一家族的 deepseek-v4-flash(轻量版),架构和调用方式一模一样,只是体积和算力需求小了几个量级。下面会以 deepseek-v4-flash 为例演示完整搭建流程,你随时可以把模型名替换成 deepseek-v4-pro。

整个系统分成三步:

  1. 在本地部署大模型服务
  2. 把公司文档“喂”给检索引擎
  3. 写一段接线代码,把检索器和模型连起来

部署模型:安装 Ollama(当前最新版 0.24.0),它能把大模型打包成极简的服务。

# 安装 Ollama 0.24.0(macOS Homebrew)
brew install ollama

# 启动后台服务
ollama serve

# 拉取模型(这里用 deepseek-v4-flash,如需用 deepseek-v4-pro改为对应名称)
ollama pull deepseek-v4-flash

构建知识库:假设你把公司政策整理成 knowledge.txt。Python 环境需要安装以下关键库(LangChain 核心 1.4.0、ChromaDB 1.5.9)。

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_chroma import Chroma
from langchain_ollama import ChatOllama, OllamaEmbeddings
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# 1. 加载文档并切分,避免一次塞给模型太多文本
loader = TextLoader("knowledge.txt", encoding="utf-8")
documents = loader.load()

text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = text_splitter.split_documents(documents)

# 2. 用向量数据库存储文档片段(embedding 模型也跑在 Ollama 上)
embeddings = OllamaEmbeddings(model="deepseek-v4-flash")  # 换成 deepseek-v4-pro 同理
vectorstore = Chroma.from_documents(
    documents=splits,
    embedding=embeddings,
    persist_directory="./chroma_db"
)
retriever = vectorstore.as_retriever()

# 3. 组装 RAG 问答链
llm = ChatOllama(model="deepseek-v4-flash", temperature=0)

template = """基于以下上下文信息回答问题。如果无法从上下文中找到答案,就说不知道。

上下文:
{context}

问题:{question}

答案:"""
prompt = ChatPromptTemplate.from_template(template)

def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

rag_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# 4. 提问测试
question = "公司对差旅酒店的报销标准是什么?"
answer = rag_chain.invoke(question)
print(answer)

# 输出示例——系统会引用 knowledge.txt 中的原文,比如:
# “标准间每晚不超过 500 元,一线城市可上浮 20%。”

运行这段代码后,你就能在终端里直接提问,得到带上下文的精准回答。重要的一点是,这个系统并不是训练或微调模型,它绝不改变原始大模型,知识完全来自你提供的文档;当政策更新时,只需替换 knowledge.txt 并重新生成向量库即可,零代码修改。

这种架构意味着什么?AI 不再是只会聊天的玩具,而变成了能查阅内部规章的“员工助手”。对初创团队,花半天时间就能为自己的 Notion、飞书文档搭建一套问答界面;对中型企业,把分散在各部门的 PDF 和邮件归档,可以直接降低新人培训成本和重复咨询。

当然,它并不完美。当问题需要跨段落的逻辑整合(比如“华东区销售提成规则中,A 类客户与 B 类客户的叠加折扣是多少”),简单的向量检索可能漏掉关联片段,这时需要更细致的文档结构化或关键词+语义混合检索。另外,deepseek-v4-pro 虽强,推理成本也高,对实时性要求强的场景要评估延迟和 GPU 开销。如果只是内部使用,deepseek-v4-flash 往往更实惠,且回答准确度在多数政策类问答上无明显差距。

最关键的一步已经跨过来了:技术门槛低到了只需一个配置文件和一本文档。知识不再是某个老员工的“私藏”,而是随时可查、有据可依的公司资产。想不想今晚就给自己团队搭一个?你会发现,原来“自己公司的 ChatGPT”离每个人都这么近。


皖ICP备2025105865号-2|皖公网安备34010402704739号