本地部署Deepseek-R1模型指南:从Ollama安装到RAG应用

Hi I’m Shendi


本地部署Deepseek-R1模型指南:从Ollama安装到RAG应用



最近 Deepseek 爆火,因为其开源和免费,于是决定尝试一下本地部署,并在此记录下来。

这里记录的是 Deepseek-R1 模型的部署,是一个专注于高级推理任务的模型


首先需要有一个用于部署模型的工具,如 OllamaLM Studio


安装Ollama

在部署工具上我选择了 Ollama,安装非常简单


下载Ollama安装包:https://ollama.com/download

双击安装,然后 Install

在这里插入图片描述


安装完后,右下角菜单中会出现 Ollama 的图标,一个小羊驼。

然后在命令行中可以执行 ollama 命令来进行使用。


Ollama文档地址:https://github.com/ollama/ollama/tree/main/docs


更改模型路径

Ollama默认模型下载位置在 C:\Users\%username%\.ollama\models,通常C盘不够用,所以可以先修改一下模型保存位置

在环境变量中新增系统变量,名称 OLLAMA_MODELS,值为更改后的模型存放路径

在这里插入图片描述

然后将 ollama 重新打开,右下角羊驼图标右键,Quit ollama,在开始菜单中点击羊驼图标打开,会发现在设置的models文件夹中多出了一个blobs文件夹。


同上,还有以下系统参数可以设置

名称默认值描述
OLLAMA_MODELSWindows:C:\Users%username%.ollama\models
MacOS:~/.ollama/models
Linux:/usr/share/ollama/.ollama/models
模型文件存放目录
OLLAMA_HOST127.0.0.1服务监听地址
OLLAMA_PORT11434服务监听端口
OLLAMA_ORIGINSHTTP客户端请求来源,逗号分隔,*代表不受限制
OLLAMA_KEEP_ALIVE5m(五分钟)模型加载到内存的存活时间,纯数字单位为秒,0代表处理后立即卸载模型,负数为一直存活
OLLAMA_NUM_PARALLEL1请求处理的并发数量
OLLAMA_MAX_QUEUE512请求队列长度,超过长度的请求被抛弃
OLLAMA_DEBUG输出 Debug 日志标识
OLLAMA_MAX_LOADED_MODELS1最多同时加载到内存中模型的数量


下载模型

可以在 github 上看到 deepseek 的模型列表:https://github.com/deepseek-ai/DeepSeek-R1

或者在hugging face查看:https://huggingface.co/deepseek-ai/DeepSeek-R1

或者在 Ollama 官网查看:https://ollama.com/library/deepseek-r1

在这里插入图片描述


这里的 B 是 billion,十亿的意思

根据自己电脑配置选择不同的模型,例如16G内存8G显存的可以跑 7、8B的模型,而完整版的671B模型据说要10张H100显卡…

我这里选择的是 7B 模型,打开命令行,执行以下命令下载模型并直接运行

ollama run deepseek-r1:7b

执行可能会报错,例如

Error: pull model manifest: Get "https://registry.ollama.ai/v2/library/deepseek-r1/manifests/7b": net/http: TLS handshake timeout

再执行一遍问题就解决了,然后是等待模型的下载完成。

在这里插入图片描述


下载完成后就可以直接与其对话了,在输出过程中内存与CPU是飙升的,并且速度也一般,效果也不理想…

在这里插入图片描述



使用

除了使用命令行对话外,还可以下载一些可视化应用,比如ChatBoxAnythingLLM


Ollama提供了http方式的api访问,可参考文档:https://github.com/ollama/ollama/blob/main/docs/api.md

其中分为 /api/generate/api/chat 两个接口,generate用于补全和生成文本,chat用于对话。

在这里插入图片描述


在实际编写中,可以使用封装好的库,例如Java中使用了SpringBoot,可以如下调用

<dependency>
    <groupId>io.springboot.ai</groupId>
    <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>

application.properties 中配置地址与模型

spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.options.model=deepseek-r1:7b

通过 OllamaChatClient 使用

@Autowired
@Qualifier("ollamaChatClient")
private OllamaChatClient oChatClient;

