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