游乐游手机版
首页/手机教程/文章详情

使用 DeepSeek 和 Ollama 搭建一个本地知识库系统(包含完整代码)

时间:2025-04-24 10:34
你有没有想过,能不能像跟人聊天一样,直接问 pdf 文件或技术手册问题?比如你有一本很厚的说明书,不想一页页翻,只想问它:“这个功能怎么用?”或者“这个参数是什么意思?”现在有了

你有没有想过,能不能像跟人聊天一样,直接问 pdf 文件或技术手册问题?比如你有一本很厚的说明书,不想一页页翻,只想问它:“这个功能怎么用?”或者“这个参数是什么意思?”现在有了 ai 技术,这完全可以实现!

这篇文章教你如何用两个工具(DeepSeek R1 和 Ollama)来搭建一个智能系统,让它帮你从 PDF 里找答案。这个系统叫 RAG(检索增强生成),简单来说就是:先找资料,再生成答案。

为什么要用 DeepSeek R1?省钱:它比 OpenAI 的模型便宜 95%,效果却差不多。精准:每次只从 PDF 里找 3 个相关片段来回答问题,避免瞎编。本地运行:不用联网,速度快,隐私也有保障。你需要准备什么?

Ollama:一个让你在电脑上本地运行 AI 模型的工具。

下载地址:https://ollama.com/
使用 DeepSeek 和 Ollama 搭建一个本地知识库系统(包含完整代码)
安装后,运行命令:ollama run deepseek-r1 # 默认用7B模型

DeepSeek R1 模型:有不同大小,最小的 1.5B 模型适合普通电脑,更大的模型效果更好,但需要更强的电脑配置。

运行小模型:ollama run deepseek-r1:1.5b

通用配置原则 模型显存占用(估算):

每 1B 参数约需 1.5-2GB 显存(FP16 精度)或 0.75-1GB 显存(INT8/4-bit 量化)。例如:32B 模型在 FP16 下需约 48-64GB 显存,量化后可能降至 24-32GB。

内存需求:至少为模型大小的 2 倍(用于加载和计算缓冲)。

存储:建议 NVMe SSD,模型文件大小从 1.5B(约 3GB)到 32B(约 64GB)不等。

怎么搭建这个系统?第一步:导入工具包

我们用 Python 写代码,需要用到一些工具包:

LangChain:处理文档和检索。Streamlit:做一个简单的网页界面。代码语言:javascript代码运行次数:0运行复制
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
登录后复制
使用 DeepSeek 和 Ollama 搭建一个本地知识库系统(包含完整代码)
第二步:上传 PDF

用 Streamlit 做一个上传按钮,把 PDF 传上去,然后用工具提取里面的文字。

代码语言:javascript代码运行次数:0运行复制
uploaded_file = st.file_uploader("上传PDF文件", type="pdf")if uploaded_file:    with open("temp.pdf", "wb") as f:        f.write(uploaded_file.getvalue())    loader = PDFPlumberLoader("temp.pdf")    docs = loader.load()
登录后复制第三步:把 PDF 切成小块

PDF 内容太长,直接喂给 AI 会吃不消。所以要把文字切成小块,方便 AI 理解。

代码语言:javascript代码运行次数:0运行复制
text_splitter = SemanticChunker(HuggingFaceEmbeddings())documents = text_splitter.split_documents(docs)
登录后复制
使用 DeepSeek 和 Ollama 搭建一个本地知识库系统(包含完整代码)
第四步:建一个“知识库”

把切好的文字块转换成向量(一种数学表示),存到一个叫 FAISS 的数据库里。这样 AI 就能快速找到相关内容。

代码语言:javascript代码运行次数:0运行复制
embeddings = HuggingFaceEmbeddings()vector_store = FAISS.from_documents(documents, embeddings)retriever = vector_store.as_retriever(search_kwargs={"k": 3})  # 每次找3个相关块
登录后复制第五步:设置 AI 模型

用 DeepSeek R1 模型来生成答案。告诉它:只根据 PDF 内容回答,不知道就说“我不知道”。

代码语言:javascript代码运行次数:0运行复制
llm = Ollama(model="deepseek-r1:1.5b")prompt = """1. 仅使用以下上下文。2. 如果不确定,回答“我不知道”。3. 答案保持在4句话以内。上下文: {context}问题: {question}答案:"""QA_CHAIN_PROMPT = PromptTemplate.from_template(prompt)
登录后复制第六步:把整个流程串起来