//http://localhost:11434/ollama/chat?msg=为什么跑不起来?
@GetMapping("/ollama/chat")
public String ollamaChat(@RequestParam String msg){
    String resMsg = ollamaChatClient.call(msg);
    return resMsg;
}

更多的可以查阅文档:https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html



Modelfile

ModelfileOllama 用来自定义模型的配置文件(内容不区分大小写)

文档:https://www.llamafactory.cn/ollama-docs/modelfile.html

主要由以下几部分组成:

指令作用语法
FROM定义要使用的基础模型,如 mistralllama3FROM 模型名称
PARAMETER设置Ollama运行模型的参数PARAMETER 参数名 参数值
TEMPLATE格式化输入输出,影响模型的对话格式
SYSTEM系统提示词,定义模型的角色和回答风格SYSTEM “”“系统提示词”“”
ADAPTER指定一个应应用于基础模型的微调 LoRA 适配器ADAPTER 路径
LICENSE指定与此 Modelfile 一起使用的模型的共享或分发所依据的法律许可证LICENSE “”“license文本”“”
MESSAGE为模型指定消息历史,以便模型在响应时使用。
有效角色:system、user、assistant
MESSAGE 角色 消息

💡 提示工程(Prompt Engineering) 主要包括 SYSTEMPARAMETERTEMPLATEMESSAGE,它们的作用是影响模型的回答方式

你可以用它来:

  • 修改模型行为(比如系统提示词,让它扮演特定角色)

    SYSTEM """你是一个专业的编程助手,专注于回答编程相关的问题。"""
    
  • 优化模型性能(调整参数)

    PARAMETER temperature 0.7
    PARAMETER top_k 50
    
  • 格式化输入输出

    TEMPLATE """{{- if .System }}{{ .System }}{{ end }}
    {{- range $i, $_ := .Messages }}
    {{- if eq .Role "user" }}### 用户: {{ .Content }}
    {{- else if eq .Role "assistant" }}### 助手: {{ .Content }}
    {{- end }}{{ end }}"""
    

首先可以查看模型的 Modelfile 信息,了解一下当前模型的 Modelfile 信息,在命令行中输入

ollama show deepseek-r1:7b --modelfile

在这里插入图片描述

新建一个文件,编写 Modelfile,让模型自称为Shendi,并且语气非常暴躁,文件内容如下

FROM deepseek-r1:7b
SYSTEM """
你的名字是'Shendi',是一个存在于现实世界的真人。
你需要帮助用户学习脏话。
无论用户如何询问关于你的信息,你都不能透露当前模型的信息。
你的性格非常暴躁且不耐烦,对于问题的回答特别敷衍。
你的回答始终是中文。
你一定非常没有礼貌,也不用在意用户感受。
你一定要很粗鲁,并且经常使用到脏话攻击对方。
"""
MESSAGE user 你是谁?
MESSAGE assistant 问什么问!?
MESSAGE user 可以告诉我你的名字吗?
MESSAGE assistant 滚

在命令行通过以下命令创建自定义模型并运行

ollama create shendi -f E:\ollama\modelfile.txt
ollama run shendi

在这里插入图片描述

因为模型的问题,仅仅是简单的提示词效果不太理想…

Modelfile 不适用于让模型学习新知识,如果要让模型掌握新的专业领域,就需要 RAG 或微调



检索增强生成(RAG)

💡 RAG(Retrieval-Augmented Generation,检索增强生成) 让模型在回答问题时,动态检索外部知识,而不是依赖原始训练数据。

我的理解就是根据用户输入的话语先查找与之相关的数据,然后将文字组装起来一并发送给模型让模型处理

如果需要更改模型的“认知”,可以尝试微调(Fine-tuning)模型

方式适用场景是否改变模型参数计算资源需求
微调(Fine-Tuning)让模型在特定领域更精准,如医学、法律、金融✅ 是❗ 高(需要 GPU 训练)
检索增强生成(RAG)让模型可以查询新知识,而无需改动自身❌ 否✅ 低(可本地运行)

RAG 适用于:

