DeepSeek本地部署及其他应用接入
本文综合了网上的文章及本地自行实践踩坑的记录
1.Ollama安装
实测需要有CUDA11及以上版本支持,不然会报错。因此先把显卡驱动安装好。
由于下载Ollama不方便,我把下载好的Windows版本、Linux版本和Linux版本安装脚本修改版本install.sh一起放网盘分享:https://pan.baidu.com/s/1kkr95WOd3fX1sJhAwmPBdQ?pwd=1314
1.1 Windows上部署Ollama
step1:下载Ollama
下载(https://ollama.com/download)并双击运行 Ollama 应用程序。
step2:修改模型下载位置
默认模型下载在C盘,不想占用系统盘的需要修改
关掉ollama之后,设置环境变量
右键我的电脑-属性-高级系统设置,点击“高级系统设置”
在打开的系统属性界面中点击高级-环境变量
在环境变量界面中点击系统变量中的新建按钮
在跳出来的新建系统变量界面中,变量名设置为:OLLAMA_MODELS,变量值设置为E:\OllamaLLM\models(根据自己想放置的位置),然后点击确定对设置的环境变量进行保存。
step3:验证安装
在命令行输入 ollama,如果出现以下信息,说明 Ollama 已经成功安装。
1.2 Linux上使用
如果要在Linux上安装Ollama,可以按照如下方式,我以Ubuntu20.04为例
官网给出的是安装命令,这个命令会从github自动下载安装,但基本由于网络原因失败。
curl -fsSL https://ollama.com/install.sh | sh
直接访问 ollama github下载最新的版本,目前是0.5.7
先在Linux上确定自己的CPU架构:
lscpu
下载对应的包:
网上说明是直接解压缩后进行一番设置,这里官方的安装脚本已经写得很好,我们只需要修改原始的安装脚本就可以实现自动安装离线包。
从任意位置下载源码中的离线安装脚本,我这里针对的是最新的0.5.7版本:
-
Ollama官网
-
github
-
gittee加速
原始脚本的第69行到88行如下:
for BINDIR in /usr/local/bin /usr/bin /bin; do echo $PATH | grep -q $BINDIR && break || continue done OLLAMA_INSTALL_DIR=$(dirname ${BINDIR}) if [ -d "$OLLAMA_INSTALL_DIR/lib/ollama" ] ; then status "Cleaning up old version at $OLLAMA_INSTALL_DIR/lib/ollama" $SUDO rm -rf "$OLLAMA_INSTALL_DIR/lib/ollama" fi status "Installing ollama to $OLLAMA_INSTALL_DIR" $SUDO install -o0 -g0 -m755 -d $BINDIR $SUDO install -o0 -g0 -m755 -d "$OLLAMA_INSTALL_DIR" status "Downloading Linux ${ARCH} bundle" curl --fail --show-error --location --progress-bar \ "https://ollama.com/download/ollama-linux-${ARCH}.tgz${VER_PARAM}" | \ $SUDO tar -xzf - -C "$OLLAMA_INSTALL_DIR" if [ "$OLLAMA_INSTALL_DIR/bin/ollama" != "$BINDIR/ollama" ] ; then status "Making ollama accessible in the PATH in $BINDIR" $SUDO ln -sf "$OLLAMA_INSTALL_DIR/ollama" "$BINDIR/ollama" fi
这里我对其中进行注释,并对需要修改的地方进行了说明:
# 如果存在旧版本的 ollama,清理旧版本 if [ -d "$OLLAMA_INSTALL_DIR/lib/ollama" ] ; then status "Cleaning up old version at $OLLAMA_INSTALL_DIR/lib/ollama" $SUDO rm -rf "$OLLAMA_INSTALL_DIR/lib/ollama" fi # 创建安装目录 status "Installing ollama to $OLLAMA_INSTALL_DIR" $SUDO install -o0 -g0 -m755 -d $BINDIR $SUDO install -o0 -g0 -m755 -d "$OLLAMA_INSTALL_DIR" # 修改点:跳过下载和解压步骤,直接使用当前目录下的文件 #status "Downloading Linux ${ARCH} bundle" #curl --fail --show-error --location --progress-bar \ # "https://ollama.com/download/ollama-linux-${ARCH}.tgz${VER_PARAM}" | \ # $SUDO tar -xzf - -C "$OLLAMA_INSTALL_DIR" # 新增的脚本如下,用于直接使用当前目录下的文件 status "Copying ollama from current directory to $OLLAMA_INSTALL_DIR" # 假设你已经手动解压了 ollama-linux-amd64.tgz,并且解压后的文件在当前目录下的 ollama-linux-amd64 文件夹中 $SUDO cp -r ./ollama-linux-amd64/* "$OLLAMA_INSTALL_DIR/" # 如果 ollama 可执行文件不在系统的 PATH 中,创建符号链接 if [ "$OLLAMA_INSTALL_DIR/bin/ollama" != "$BINDIR/ollama" ] ; then status "Making ollama accessible in the PATH in $BINDIR" $SUDO ln -sf "$OLLAMA_INSTALL_DIR/ollama" "$BINDIR/ollama" fi
解压缩:
tar -xzf ollama-linux-amd64.tgz -C .
创建ollama-linux-amd64目录并加压缩源码到这个目录,改变install.sh安装脚本执行权限:
mkdir ollama-linux-amd64
sudo tar -xzf ollama-linux-amd64.tgz -C ./ollama-linux-amd64
sudo chmod +x install.sh
直接安装还会报错,原来是每行末尾的回车换行符\r\n,用sed替换后安装:
sudo sed -i 's/\r$//' install.sh
./install.sh
配置环境变量 OLLAMA_MODELS
指向模型存储目录,修改 ~/.bashrc
:
mkdir ~/ollama/OLLAMA_MODELS
vim ~/.bashrc
#在bashrc中最后加入后保存退出
export OLLAMA_MODELS=/home/ollama/OLLAMA_MODELS
source ~/.bashrc
cp -r /usr/share/ollama/.ollama/models /home/ollama/OLLAMA_MODELS
防火墙放通ollama端口:
sudo ufw allow 11434/tcp
启动ollama服务:
sudo ollama serve
停止Ollama服务:
service ollama stop
上面的命令形式关闭中断后ollama就停止了,如果想在后台自动运行,可以如下:
接下来就可以进入step4 拉取想要的模型了
跨域访问
如果想让部署在Ubuntu服务器上的ollama能被网络上的其他主机访问,可以修改ollama.service 文件以允许跨域访问:
sudo vi /etc/systemd/system/ollama.service
将文件内容修改为:
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
[Install]
WantedBy=default.target
重新加载 systemd 守护进程并启用 Ollama 服务:
sudo systemctl daemon-reload
sudo systemctl enable ollama
sudo systemctl start ollama
确认 Ollama 安装成功并运行:
ollama --version
## 2.拉取模型
- 模型拉取
从命令行,参考 Ollama 模型列表 (https://ollama.com/library)和 文本嵌入模型列表 (https://python.langchain.com/v0.2/docs/integrations/text_embedding/)拉取模型。(拉取模型时,可能比较缓慢。如果出现拉取错误,可以重新输入指令拉取)
结合网上资料,各个版本需要的GPU显存如下:
- 1.5b 模型,4GB显存就能跑。
- 7b、8b 模型,8GB显存就能跑。
- 14b 模型,12GB显存能跑。
- 32b 模型,24GB显存能跑。
我尝试了一下1.5B和7B
命令行输入下面的命令会自动拉取模型。对于GPU小的的可以玩下1.5b(模型文件约1.1GB)
ollama run deepseek-r1:1.5b
如果>8GB显存可以尝试7B(模型文件约4.7GB)
ollama run deepseek-r1:7b
拉取完毕后查看模型列表
ollama list
我下载了1.5b和7b模型:
查看正在运行的模型
ollama ps
如果要删除模型
ollama remove 模型名称
拉取完成后就可以直接聊天了:
3.DeepSeek网页端和知识库搭建
step1: 通过Google应用商店在Google浏览器中安装page Assist插件:
Step2:选择本地搭建的模型,点击配置按钮,设置中文
step3:RAG设置,模型选择本地搭建的
到了这一步,也可以进行聊天对话了
更好的是可以联网,突破本地的局限性:
step4:点击左侧管理知识,可以添加本地知识库。
填写知识标题及上传文件,点击提交按钮。
我提供的书名及价格文件只是简单的内容,自己知识库可以搭建更加复杂的内容
书名及价格:
1.《机器学习实战:从零到深度学习》 - 价格:¥129
2.《Python机器学习基础教程》 - 价格:¥99
4.《深度学习与机器学习实战》 - 价格:¥119
5.《机器学习与数据挖掘:算法与应用》 - 价格:¥89
6.《机器学习:经典算法与实战案例》 - 价格:¥109
新建聊天进行测试,在聊天窗口要记得点击右下角知识,选择刚才搭建的知识库名称,然后在上方看到就可以了。
对模型进行测试,看看是否可以根据知识库进行回答。
4.本地DeepSeek接入Pycharm、Vscode
4.1 Pycharm接入本地DeepSeek
在Pycharm中找到文件(File)-设置(Settings)-插件(Plugins),输入CodeGPT,即可点击安装(Install)即可:
安装后重启Pycharm,文件 -> 设置 -> 工具 -> CodeGPT
打开CodeGPT配置
-
在 CodeGPT 的设置界面中,找到与
Ollama
或Local Models
相关的配置选项。 -
确保 Ollama 已正确安装并运行
-
在设置界面中选择
Providers
,找到Ollama (Local)
。 -
在
Ollama (Local)
中选择刚刚安装的deepseek-coder
模型。 -
点击
OK
或Apply
保存设置。
下面就可以愉快的在PyCharm中使用DeepSeek-r1加速编程学习了,左侧是代码编辑界面,右侧是r1大模型,直接对话式提问,省去了来回不同页面折腾的麻烦:
大家再感受DeepSeek-r1:1.5b大模型的回复延时,几乎1秒钟响应,本人电脑是32GB内存,11GB显存,这响应速度可以了。CodeGPT插件显示了Tokens数,有些同学担心这是不是在计费?不是的!只是一个数字统计,无任何费用,因为使用的是本地自己电脑的算力。
另外,CodeGPT应该是目前大模型+编程UI做的最好的插件了,感兴趣的同学可以根据以上步骤安装试试。
4.2 VSCODE中接入本地DeepSeek
VSCODE应用商店中搜索continue
进行安装
选择模型:
可以开始用了:
5. 本地DeepSeek接入Word
配置word
新建一个Word文档,点击 文件 -> 选项 -> 自定义功能区,勾选“开发者工具”。
点击 信任中心 -> 信任中心设置,选择“启用所有宏”与“信任对VBA…”。
接下来点击确定,我们发现选项卡中出现了“开发者工具”,点击开发者工具,点击Visual Basic,将会弹出一个窗口。
我们点击新窗口中的插入,点击模块。
点击后将会弹出一个编辑器,把如下代码复制到编辑区中。
Function CallDeepSeekAPI(api_key As String, inputText As String) As String
Dim API As String
Dim SendTxt As String
Dim Http As Object
Dim status_code As Integer
Dim response As String
' 本地部署的大模型API地址
API = "http://localhost:11434/api/chat"
' 修改请求体为与本地大模型相匹配的格式
SendTxt = "{""model"": ""deepseek-r1:1.5b"", ""messages"": [{""role"":""user"", ""content"":""" & inputText & """}], ""stream"": false}"
Set Http = CreateObject("MSXML2.XMLHTTP")
With Http
.Open "POST", API, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & api_key
.send SendTxt
status_code = .Status
response = .responseText
End With
' 弹出窗口显示 API 响应(调试用)
' MsgBox "API Response: " & response, vbInformation, "Debug Info"
If status_code = 200 Then
CallDeepSeekAPI = response
Else
CallDeepSeekAPI = "Error: " & status_code & " - " & response
End If
Set Http = Nothing
End Function
Sub DeepSeekV3()
Dim api_key As String
Dim inputText As String
Dim response As String
Dim regex As Object
Dim matches As Object
Dim originalSelection As Object
api_key = "pass"
If api_key = "" Then
MsgBox "Please enter the API key."
Exit Sub
ElseIf Selection.Type <> wdSelectionNormal Then
MsgBox "Please select text."
Exit Sub
End If
' 保存原始选中的文本
Set originalSelection = Selection.Range.Duplicate
inputText = Replace(Replace(Replace(Replace(Replace(Selection.Text, "\", "\\"), vbCrLf, ""), vbCr, ""), vbLf, ""), Chr(34), "\""")
response = CallDeepSeekAPI(api_key, inputText)
If Left(response, 5) <> "Error" Then
Set regex = CreateObject("VBScript.RegExp")
' 步骤1:提取大模型回复内容
With regex
.Global = True
.MultiLine = True
.Pattern = """content"":\s*""([\s\S]*?)""" ' 更稳健的提取逻辑
End With
If regex.Test(response) Then
response = regex.Execute(response)(0).SubMatches(0)
' 步骤2:处理Unicode转义字符(如\u003c -> <)
response = Replace(response, "\u003c", "<")
response = Replace(response, "\u003e", ">")
' 步骤3:删除标签及其内容
With regex
.Global = True
.MultiLine = True
.IgnoreCase = True
.Pattern = "[\s\S]*?"
End With
response = regex.Replace(response, "")
' 步骤4:转换\n为实际换行符
response = Replace(response, "\n", vbCrLf)
' 步骤5:移除Markdown格式
With regex
.Global = True
.Pattern = "(#+\s*|\*\*|__|`|\*{1,2}|_{1,2}|~~|^>\s)"
response = .Replace(response, "")
End With
response = regex.Replace(response, "")
' 取消选中原始文本
Selection.Collapse Direction:=wdCollapseEnd
' 将内容插入到选中文字的下一行
Selection.TypeParagraph ' 插入新行
Selection.TypeText Text:=response
' 将光标移回原来选中文本的末尾
originalSelection.Select
Else
MsgBox "Failed to parse API response.", vbExclamation
End If
Else
MsgBox response, vbCritical
End If
End Sub
完成后,可直接关闭弹窗。
点击 文件 -> 选项 -> 自定义功能区,右键开发工具,点击添加新组。
在添加的新建组点击右键,点击重命名。将其命名为DeepSeek,并选择心仪的图标,最后点击确定。
首先选择DeepSeek(自定义),选择左侧的命令为“宏”,找到我们添加的DeepSeekV3,选中后点击添加。
随后,选中添加的命令,右键点击重命名,选择开始符号作为图标,并重命名为“生成”。
最后点击确定。
至此,Word成功接入DeepSeek大模型。
选中文字,点击生成,就可以直接将选中的文本发送给大模型,大模型将会按照你选中的文本,做出响应。
生成效果如下:
为确保配置后的宏不会消失,配置如下:
点击 开发工具 -> 宏。
.
选中我们配置的DeepSeekV3,点击管理器。
选中左侧的模块1,点击复制,右侧将会出现模块1,最后点击关闭。
问题顺利解决,再次重启word后,不会出现宏消失的问题。
6.DeepSeek API接入Word、Pycharm和Vscode
这部分接入需要DeepSeek API Key的支持,但是目前官方暂停了KEY申请,等恢复后补上。应该和本地接入差不多,只是把URL那里换成了官方的key。