使用 DeepSeek R1 和 Ollama 开发 RAG 系统,大模型入门到精通,收藏这篇就足够了!
1.概述
掌握如何借助 DeepSeek R1 与 Ollama 搭建检索增强生成(RAG)系统。本文将通过代码示例,为你提供详尽的分步指南、设置说明,分享打造智能 AI 应用的最佳实践。
2.内容
2.1 为什么选择DeepSeek R1?
在这篇文章中,我们将探究性能上可与 OpenAI 的 o1 相媲美、但成本却低 95% 的 DeepSeek R1,如何为你的检索增强生成(RAG)系统带来强大助力。我们来深入剖析为何开发者们纷纷热衷于这项技术,以及你怎样利用它构建自己的 RAG 流程。
DeepSeek R1 的 15 亿参数模型在这方面表现出色,原因如下:
-
精准检索:每个答案仅关联 3 个文档片段
-
严格提示:采用 “我不知道” 策略,避免模型产生幻觉
-
本地执行:与云 API 相比,实现零延迟
环境:
|
组件 |
成本 |
|---|---|
|
DeepSeek R1 1.5B |
免费 |
|
Ollama |
免费 |
|
16GB 内存的个人电脑 |
0 元 |
2.2 构建本地 RAG 系统所需的条件
1.Ollama
Ollama 允许你在本地运行诸如 DeepSeek R1 之类的模型。
-
下载:Ollama
-
设置:通过终端安装并运行以下命令。
ollama run deepseek-r1 # For the 7B model (default)

2.DeepSeek R1 模型
DeepSeek R1 的参数范围从 1.5B 到 671B。对于轻量级 RAG 应用程序,请从1.5B 模型开始。
ollama run deepseek-r1:1.5b
提示:更大的模型(例如 70B)提供更好的推理能力,但需要更多的 RAM。

2.3 构建 RAG 管道
1.导入库
我们将使用:
-
LangChain 用于文档处理和检索。
-
Streamlit 具有用户友好的网络界面。
import streamlit as stfrom langchain_community.document_loaders import PDFPlumberLoaderfrom langchain_experimental.text_splitter import SemanticChunkerfrom langchain_community.embeddings import HuggingFaceEmbeddingsfrom langchain_community.vectorstores import FAISSfrom langchain_community.llms import Ollama

2.上传并处理 PDF
利用 Streamlit 的文件上传器选择本地 PDF。用于PDFPlumberLoader高效提取文本,无需手动解析。
# Streamlit文件上传器uploaded_file = st.file_uploader("Upload a PDF file", type="pdf")if uploaded_file:# 临时保存PDF文件with open("temp.pdf", "wb") as f:f.write(uploaded_file.getvalue())# 加载PDF文本loader = PDFPlumberLoader("temp.pdf")docs = loader.load()
3.策略性地整理文件
我们打算使用递归字符文本分割器(RecursiveCharacterTextSplitter),该代码会将原始的 PDF 文本拆分成更小的片段(块)。下面我们来解释一下合理分块与不合理分块的概念:

