DeepSeek可以在网页端使用,但是有些时候可能不是很稳定,除了网页端,也能通过本地部署来使用。
一、Ollama本地安装Deepseek R1 模型
Ollama官网:https://ollama.com/,打开官网,然后点击下载,之后安装到本地。但默认从github下载比较慢,可以用这个github加速: https://ghfast.top/
打开网页并输入如下下载链接:https://github.com/ollama/ollama/releases/latest/download/OllamaSetup.exe
然后点击下载
按钮,之后安装exe文件到本地,Ollama的大模型默认下到C盘,对空间占用比较大确保C盘空间够大。
如何更改?见后面附录描述。
官方建议:应该至少有 8 GB 可用 RAM 来运行 7 B 型号,16 GB 来运行 13 B 型号,32 GB 来运行 33 B 型号。
然后打开Ollama 的模型列表,搜索到DeepSeek R1,
https://ollama.com/library/deepseek-r1
像我们普通的电脑安装1.5B、7B就可以使用,然后在【右上角的的代码】复制在命令行中运行。
输入【
ollama list
】,就可以查看安装的模型。ollama run deepseek-r1:1.5b
启动模型,run后面的参数是上图的模型名称。第一次运行会下载相关的镜像文件。安装需要一段时间,我们等一下就可以等success,就代表安装成功。 第二次运行无需下载过程,直接进入命令行交互页面。
测试一下问答效果:
API方式调用DeepSeek:
curl http://localhost:11434/api/generate -d "{\"model\":\"deepseek-r1:1.5b\", \"prompt\":\"介绍一下大模型在2025年有哪些亮点?\", \"stream\": false}"
接口请求支持 stream 模式,上边这个请求响应 10s 左右,如果使用 stream 模式,体验会更好。
curl http://localhost:11434/api/generate -d "{\"model\":\"deepseek-r1:1.5b\", \"prompt\":\"介绍一下大模型在2025年有哪些亮点?\", \"stream\": true}"
二、其他命令
ollama serve
Start ollama
运行之后,访问 localhost:11434,查看Ollama是否正常运行:
ollama show deepseek-r1:1.5b
Show information for a model
ollama ps
List running models
ollama stop
Stop a running model
三、Ollama运行本地模型
Ollama 通常支持 GGUF 等格式的模型,而 .pt
文件一般是 PyTorch 保存的模型文件,不能直接被 Ollama 使用。若要使用 Ollama 与本地 .pt
模型进行交互,需要将 .pt
模型转换为 Ollama 支持的格式。
import torch
# 加载 .pt 模型
try:
# 设置 weights_only=True 来加载模型权重
model_pt = torch.load('GuoPT.pt', weights_only=True)
except Exception as e:
print(f"加载模型时出现错误: {e}")
# 这里需要根据具体模型架构和 GGUF 格式要求进行处理
# 例如,提取模型的权重、偏置等参数,并按照 GGUF 格式进行存储
# 由于 GGUF 格式较为复杂,具体实现需要参考相关文档和规范
# 保存转换后的模型
# 这里只是示例,实际保存为 GGUF 格式需要更详细的处理
torch.save(model_pt, 'converted_model.gguf')
得到转换后的模型文件。
3.1 将转换后的模型添加到 Ollama
转换完成后,将转换后的 GGUF 模型添加到 Ollama 中。在终端中输入以下命令启动 Ollama 服务:
ollama serve
创建Modelfile文件:
在你的工作目录中创建一个名为Modelfile的文本文件(扩展名可以省略)。在文件中写入一句话,指定GGUF模型文件的路径。例如:FROM ./path/to/your-model.gguf
。
创建Ollama模型:打开终端或命令行界面,运行以下命令来创建Ollama模型:
ollama create my_llama_model -f Modelfile
其中,my_llama_model是你为模型指定的名称,-f选项后面跟的是Modelfile文件的路径。
检查模型是否创建成功:运行以下命令来检查Ollama中是否已包含你创建的模型:
ollama list
你应该能在列表中看到你的模型名称。
运行模型:一旦模型创建成功,你就可以使用以下命令来运行它:
ollama run my_llama_model
此时,Ollama将加载你指定的GGUF模型文件,并运行该模型。
3.2 使用 Ollama 与模型进行交互
3.2.1 命令行交互
添加模型成功后,在终端中使用 ollama run
命令与模型进行交互:
ollama run my_converted_model
输入问题后,按下回车键,模型会生成相应的回答。若要结束交互,按下 Ctrl + C
。
3.2.2 API 交互
也可以通过 API 的方式与模型进行交互,以下是一个 Python 示例:
import requests
url = "http://localhost:11434/api/generate"
data = {
"model": "my_converted_model",
"prompt": "请介绍一下人工智能",
"stream": False
}
response = requests.post(url, json=data)
if response.status_code == 200:
result = response.json()
print(result["response"])
else:
print(f"请求失败,状态码: {response.status_code}")
3.2.3 Web页面交互
Ollama有个开源的WebUI,但是需要安装Node.js、Docker等。索性自己写了一个轻量级的前端页面与DeepSeek R1交互(实质是与Ollama的API进行交互,API的入参指定模型名称)。
如果页面直接请求http://localhost:11434/api/generate
会有跨域问题,后端会拒绝页面请求。由于我们无法修改Ollama的代码,结合上面我们通过Python代码调用正常,我们用Python写个代理服务器,让页面请求代理(下述代码执行了CORS(app) # 允许所有来源的跨域请求),代理再请求后端API。
使用 Flask 包装 Ollama 的 API,代理服务器文件名:OllamaProxy.py,具体代码:
from flask import Flask, request, jsonify
from flask_cors import CORS
import requests
app = Flask(__name__)
CORS(app) # 允许所有来源的跨域请求
@app.route('/api/generate', methods=['POST'])
def generate():
data = request.get_json()
url = "http://localhost:11434/api/generate"
response = requests.post(url, json=data)
if response.status_code == 200:
result = response.json()
return jsonify(result)
else:
return jsonify({"error": f"请求失败,状态码: {response.status_code}"}), response.status_code
if __name__ == '__main__':
app.run(host='localhost', port=5000) # 可以选择不同的端口
启动代理服务器:python OllamaProxy.py
。
JS代码:
// 获取 DOM 元素
const chatContainer = document.getElementById('chat-container');
const userInput = document.getElementById('user-input');
const sendButton = document.getElementById('send-button');
// 发送消息的函数
function sendMessage() {
const message = userInput.value.trim();
if (message === '') return;
// 显示用户输入的消息
displayMessage(message, 'user');
// 清空输入框
userInput.value = '';
// 构建请求数据
const data = {
model: "deepseek-r1:7b",
prompt: message,
stream: false
};
// 发送 POST 请求到后端 API
fetch("http://localhost:5000/api/generate", {
method: 'POST',
// mode: 'no-cors',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
.then(response => {
if (!response.ok) {
throw new Error(`请求失败,状态码: ${response.statusCode}`);
}
return response.json();
})
.then(result => {
// 显示大模型的响应消息
displayMessage(result.response, 'bot');
})
.catch(error => {
// 显示错误消息
displayMessage(error.message, 'bot');
});
}
// 显示消息的函数
function displayMessage(message, sender) {
const messageElement = document.createElement('div');
messageElement.classList.add(`${sender}-message`);
messageElement.textContent = message;
chatContainer.appendChild(messageElement);
// 滚动到最新消息
chatContainer.scrollTop = chatContainer.scrollHeight;
}
// 为发送按钮添加点击事件监听器
sendButton.addEventListener('click', sendMessage);
// 为输入框添加按键事件监听器,当按下回车键时发送消息
userInput.addEventListener('keydown', function (event) {
if (event.key === 'Enter') {
sendMessage();
}
});
Html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>大模型交互界面</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
flex-direction: column;
align-items: center;
padding: 20px;
}
#chat-container {
width: 400px;
border: 1px solid #ccc;
border-radius: 5px;
padding: 10px;
margin-bottom: 20px;
max-height: 400px;
overflow-y: auto;
}
#input-container {
display: flex;
width: 400px;
}
#user-input {
flex: 1;
padding: 10px;
border: 1px solid #ccc;
border-radius: 5px 0 0 5px;
}
#send-button {
padding: 10px 20px;
background-color: #007BFF;
color: white;
border: none;
border-radius: 0 5px 5px 0;
cursor: pointer;
}
#send-button:hover {
background-color: #0056b3;
}
.user-message {
background-color: #e0f7fa;
padding: 8px;
margin: 5px 0;
border-radius: 5px;
text-align: right;
}
.bot-message {
background-color: #f1f8e9;
padding: 8px;
margin: 5px 0;
border-radius: 5px;
text-align: left;
}
</style>
</head>
<body>
<div id="chat-container">
<!-- 聊天消息将显示在这里 -->
</div>
<div id="input-container">
<input type="text" id="user-input" placeholder="输入你的问题">
<button id="send-button">发送</button>
</div>
<script src="script.js"></script>
</body>
</html>
js和html文件在同一目录,结构如下:
使用浏览器打开本地的index.html页面进行交互。
四、附录
在 Ollama 中,你可以通过设置环境变量来修改模型的下载位置。以下是详细的步骤和示例:
步骤
关闭正在运行的 Ollama 服务:在修改模型下载位置之前,需要先确保 Ollama 服务没有在运行,避免出现冲突。
设置环境变量:通过设置
OLLAMA_MODELS
环境变量来指定模型的下载位置。不同的操作系统设置环境变量的方法有所不同,下面分别介绍。
在 Linux 或 macOS 系统上
你可以通过以下几种方式设置环境变量:
临时设置(当前终端会话有效):
打开终端,输入以下命令,将 /new/path/to/models
替换为你想要的模型存储路径:
export OLLAMA_MODELS=/new/path/to/models
然后启动 Ollama 服务:
ollama serve
在这个终端会话中,Ollama 会将模型下载到你指定的新路径。
永久设置:
如果你希望每次启动系统时都自动设置该环境变量,可以将设置命令添加到 shell 的配置文件中。例如,对于大多数 Linux 用户和 macOS 用户,如果你使用的是 Bash shell,可以编辑 ~/.bashrc
文件;如果你使用的是 Zsh shell,可以编辑 ~/.zshrc
文件。
echo 'export OLLAMA_MODELS=/new/path/to/models' >> ~/.bashrc # 对于 Bash
# 或者
echo 'export OLLAMA_MODELS=/new/path/to/models' >> ~/.zshrc # 对于 Zsh
然后使配置文件生效:
source ~/.bashrc # 对于 Bash
# 或者
source ~/.zshrc # 对于 Zsh
最后启动 Ollama 服务:
ollama serve
在 Windows 系统上
临时设置(当前命令提示符会话有效):
打开命令提示符,输入以下命令,将 C:\new\path\to\models
替换为你想要的模型存储路径:
set OLLAMA_MODELS=C:\new\path\to\models
然后启动 Ollama 服务:
ollama serve
永久设置:
你可以通过系统的环境变量设置界面来永久设置 OLLAMA_MODELS
环境变量。步骤如下:
- 右键点击“此电脑”,选择“属性”。
- 点击“高级系统设置”。
- 在“系统属性”窗口中,点击“环境变量”按钮。
- 在“系统变量”部分,点击“新建”。
- 在“变量名”输入框中输入
OLLAMA_MODELS
,在“变量值”输入框中输入你想要的模型存储路径,例如C:\new\path\to\models
。 - 点击“确定”保存设置。
- 重新打开命令提示符,启动 Ollama 服务:
ollama serve
-
下载模型:设置好环境变量并启动 Ollama 服务后,当你使用
ollama pull
命令下载模型时,模型将被下载到你指定的新位置。例如:
ollama pull llama2
通过以上步骤,你就可以成功修改 Ollama 下载模型的位置。