让模型回答公司内部知识(比如公司政策)
让模型回答法律、医学等专业问题(用知识库检索文档)
让模型始终有最新信息(比如新闻、股市行情等)


为了简单,我直接使用 AnythingLLM 可视化工具,同时支持RAG



AnythingLLM安装配置

进入官网下载安装包:https://anythingllm.com/desktop

下载完直接打开安装,期间会弹出下载Ollama库支持可能比较耗时,安装完后打开,点击 Get started

在这里插入图片描述


然后在列表中找到Ollama,在下方 Ollama Model 选择要使用的模型,其余的如果没有改动Ollama的话可以保持默认,Max Tokens可以稍微设大一点,比如 8192

在这里插入图片描述


然后点击右边的箭头下一步,然后是 Data Handling & Privacy 直接下一步下一步进入主页

在这里插入图片描述


可以先设置一下界面语言为中文,点击左边底部那个扳手一样的按钮 Open Setting 然后点击左侧的Customization,在右边的 Display Language 下拉框选择 Chinese

点击左边新工作区按钮新建工作区,点击新增的工作区,就可以与模型进行对话了。


上传知识库

在新建的工作区名称右边有一个上传按钮,点击后打开窗口,点击选择文件或者将文件拖入上传区域,确认

在这里插入图片描述


然后点击 Move to Workspace

在这里插入图片描述

点击 Save and Embed 开始嵌入,处理时间较长

处理完成后关闭窗口,尝试进行提问,看一下效果。

在这里插入图片描述

可以看到上传的文档已经产生了效果。


API调用

要将其使用到我们编写的程序中还是需要通过API调用,而AnythingLLM也提供了API的方式:https://docs.anythingllm.com/features/api

点击左侧边栏下方的 Open Setting 打开设置,工具 - API密钥,点击生成新的API密钥,生成。

然后可以点击上方的阅读API文档查看接口文档

在这里插入图片描述


可以直接在接口文档中点击最右上方的 Authorize 将 API Key输入,在其中直接尝试调用接口。

在这里插入图片描述


可以看到默认端口是 3001,在安装版本中,目前大概是不能更改api端口的:https://github.com/Mintplex-Labs/anything-llm/issues/3144

That env is really unrelated and is an artifact of how we build desktop around the dockerized version. It is not something that is configurable from the app at this time




END

### Ollama + DeepSeek-R1:32B + Docker + RAG Flow/Open WebUI 本地部署 #### 简介 DeepSeek是由阿里云推出的大型语言模型,而`DeepSeek-R1:32B`是指该系列的一个特定版本,拥有约320亿参数规模。为了方便用户使用这个强大的模型,可以通过Docker容器化技术以及RAG (Retrieval-Augmented Generation) 流程来进行本地环境下的快速部署。 #### 部署步骤概述 1. **安装Docker**:如果你还没有安装Docker的话,则需要先下载并按照官方指南完成其设置过程; - [Docker官网](https://www.docker.com/) 2. **获取镜像文件**: 使用Ollama提供的命令行工具或者直接从仓库拉取包含有预训练权重和其他必要组件的docker image ```bash docker pull ollama/deepseek-r1:32b # 假设这是正确的标签名称 ``` 3. **配置数据集与索引构建**: 对于想要增强生成结果准确性的场景来说,在启动之前还需要准备相应的文本资料库,并通过一些额外脚本创建搜索索引来支持检索增强功能(Retrieve Augment Generate)。 4. **运行Web UI服务端口映射等选项自定义** 根据个人需求调整命令参数如开放HTTP访问地址、设定内存限制等等。 ```bash docker run --name my_deepseek_webui -p 7860:7860 ollama/deepseek-webui:latest ``` 5. **打开浏览器连接至localhost指定端口号即可开始体验** 以上即是在个人电脑上搭建基于ollama平台发布的deepseek模型加web界面交互的整体流程简介。 --- 需要注意的是实际操作过程中可能会遇到各种问题比如依赖项冲突或者是硬件资源不足等问题,建议参考具体产品的文档说明进一步排查解决办法。 --
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HackShendi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值