为什么要进行语义分块呢?
语义分块能够将相关的句子归为一组(例如,“Milvus 如何存储数据” 这样的内容会保持完整),还能避免拆分表格或图表。
利用 Streamlit 的文件上传器选择本地 PDF。用于PDFPlumberLoader高效提取文本,无需手动解析。
# 将文本拆分为语义块text_splitter = SemanticChunker(HuggingFaceEmbeddings())documents = text_splitter.split_documents(docs)
这一步通过让各文本片段稍有重叠来保留上下文信息,这有助于语言模型更准确地回答问题。小而明确的文档片段还能让搜索变得更高效、更具相关性。
4.创建可搜索的知识库
分割完成后,流程会为这些文本片段生成向量嵌入表示,并将它们存储在 FAISS 索引中。
# Generate embeddingsembeddings = HuggingFaceEmbeddings()vector_store = FAISS.from_documents(documents, embeddings)# Connect retrieverretriever = vector_store.as_retriever(search_kwargs={"k": 3}) # Fetch top 3 chunks
这一过程将文本转换为一种数值表示形式,从而使查询变得更加容易。后续的查询操作将针对该索引展开,以找出上下文最为相关的文本片段。
5.配置 DeepSeek R1
在这里,你要使用 Deepseek R1 1.5B 参数模型作为本地大语言模型(LLM)来实例化一个检索问答(RetrievalQA)链。
llm = Ollama(model="deepseek-r1:1.5b") # Our 1.5B parameter model# Craft the prompt templateprompt = """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)
这个模板会迫使模型依据你 PDF 文档的内容来给出答案。通过将语言模型与和 FAISS 索引绑定的检索器相结合,任何通过该链发起的查询都会从 PDF 内容中查找相关上下文,从而让答案有原始材料作为依据。
6.组装RAG链
接下来,你可以将上传、分块和检索这几个步骤整合为一个连贯的流程。
# Chain 1: Generate answersllm_chain = LLMChain(llm=llm, prompt=QA_CHAIN_PROMPT)# Chain 2: Combine document chunksdocument_prompt = PromptTemplate(template="Context:\ncontent:{page_content}\nsource:{source}",input_variables=["page_content", "source"])# Final RAG pipelineqa = RetrievalQA(combine_documents_chain=StuffDocumentsChain(llm_chain=llm_chain,document_prompt=document_prompt),retriever=retriever)
这就是检索增强生成(RAG)设计的核心所在,它为大语言模型提供经过验证的上下文信息,而非让其单纯依赖自身的内部训练数据。
7.启动 Web 接口
最后,代码利用了 Streamlit 的文本输入和输出函数,这样用户就可以直接输入问题并立即查看回答。
# Streamlit UIuser_input = st.text_input("Ask your PDF a question:")if user_input:with st.spinner("Thinking..."):response = qa(user_input)["result"]st.write(response)
一旦用户输入查询内容,检索链就会找出最匹配的文本片段,将其输入到语言模型中,并显示答案。只要正确安装了langchain库,代码现在应该就能正常运行,不会再触发模块缺失的错误。
提出并提交问题,即可立即获得答案!
8.完整示例代码
import streamlit as stfrom langchain_community.document_loaders import PDFPlumberLoaderfrom langchain_experimental.text_splitter import SemanticChunkerfrom langchain_community.embeddings import HuggingFaceEmbeddingsfrom langchain_community.vectorstores import FAISSfrom langchain_community.llms import Ollamafrom langchain.prompts import PromptTemplatefrom langchain.chains.llm import LLMChainfrom langchain.chains.combine_documents.stuff import StuffDocumentsChainfrom langchain.chains import RetrievalQA# color paletteprimary_color = "#1E90FF"secondary_color = "#FF6347"background_color = "#F5F5F5"text_color = "#4561e9"# Custom CSSst.markdown(f"""<style>.stApp {{background-color: {background_color};color: {text_color};}}.stButton>button {{background-color: {primary_color};color: white;border-radius: 5px;border: none;padding: 10px 20px;font-size: 16px;}}.stTextInput>div>div>input {{border: 2px solid {primary_color};border-radius: 5px;padding: 10px;font-size: 16px;}}.stFileUploader>div>div>div>button {{background-color: {secondary_color};color: white;border-radius: 5px;border: none;padding: 10px 20px;font-size: 16px;}}</style>""", unsafe_allow_html=True)# Streamlit app titlest.title("Build a RAG System with DeepSeek R1 & Ollama")# Load the PDFuploaded_file = st.file_uploader("Upload a PDF file", type="pdf")if uploaded_file is not None:# Save the uploaded file to a temporary locationwith open("temp.pdf", "wb") as f:f.write(uploaded_file.getvalue())# Load the PDFloader = PDFPlumberLoader("temp.pdf")docs = loader.load()# Split into chunkstext_splitter = SemanticChunker(HuggingFaceEmbeddings())documents = text_splitter.split_documents(docs)# Instantiate the embedding modelembedder = HuggingFaceEmbeddings()# Create the vector store and fill it with embeddingsvector = FAISS.from_documents(documents, embedder)retriever = vector.as_retriever(search_type="similarity", search_kwargs={"k": 3})# Define llmllm = Ollama(model="deepseek-r1")# Define the promptprompt = """1. Use the following pieces of context to answer the question at the end.2. If you don't know the answer, just say that "I don't know" but don't make up an answer on your own.\n3. Keep the answer crisp and limited to 3,4 sentences.Context: {context}Question: {question}Helpful Answer:"""QA_CHAIN_PROMPT = PromptTemplate.from_template(prompt)llm_chain = LLMChain(llm=llm,prompt=QA_CHAIN_PROMPT,callbacks=None,verbose=True)document_prompt = PromptTemplate(input_variables=["page_content", "source"],template="Context:\ncontent:{page_content}\nsource:{source}",)combine_documents_chain = StuffDocumentsChain(llm_chain=llm_chain,document_variable_name="context",document_prompt=document_prompt,callbacks=None)qa = RetrievalQA(combine_documents_chain=combine_documents_chain,verbose=True,retriever=retriever,return_source_documents=True)# User inputuser_input = st.text_input("Ask a question related to the PDF :")# Process user inputif user_input:with st.spinner("Processing..."):response = qa(user_input)["result"]st.write("Response:")st.write(response)else:st.write("Please upload a PDF file to proceed.")
3.总结
本文详细介绍了利用 DeepSeek R1 和 Ollama 构建检索增强生成(RAG)系统的方法。首先说明了 DeepSeek R1 1.5B 模型的优势,如精准检索、避免幻觉、零延迟等。接着阐述了搭建流程,包括用 Ollama 本地运行模型、上传 PDF 文件、使用递归字符文本分割器进行语义分块、生成向量嵌入并存储于 FAISS 索引、实例化检索问答链,最后整合各步骤形成连贯流程。通过 Streamlit 实现用户输入问题并即时获取答案,且确保安装langchain库可避免错误。
想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?
别再浪费时间啦!2025 年 AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享!
👇👇扫码免费领取全部内容👇👇

一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势
想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI:
1. 100+本大模型方向电子书

2. 26 份行业研究报告:覆盖多领域实践与趋势
报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:

- 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
- 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
- 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
- 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。
3. 600+套技术大会 PPT:听行业大咖讲实战
PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:

- 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
- 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
- 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
- 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。
二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走
想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!

1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位
面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析:

2. 102 道 AI 大模型真题:直击大模型核心考点
针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:

3. 97 道 LLMs 真题:聚焦大型语言模型高频问题
专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:

三、路线必明:AI 大模型学习路线图,1 张图理清核心内容
刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!

路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。


四、资料领取:全套内容免费抱走,学 AI 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇

2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!
更多推荐



所有评论(0)