Ollama实现deepseek本地部署
- 1.Ollama下载与安装
- 2.ollama获取模型并部署
- 2.1 使用ollama pull
- 2.2 通过ollama create 创建自定义模型
- 2.3 本地运行
- 3.使用streamlit实现网页版RAG部署
- 3.1 加载相关包
- 3.2 文档上传、加载与切块
- 3.3 初始化向量存储
- 3.4 初始化向量存储
- 3.5 加载模型,构建chain
- 3.6 对话框中输入文本,实现网页问答。
- 参考文献
1.Ollama下载与安装
可通过Ollama官方网站 下载Ollama
。
退出Ollama,参考Ollama-Windows安装Ollama 进行配置。
主要为自定义models默认文件夹:
打开「系统环境变量」,新建一个系统变量OLLAMA_MODELS ,然后设置ollama模型的存储路径。
cmd
中输入ollama
,验证是否安装成功。
2.ollama获取模型并部署
以deepseek-r1:1.5b
为例。
获取模型可以通过2.1
或者2.2
实现。
2.1 使用ollama pull
ollama pull deepseek-r1:1.5b
2.2 通过ollama create 创建自定义模型
以从魔塔社区下载DeepSeek-R1-Distill-Qwen-1.5B-Q8_0.gguf
为例。
参考【Ollama入门指南】在本地运行大模型,我们应该怎么做 以及 如何用Ollama直接加载官网没有的本地大模型:
创建一个配置文件Modelfile
:
FROM E:\LLM\ollama\models\DeepSeek-R1-Distill-Qwen-1.5B-Q8_0.ggufTEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>{{ end }}<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
"""
PARAMETER stop "<|im_start|>"
PARAMETER stop "<|im_end|>"
使用命令创建一个自定义的模型(注意ModelFile
的相对路径和绝对路径):
ollama create DeepSeek-R1-Distill-Qwen-1.5B-Q8_0 -f Modelfile
使用ollama list
查看模型。
2.3 本地运行
ollama run deepseek-r1:1.5b
3.使用streamlit实现网页版RAG部署
参考 手把手带你用DeepSeek-R1和Ollama搭建本地应用,一文搞定! 以及 Build a RAG System with DeepSeek R1 & Ollama,实现streamlit
网页版RAG
部署。
3.1 加载相关包
import streamlit as st
from langchain_community.document_loaders import PDFPlumberLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddingsfrom langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplatefrom langchain_core.runnables import RunnablePassthroughimport chromadb.api
chromadb.api.client.SharedSystemClient.clear_system_cache()
3.2 文档上传、加载与切块
# Streamlit file uploader
docs = None
uploaded_file = st.file_uploader("Upload a PDF file", type="pdf")
if uploaded_file:# Save PDF temporarilywith open("temp.pdf", "wb") as f:f.write(uploaded_file.getvalue())# Load PDF textloader = PDFPlumberLoader("temp.pdf")docs = loader.load()
if docs:text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)all_splits = text_splitter.split_documents(docs)
3.3 初始化向量存储
local_embeddings = OllamaEmbeddings(model="nomic-embed-text")vectorstore = Chroma.from_documents(documents=all_splits, embedding=local_embeddings)
3.4 初始化向量存储
local_embeddings = OllamaEmbeddings(model="nomic-embed-text")vectorstore = Chroma.from_documents(documents=all_splits, embedding=local_embeddings)
3.5 加载模型,构建chain
model = ChatOllama(model="deepseek-r1:1.5b",)# 将传入的文档转换成字符串的形式def format_docs(docs):return "\n\n".join(doc.page_content for doc in docs)#%% retriever # Craft the prompt templateRAG_TEMPLATE = """You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.<context>{context}</context>Answer the following question:{question}"""rag_prompt = ChatPromptTemplate.from_template(RAG_TEMPLATE)retriever = vectorstore.as_retriever()qa_chain = ({"context": retriever | format_docs, "question": RunnablePassthrough()}| rag_prompt| model| StrOutputParser())
3.6 对话框中输入文本,实现网页问答。
#%% Launch the Web Interface# Streamlit UIuser_input = st.text_input("Ask your PDF a question:")if user_input:with st.spinner("Thinking..."):response = qa_chain.invoke(user_input) # qa(user_input)["result"]st.write(response)
效果如下:
参考文献
[1] Ollama-Windows安装Ollama
[2] 【Ollama入门指南】在本地运行大模型,我们应该怎么做?
[3] 如何用Ollama直接加载官网没有的本地大模型
[4] 魔塔社区
[5] 手把手带你用DeepSeek-R1和Ollama搭建本地应用,一文搞定!
[6] Build a RAG System with DeepSeek R1 & Ollama
[7] handy-ollama/notebook/C7/DeepSeek_R1_RAG/使用 DeepSeek R1 和 Ollama 实现本地 RAG 应用.ipynb