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