把上传、切块、检索和生成答案的步骤整合成一个完整的系统。

代码语言:javascript代码运行次数:0运行复制
llm_chain = LLMChain(llm=llm, prompt=QA_CHAIN_PROMPT)document_prompt = PromptTemplate(    template="上下文:
内容:{page_content}
来源:{source}",    input_variables=["page_content", "source"])qa = RetrievalQA(    combine_documents_chain=StuffDocumentsChain(        llm_chain=llm_chain,        document_prompt=document_prompt    ),    retriever=retriever)
登录后复制第七步:做个网页界面

用 Streamlit 做一个简单的网页,用户可以输入问题,系统会实时返回答案。

代码语言:javascript代码运行次数:0运行复制
user_input = st.text_input("向你的PDF提问:")if user_input:    with st.spinner("思考中..."):        response = qa(user_input)["result"]        st.write(response)
登录后复制
使用 DeepSeek 和 Ollama 搭建一个本地知识库系统(包含完整代码)
未来展望

DeepSeek R1 只是开始,未来还会有更多强大的功能,比如:

自我验证:AI 能检查自己的答案对不对。多跳推理:AI 能通过多个步骤推导出复杂问题的答案。总结

用这个系统,你可以轻松地从 PDF 里提取信息,像跟人聊天一样问问题。赶紧试试吧,释放 AI 的潜力!

完整代码可以在我的公众号后台 901 ,获取。

来源:https://www.php.cn/faq/1288076.html
上一篇极速安全管家恢复相册步骤教程 下一篇2025蚂蚁新村4.23今日答案是什么-蚂蚁新村职业知识科普问答答案分享
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
苹果iPhone 16地震预警设置与紧急提醒教程
手机教程 · 2026-07-03

苹果iPhone 16地震预警设置与紧急提醒教程

说个现实情况:iPhone 16本身并不内置原生地震预警功能。国内用户如果想在地震到来前争取到那几十秒的逃生窗口,只能依赖第三方官方App或轻量级的微信小程序。而且,系统设置里那个“政府警报”开关,实际上只对少数国家 地区的运营商生效,在国内基本是个摆设——这一点需要提前有个心理准备。那么,具体怎么

iPhone 18批量删除联系人方法及管理技巧
手机教程 · 2026-07-03

iPhone 18批量删除联系人方法及管理技巧

先说明一个前提:iPhone 18目前尚未发布,市面上能买到的量产机型仍然是iPhone 16系列(截至2026年6月),系统运行的是iOS 17 5或iOS 18开发者测试版。也就是说,本文所有关于“批量删除联系人”的操作方法,都是基于现有iOS 17 5及iCloud服务协议验证可行的原生路径,

苹果17如何关闭照片流功能及隐私安全设置
手机教程 · 2026-07-03

苹果17如何关闭照片流功能及隐私安全设置

你可能还不知道,iPhone 17里藏着一个小功能—— "我的照片流 ",它会在你不知情的时候,把近期拍的照片自动上传到iCloud,再同步到你所有登录了同一Apple ID的设备上。问题来了:如果你的某台设备借给了别人,或者被第三方应用钻了空子,那隐私照片可能就在你没察觉的时候,悄悄溜出去了。 所以,

腾讯课堂如何修改个人昵称设置方法教程
手机教程 · 2026-07-03

腾讯课堂如何修改个人昵称设置方法教程

腾讯课堂修改昵称需在手机APP操作:进入“我的”点击头像,找到“昵称”输入新名称,支持中英文数字及常见符号,不支持空格和emoji。子账号或旧版本可能隐藏入口。保存后实时同步,未更新时刷新或重启即可。

iPhone 18设置特定通知铃声及App声音管理
手机教程 · 2026-07-03

iPhone 18设置特定通知铃声及App声音管理

每个人手机里都有那么几个App,通知音却都是一个调子。微信消息“叮咚”,日历提醒也“叮咚”,实在有些无趣。iPhone 18(搭载iOS 18 1)已经支持为每个App单独设置通知音——你想让微信响起清脆的钢琴音,日历提醒用沉稳的钟声?完全可以实现。不过有个前提:自制音频必须是 m4r格式,时长不超