Ollama 的配置修改與接口調用
在部署好 ollama 之後,我們再來介紹 ollama 的一些其他用法。
一、修改環境變量
1.1 配置遠程訪問
在我們本地部署好 ollama 之後,僅支持本機訪問,我們可以通過修改環境變量讓其他人可以遠程訪問。
在 wins 電腦上增加環境變量:
OLLAMA_HOST 0.0.0.0:11434
1.2 配置本地模型路徑
1.2.1 本地模型默認路徑
wins 本地模型默認路徑:C:\Users%username%.ollama\models。
這裏 %username% 是當前登錄的用戶名。例如,如果用戶名爲 Smqnz,則模型文件的默認存儲路徑可能是 C:\Users\Smqnz.ollama\models。
以我的電腦爲例:
C:\Users\admin\.ollama\models
1.2.2 修改本地模型默認路徑
wins 上的環境變量增加:
OLLAMA_MODELS 你想要存放的路徑
以下爲修改示例:
修改後,重啓 ollama 即可。
1.3 配置允許的 http 請求來源
OLLAMA_ORIGINS 是 Ollama 中用於配置跨域資源共享(CORS)的環境變量,可以指定哪些來源(域名、IP 地址等)可以訪問 Ollama 提供的 API 服務。
如果我們想讓它接收任何來源 (IP) 的 http 請求的話,我們需要將其設置爲 *。
OLLAMA_ORIGINS *
這裏一定要注意,以上修改的環境變量名稱必須爲大寫,不要隨意修改。
二、ollama 常用 API 請求
一般來說,我們可以通過打開命令行窗口直接進行對話。
但是這種方式對於開發者來說並不實用,一般我們需要通過其 API 進行訪問與開發,本次我們就來詳細聊一下 ollama 常見的 API。
2.1 文本生成 API
Ollama 提供了一套功能豐富的文本生成接口,方便用戶與本地部署的模型進行交互,以下是其主要的文本生成接口及功能介紹:
接口路徑:POST /api/generate
功能:向模型發送提示(prompt),生成文本回復。
請求參數:
model:模型名稱,如 "deepseek-r1:7b"。
prompt:輸入的提示文本。
stream:是否啓用流式輸出,默認爲 false。
options:可選參數,包括:
temperature:控制生成文本的多樣性,取值範圍通常爲 0 到 1。
max_tokens:最大生成的 token 數量。
top_p:Top-p 採樣參數。
import requests
# Ollama 服務的 URL
url = "http://localhost:11434/api/generate"
# 請求數據
data = {
"model": "deepseek-r1:8b", # 指定模型名稱
"prompt": "你好,請簡單介紹一下Python語言的特點。", # 輸入的提示詞
"stream": False, # 是否啓用流式響應
"options": { # 可選參數
"temperature": 0.7, # 溫度參數,控制生成內容的隨機性
"max_tokens": 100 # 最大生成長度
}
}
# 發送 POST 請求
response = requests.post(url, json=data)
# 檢查響應狀態
if response.status_code == 200:
result = response.json()
print("生成的文本:", result.get("response"))
else:
print("請求失敗,狀態碼:", response.status_code)
print("錯誤信息:", response.text)
2.2 對話聊天 API
接口路徑:POST /api/chat
功能:支持多輪對話,模型會記住上下文。
請求參數:
model:模型名稱。
messages:消息列表,包含用戶輸入和模型回覆,格式爲 {"role": "user", "content": "用戶輸入內容"}。
stream:是否啓用流式輸出,默認爲 false。
options:可選參數,與生成文本接口類似。
import requests
import json
# 設置請求的URL和端口
url = "http://localhost:11434/api/chat"
# 設置請求的數據
data = {
"model": "deepseek-r1:8b", # 模型名稱
"messages": [
{"role": "system", "content": "你現在是一名合格的售票員,你還可以隨意生成一些航班路線提供給用戶,請扮演好您的角色。"},
{"role": "user", "content": "你好,我想訂一張機票。"},
{"role": "assistant", "content": "好的,請問您要去哪裏?"},
{"role": "user", "content": "我要去北京。"},
{"role": "user", "content": "有哪些航班可選?"}
],
"stream": False # 是否啓用流式輸出
}
# 設置請求頭
headers = {
"Content-Type": "application/json"
}
# 發送POST請求
response = requests.post(url, headers=headers, data=json.dumps(data))
# 檢查響應狀態碼
if response.status_code == 200:
# 解析響應內容
result = response.json()
# 輸出模型的回覆內容
print("模型回覆:", result.get("message").get("content"))
else:
# 打印錯誤信息
print(f"請求失敗,狀態碼:{response.status_code}")
print("錯誤信息:", response.text)
三、ollama 兼容 openai 的請求
3.1 單輪對話
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1", # Ollama默認API地址
api_key="test" # 必填字段但會被忽略,隨便填寫即可
)
response = client.chat.completions.create(
model="deepseek-r1:8b", # 替換爲已下載的模型名稱
messages=[
{"role": "system", "content": "你是一個有幫助的助手"},
{"role": "user", "content": "用50字解釋量子計算"}
],
temperature=0.7,
max_tokens=1024
)
print(response.choices[0].message.content)
3.2 多輪對話
from openai import OpenAI
def run_chat_session():
client = OpenAI(
base_url="http://localhost:11434/v1/",
api_key="test" # 必填但會被忽略
)
chat_history = []
while True:
user_input = input("用戶:")
if user_input.lower() == "exit":
print("AI:對話結束")
break
chat_history.append({"role": "user", "content": user_input})
try:
response = client.chat.completions.create(
messages=chat_history,
model="deepseek-r1:8b" # 替換成你安裝的模型名稱
)
ai_response = response.choices[0].message.content
print(f"AI:{ai_response}")
chat_history.append({"role": "assistant", "content": ai_response})
except Exception as e:
print(f"錯誤:{e}")
if __name__ == "__main__":
run_chat_session()
可以看到,多輪對話可以通過維護問答列表能夠很好地理解上下文的含義。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/P47xl9F-r3llwLEFKQOQ7Q