1.本地部署
1.1 ollama
Ollama軟件通過其高度優化的推理引擎和先進的內存管理機制,顯著提升了大型語言模型在本地設備上的運行效率。其核心采用了量化技術(Quantization)以降低模型的計算復雜度和存儲需求,同時結合張量并行計算(Tensor Parallelism)和混合精度計算(Mixed Precision Computing),在FP16、INT8等低精度格式下實現高效的數值運算,從而大幅減少顯存占用并加速推理過程。此外,Ollama支持動態批處理(Dynamic Batching)和分布式推理(Distributed Inference),能夠根據輸入請求動態調整資源分配,并通過多GPU或節點間的高效通信協議(如NCCL)實現彈性擴展,突破單機硬件限制。為確保兼容性,Ollama內置了對主流框架(如PyTorch、TensorFlow)的支持,并通過ONNX Runtime和TensorRT進一步優化模型性能,同時提供靈活的API接口和模塊化設計,允許用戶進行自定義微調(Fine-tuning)和Prompt工程,滿足多樣化應用場景需求。
1.1.1 下載安裝
https://ollama.com/download
雙擊打開安裝,ollama默認只能安裝在C盤,占用:4.6G 空間。
C:\用戶\用戶名稱\AppData\Local\Programs\Ollama
我的電腦中安裝目錄:C:\Users\Administrator\AppData\Local\Programs\Ollama
1.1.2 環境變量
默認ollama去下載部署deepseek模型時,會放在C盤 C:\Users\Administrator\.ollama\models
文件夾中。修改環境變量,可以讓后續模型下載到其他盤符。
OLLAMA_MODELS D:\ollama\models
配置好之后,ollama重啟 或 重啟電腦 讓環境變量生效。
1.2 deepseek部署
https://ollama.com/library/deepseek-r1
根據自己電腦配置部署模型規模
模型規模 | 硬盤 | 顯存需求 | 內存 | 顯卡要求 |
---|---|---|---|---|
1.5B | 1.1 GB | ~2-3 GB | ~4-6 GB | 單卡(RTX 3060/3090/4090) |
7B | 4.7 GB | ~8-12 GB | ~16-24 GB | 單卡(RTX 3090/4090/A100) |
8B | 4.9 GB | ~9-13 GB | ~18-26 GB | 單卡(RTX 3090/4090/A100) |
14B | 9.0 GB | ~16-20 GB | ~32-40 GB | 單卡(A100 40GB) |
32B | 20 GB | ~35-45 GB | ~70-90 GB | 單卡(A100 80GB)或多卡并行 |
70B | 43 GB | ~75-90 GB | ~150-180 GB | 多卡(A100/H100 + NVLink) |
671B | 404 GB | ~700-900 GB | ~1.4-1.8 TB | 多卡集群(A100/H100 + NVLink) |
執行命令本地部署:
ollama run deepseek-r1:1.5b
2.deepseek調用
ollama中的服務可以用兩種方式啟動,默認監聽本機localhost 和 端口11434
- 在終端執行命令: ollama serve
- 找到ollama圖標,點擊運行
2.1 終端調用
C:\Users\Administrator>ollama list
NAME ID SIZE MODIFIED
deepseek-r1:1.5b a42b25d8c10a 1.1 GB 4 hours ago
C:\Users\Administrator>ollama run deepseek-r1:1.5b
>>>
>>> 學習python的路徑?
<think>
好吧,我現在要學習Python了。我對它還不是很了解,所以得一步一步來。首先,我應該確定我的學習目標是什么。可能是從基礎開始,比如語
法和基本概念,然后逐步深入到更高級的內容。
...
>>> /bye
2.2 API調用
對話相關的API有兩個:
- /api/generate,用于一次性生成特定文本的場景。
- /api/chat,針對多輪對話上下文生成的回復消息。
接下來,結合案例來使用API來調用,需要安裝Python環境 和 requests 模塊。
示例:/api/generate
該 API 主要用于基于給定的提示信息生成文本內容。它適用于一次性生成特定文本的場景,不涉及對話上下文的維護.請求參數model:要使用的模型名稱,例如 `deepseek-r1:1.5b`。prompt:提示信息,即向模型提供的輸入文本,模型會根據該提示生成相應的內容。可選參數:還可以包含其他參數來控制生成的行為,如 `temperature`(控制生成文本的隨機性,值越大越隨機)、`max_tokens`(限制生成文本的最大令牌數)等。示例請求體{"model": "llama2","prompt": "寫一首關于春天的詩","temperature": 0.7,"max_tokens": 200}
import requestsres = requests.post(url="http://localhost:11434/api/generate",json={"model": "deepseek-r1:1.5b","prompt": "寫一首關于春天的詩","stream": False}
)data_dict = res.json()
print(data_dict)
示例:/api/chat
用于模擬對話交互,它會維護對話的上下文,使得模型能夠根據之前的對話內容生成合適的回復,實現更自然、連貫的對話效果。請求參數model:要使用的模型名稱。messages:一個包含對話消息的列表,每個消息對象包含 role(角色,如 user 表示用戶消息,assistant 表示模型回復)和 content(消息內容)。同樣可以包含可選參數來控制生成行為。示例請求體{"model": "deepseek-r1:1.5b","messages": [{"role": "user","content": "你好"}],"temperature": 0.8}
import requestsres = requests.post(url="http://localhost:11434/api/chat",json={"model": "deepseek-r1:1.5b","messages": [{"role": "user", "content": "你好"}],"stream": False}
)
data_dict = res.json()
print(data_dict)
可以將對話保存下來,生成對話:
import requestsmessage_list = []while True:text = input("請輸入:")user_dict = {"role": "user", "content": text}message_list.append(user_dict)res = requests.post(url="http://localhost:11434/api/chat",json={"model": "deepseek-r1:1.5b","messages": message_list,"stream": False})data_dict = res.json()res_msg_dict = data_dict['message']print(res_msg_dict)message_list.append(res_msg_dict)
2.3 網頁交互
搭建一個網站,在內部進行訪問使用。
第1步:電腦安裝nodejs
https://nodejs.org/zh-cn/download
第2步:下載網站源碼
https://github.com/ollama-webui/ollama-webui-lite
下載并解壓至任意目錄。例如:F:\ollama-webui-lite-main 【不要有中文路徑】
第3步:安裝依賴并啟動網站
打開CMD終端進入項目目錄并執行相關命令。
C:\Users\Administrator>F:
F:\>cd F:\ollama-webui-lite-main
F:\ollama-webui-lite-main>
F:\ollama-webui-lite-main>npm ci
F:\ollama-webui-lite-main>npm run dev -- --port=9001
訪問網站:http://localhost:9001/
3.微信收發信息
wxauto 是一個基于UIAutomation開發的用于實現微信自動化得庫。
消息發送:支持發送文字、圖片、文件、@群好友、引用消息等功能
聊天記錄:可獲取好友的聊天記錄內容
監聽消息:實時獲取指定監聽好友(群)的新消息
所用開發環境:Python 3.12.6 + PC微信 3.9.12(目前最新)
實現原理:在電腦安裝PC微信,基于wxauto自動控制微信界面來實現收發消息等功能。
安裝wxauto
pip install wxauto==3.9.11.17.5
發消息
from wxauto import WeChat
wx = WeChat()
wx.SendMsg(msg="你好呀", who="xxx_888") # 指定人/群發消息# wx.SendMsg(msg="你好呀", who="群名", at=["張三","張開"]) # 群消息+@指定人
# wx.SendMsg(filepath="F:\xxx.png", who="用戶或群")
# wx.SendMsg(filepath=["文件A","文件B","F:\xxx.png"], who="用戶或群")
收消息(所有)
from wxauto import WeChatwx = WeChat()while True:# 等待接受收到的最新消息# {"用戶昵稱A":[消息對象1,消息對象2,消息對象3], "用戶昵稱B":[消息對象1,消息對象2,消息對象3], }msg_dict = wx.GetNextNewMessage()for username, msg_list in msg_dict.items():print("昵稱:", username)# [消息對象1, 消息對象2, 消息對象3]for msg in msg_list:print("\t消息", msg.type, msg.content)
收消息(指定用戶)
from wxauto import WeChat
wx = WeChat()wx.AddListenChat(who="運營")
wx.AddListenChat(who="xxx_888")while True:# { "用戶A聊天窗口":[消息對象1,消息對象2,消息對象3], "用戶B聊天窗口":[消息對象1,消息對象2,消息對象3]}listen_dict = wx.GetListenMessage()for chat_win,message_list in listen_dict.items():# 用戶或群名chat_user = chat_win.who# [消息對象1,消息對象2,消息對象3]for msg in message_list:if msg.type != "friend":continueprint(chat_user, msg.content)# 回復消息# chat_win.SendMsg("回復的內容")time.sleep(5)
👏歡迎貢獻代碼和改進項目!