回顧?
書接上篇:各種方式搭建了本地知識庫:
AI入門:AI模型管家婆ollama的安裝和使用-CSDN博客
AI入門2:本地AI部署,用ollama部署deepseek(私有化部署)-CSDN博客
AI入門3:給本地deepseek設置網頁訪問方式(UI插件Page Assist 安裝)_deepseek本地部署網頁訪問-CSDN博客
??AI入門4:基于Ollama+DeepSeek,用Page Assist搭建本地知識庫-CSDN博客?
AI入門5:基于Ollama+DeepSeek,用AnythingLLM搭建本地知識庫-CSDN博客
AI入門6:基于Ollama+DeepSeek,用RAGFlow搭建本地知識庫_ragflow ports not available-CSDN博客
本節目標
使用vsCode開發環境,用python來調用本地deepseek。是的,我們要進入程序控制大模型了,有點高級感了,娃哈哈~
準備工作
?必做:
1、本地ollama安裝,及deepseek部署,參考前面文檔:AI入門1、AI入門2
2、vscode環境,安裝python,參考之前的文檔
【菜鳥飛】用vsCode搭建python運行環境-CSDN博客
?選讀文章:
【菜鳥飛】Conda安裝部署與vscode的結合使用-CSDN博客
其他選讀文檔,通過python訪問公網模型,就是通過注冊tocken訪問:
【菜鳥飛】通過vsCode用python訪問deepseek-r1等模型-CSDN博客
?vs運行環境設置
1、確認ollama啟動,及安裝了deepseek等模型,通過瀏覽器訪問ollama地址驗證:http://localhost:11434/
?
2、打開vsCode,準備一個全新的環境,我用的是python3.12.9,具體運行環境設置方式,在上面的參考文檔里有。
第一種訪問方式:OpenAI
?OpenAI API?提供了一系列強大的工具和接口,適用于各種自然語言處理、代碼生成和圖像處理任務。?
用pip方式安裝 OpenAI Python 庫,命令為:
pip install --upgrade openai
?執行界面如下:
??
?執行過程如果出錯,參考之前文檔中的錯誤處理方式:
?【菜鳥飛】通過vsCode用python訪問deepseek-r1等模型-CSDN博客
創建程序文件,代碼如下:
from openai import OpenAIclient = OpenAI(base_url="http://localhost:11434/v1", # Ollama默認API地址api_key="test" # 必填字段但會被忽略,隨便填寫即可
)response = client.chat.completions.create(model="deepseek-r1:1.5b", # 替換為已下載的模型名稱messages=[{"role": "system", "content": "你是一個有幫助的助手"},{"role": "user", "content": "用50字解釋量子計算"}],temperature=0.7,max_tokens=1024
)print(response.choices[0].message.content)
其中,替換如下信息為你自己的:
base_url:換成你自己ollama的地址,地址后面的“/v1”不能去掉,這是ollama的API地址
model:你自己本地安裝的模型,可以在終端通過命令“ollama list ”查看:
messages:是要提問的角色和內容
執行界面如下:
第二種方式:requests
requests 是 Python 中一個簡單易用的 HTTP 請求庫,用于向網絡服務器或 API 發送 HTTP 請求(如 GET、POST、PUT、DELETE 等),并處理響應數據。它簡化了與 Web 服務交互的流程,廣泛應用于數據爬取、API 調用、自動化測試等場景。
?可見,其實就是用通用的網絡訪問方式,來訪問ollama,返回響應信息,創建程序文件,代碼如下:
import requests# Ollama 服務器的 URL
#url = "http://localhost:11434/v1/chat/completions" #ok
url="http://localhost:11434/api/chat" '''
直接訪問API端點(1)模型列表:GET http://localhost:11434/api/tags(2)生成文本:POST http://localhost:11434/api/generate(3)對話交互:POST http://localhost:11434/api/chat(4)拉取模型:POST http://localhost:11434/api/pull'''
# 設置你的請求頭(通常需要設置 Content-Type)
headers = {"Content-Type": "application/json"
}# 構建請求體,例如,你想讓模型生成一些文本
data = {"messages": [{'role': 'user', 'content': '你是誰?'}],"model": "deepseek-r1:1.5b", # 你想要使用的模型,例如 Mistral-7B-Instruct-v0.1"stream": False,"temperature": 0.01, # 控制隨機性,可選參數"max_tokens": 256 # 生成的最大 token 數,可選參數
}# 發送 POST 請求
response = requests.post(url, json=data, headers=headers)# 檢查響應狀態碼
if response.status_code == 200:# 解析響應內容result = response.json()#print(result)print("Generated Text:", result.get("message").get("content")) # 打印生成的文本
else:print("Error:", response.status_code, response.text)
如果提示request找不到,則通過下面命令進行安裝
pip install requests
?執行界面:
方式三:ollama API
Ollama 是一個本地化的機器學習框架,專注于模型加載、推理和生成任務。它提供了強大的 API 接口,允許開發者通過 HTTP 請求與模型進行交互,實現文本生成、對話管理等功能。
首先需要安裝ollama包,執行下面命令:
pip install ollama
?如果這過程出錯,請參考之前發布的文檔:
【菜鳥飛】在vsCode中安裝python的ollama包出錯的問題-CSDN博客
安裝好包,創建程序文件,我測試,有兩種調用方式,/api/chat 和 /api/generate :?
- /api/generate
用途: 這個端點主要用于生成單個文本片段。它接收輸入并返回基于該輸入的模型生成的文本,通常不考慮之前的消息歷史或對話上下文。
功能: 它可以用于各種生成任務,如文章創作、代碼生成、故事編寫等,其中每次請求都是獨立的,不依賴于前一次請求的結果。?
- /api/chat
用途: 這個端點用于支持對話式的交互。它通常需要一個消息列表作為輸入,以維護對話的歷史和上下文,確保模型能夠理解并響應連續的對話。
功能: 它適合于創建聊天機器人、問答系統或任何需要多輪對話的應用場景。通過跟蹤對話歷史,模型可以提供更加連貫和情境相關的響應。
?總結而言,/api/generate 更適合一次性生成任務,而 /api/chat 更適合需要持續對話和上下文記憶的任務。
generate方式:?
generate方式,代碼如下:
import ollamaclient = ollama.Client(host='http://localhost:11434')
print('----------')
models = client.list()
print('Available models:', models)print('----------')
response = client.generate(
model="deepseek-r1:1.5b", # 指定模型名稱
prompt='你是誰'
)
print(response['response'])
執行界面:
錯誤參考:
我通過網絡學習,別人的代碼是這樣,不用指定ollama地址,用默認地址直接訪問,但我執行總是報服務器找不到的錯誤:
? ? raise ConnectionError(CONNECTION_ERROR_MESSAGE) from None
ConnectionError: Failed to connect to Ollama. Please check that Ollama is downloaded, running and accessible. https://ollama.com/download
檢查了ollama的訪問環境變量,和防火墻,多沒解決,下面界面供參考,大家可以自己試一下:
chat方式:
chat訪問,代碼如下:
from ollama import Clientclient = Client(host='http://localhost:11434',headers={'x-some-header': 'some-value'}
)stream = client.chat(model='deepseek-r1:1.5b',messages=[{'role': 'user', 'content': '你是誰?'}],#stream=False,stream=True,
)#print(stream)
'''
print('--------stream=False-----')
print(stream['message']['content'])
print('-------stream=False------')
'''
print('-------stream=true------')
for chunk in stream:print(chunk['message']['content'], end='', flush=True)
print('-------stream=true------\n')
上面打印是,stream不同方式,對應的不同打印方式,執行界面參考:
錯誤參考
和上面類似,大家可以測試一下直接用chat取代,client.chat試一下。
其他:
【vs插件】vsCode環境下,調試ollama的工具allama_gui-CSDN博客
參考文檔
- OpenAI參考文檔
介紹 | Open API中文文檔
- ollama的AIP參考文檔
Ollama 簡介 | 菜鳥教程
官方文檔:ollama/docs/api.md at main · ollama/ollama · GitHub
國內鏡像文檔:ollama/docs/api.md at main · ollama/ollama · GitHub