游乐游手机版
首页/AI热点日报/热点详情

用DeepSeek R1和Ollama搭建RAG系统(附代码)

类型:热点整理2026-06-29
构建一个高效的 RAG 系统,DeepSeek R1 与 Ollama 正成为备受青睐的组合方案。我们先从几个核心维度切入:DeepSeek R1 在性能上的突出优势、其在检索效率与提示机制方面的独特设计,以及 Ollama 如何大幅简化本地模型的部署流程。今天,我们将一步步拆解如何利用这两者搭建一

构建一个高效的 RAG 系统,DeepSeek R1 与 Ollama 正成为备受青睐的组合方案。我们先从几个核心维度切入:DeepSeek R1 在性能上的突出优势、其在检索效率与提示机制方面的独特设计,以及 Ollama 如何大幅简化本地模型的部署流程。今天,我们将一步步拆解如何利用这两者搭建一个功能完备的 RAG 系统。

DeepSeek R1:RAG 系统的卓越之选

DeepSeek R1(开启了 AI 推理新时代的开源先锋)在 RAG 领域一经亮相便令人瞩目。它的性能完全可以与 OpenAI 的 o1 一较高下,但成本仅为后者的 5%——如此巨大的价格差距,让中小开发团队也能毫无压力地进入这一领域。

在检索环节,DeepSeek R1 的表现堪称“精准狙击手”——它只锁定所需的那 3 个文档块,多余的内容一概不取。这意味着,即便文档堆积如山,它也能直击要害,输出干净且精准的答案。

面对棘手问题或信息不充分的情况,DeepSeek R1 不会强行编造,而是坦诚地表示“我不知道”。正是这种“宁愿不知道,也不胡乱编造”的严谨态度,让它从众多易产生幻觉的模型中脱颖而出,确保了回答的可靠性与可信度。

数据安全与响应速度一直是开发者的心头大事。DeepSeek R1 支持本地运行,完全不依赖云端 API,这意味着既没有人能窥探你的数据,也无需忍受网络延迟。对于金融、医疗等对数据高度敏感的行业来说,这无疑是刚需特性。

Ollama:本地模型运行的理想框架

Ollama 这一轻量级框架,让本地运行大模型变得像喝水一样简单。它是构建本地 RAG 系统(更多详情可参考《RAG 系统从 POC 到生产应用:全面解析与实践指南》)的关键组件。有了它,开发者不再受云端资源的束缚,本地即可轻松部署,成本可控且隐私有保障。

使用 Ollama 下载和安装模型极其简便。以运行 DeepSeek R1 为例,只需在终端输入一条命令即可:

ollama run deepseek-r1:1.5b

想使用 7B 版本?换成 ollama run deepseek-r1 即可。即使技术经验不多,也能快速上手,开启 RAG 开发之旅。

Ollama 的模型库相当丰富,从轻量级到强力型任你选择。无论你是追求极致推理能力,还是更注重资源利用率,都能找到合适的选项。无论是高效推理还是资源节省,Ollama 都能满足多样化的需求。

构建本地 RAG 系统的详细步骤

1. 导入必要的库

要搭建这个 RAG 系统,首先需要备齐几件“利器”。LangChain 负责文档处理与检索,Streamlit 用于构建交互界面,PDFPlumberLoader 负责提取 PDF 内容,SemanticChunker 执行语义分割,HuggingFaceEmbeddings 生成向量表示,FAISS 建立索引,最后通过 Ollama 调用 DeepSeek R1 进行推理。一行 import 语句,即可全部引入。

import streamlit as st
from langchain_community.document_loaders import PDFPlumberLoader
from langchain_experimental.text_splitter import SemanticChunker
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.llms import Ollama

2. 上传与处理 PDF 文件

首先让用户上传 PDF 文件——使用 Streamlit 的文件上传器,简单几步即可将文件保存为临时文件。接着,PDFPlumberLoader 登场,轻松提取其中的文字内容。

uploaded_file = st.file_uploader("Upload a PDF file", type="pdf")
if uploaded_file:
    with open("temp.pdf", "wb") as f:
        f.write(uploaded_file.getvalue())
    loader = PDFPlumberLoader("temp.pdf")
    docs = loader.load()

3. 策略性地分割文档

文档分割并非简单的切分,而是需要讲究策略。SemanticChunker 结合 HuggingFaceEmbeddings,会根据语义将文字切割成逻辑连贯的小块——例如,同一技术概念的相关段落会被分在一组。这样在检索时,上下文更连贯,回答也更具针对性。

text_splitter = SemanticChunker(HuggingFaceEmbeddings())
documents = text_splitter.split_documents(docs)

4. 创建可搜索的知识库

现在要为每一段文字配备一张“指纹”——向量嵌入。HuggingFaceEmbeddings 负责生成嵌入,FAISS 负责存储与快速匹配。搜索时设置 k=3,仅返回最相关的 3 个文档块,这与 DeepSeek R1 高效检索的风格高度契合。

embeddings = HuggingFaceEmbeddings()
vector_store = FAISS.from_documents(documents, embeddings)
retriever = vector_store.as_retriever(search_kwargs={"k": 3})

5. 配置 DeepSeek R1 模型

接下来请出我们的主角——DeepSeek R1。通过 Ollama 启动一个 1.5B 参数的轻量模型,然后为其设定严格的规则:仅根据提供的上下文回答,不清楚时回答“我不知道”,且回答内容不超过 4 句话。这个提示模板就像给模型套上了缰绳,防止它偏离方向。

llm = Ollama(model="deepseek-r1:1.5b")
prompt = """
1. Use ONLY the context below.
2. If unsure, say "I don’t know".
3. Keep answers under 4 sentences.

Context: {context}

Question: {question}

Answer:
"""
QA_CHAIN_PROMPT = PromptTemplate.from_template(prompt)

6. 组装 RAG 链

最后一步,将所有组件组装成一条完整的流水线。LLMChain 负责生成回答,StuffDocumentsChain 将检索到的文档块与问题一同馈入模型,RetrievalQA 则将检索与问答环节串联起来。用户提出问题后,系统自动查找相关文档并生成答案,一气呵成。

llm_chain = LLMChain(llm=llm, prompt=QA_CHAIN_PROMPT)
document_prompt = PromptTemplate(
    template="Context:\ncontent:{page_content}\nsource:{source}",
    input_variables=["page_content", "source"]
)
qa = RetrievalQA(
    combine_documents_chain=StuffDocumentsChain(
        llm_chain=llm_chain,
        document_prompt=document_prompt
    ),
    retriever=retriever
)

7. 启动 Web 界面

后端部署完成后,再添加一个漂亮的用户界面。使用 Streamlit 搭建一个输入框,用户输入问题并点击发送,系统会显示“Thinking...”,随后答案直接呈现。整个过程流畅顺滑,非技术人员也能轻松上手。这就是 RAG 系统的最终形态——从文档到答案,一步到位。

user_input = st.text_input("Ask your PDF a question:")
if user_input:
    with st.spinner("Thinking..."):
        response = qa(user_input)["result"]
        st.write(response)

总体而言,DeepSeek R1 与 Ollama 的组合为开发者提供了一条低成本、高效率且安全可靠的 RAG 搭建路径。按照这七步流程操作,你也能在本地运行起一套智能问答系统,将海量文档转化为随时可查阅的“知识大脑”。

来源:https://www.53ai.com/news/RAG/2025020684651.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。