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 下載模型的位置。