Python使用Ollama API的詳細(xì)代碼示例

前言
本文介紹如何在 Python 中使用 Ollama API。無論你是想進(jìn)行簡單的聊天對(duì)話、使用流式響應(yīng)處理大數(shù)據(jù)、還是希望在本地進(jìn)行模型的創(chuàng)建、復(fù)制、刪除等操作,本文都可以為你提供指導(dǎo)。此外,我們還展示了如何使用自定義客戶端和異步編程來優(yōu)化你的應(yīng)用程序性能,無論你是 Ollama 的新手還是經(jīng)驗(yàn)豐富的開發(fā)者,本文都能幫助你在 Python 中更高效地使用 Ollama API。
環(huán)境準(zhǔn)備
在開始使用 Python 與 Ollama API 交互之前,請(qǐng)確保您的開發(fā)環(huán)境滿足以下條件:
- Python: 安裝 Python 3.8 或更高版本。
- pip: 確保已安裝 pip,Python 的包管理工具。
- ollama 庫: 用于更方便地與 Ollama API 交互。安裝命令如下:
pip install ollama
使用方法
from ollama import chat
from ollama import ChatResponse
response: ChatResponse = chat(model='llama3.1', messages=[
{
'role': 'user',
'content': '為什么天空是藍(lán)色的?',
},
])
print(response['message']['content'])
print(response.message.content)
流式響應(yīng)
可以通過設(shè)置 stream=True 啟用響應(yīng)流,使函數(shù)調(diào)用返回一個(gè) Python 生成器,其中每個(gè)部分都是流中的一個(gè)對(duì)象。
from ollama import chat
stream = chat(
model='llama3.1',
messages=[{'role': 'user', 'content': '為什么天空是藍(lán)色的?'}],
stream=True,
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
結(jié)構(gòu)化輸出
普通輸出(Unstructured Output)
- 直接生成自然語言文本。
- 適合人類閱讀,但不便于程序解析或自動(dòng)化處理。
- 例如:
這是一只黑色的小貓,它正在草地上玩耍。
結(jié)構(gòu)化輸出(Structured Output)
- 以 JSON 、 YAML 、 XML 或其他格式返回?cái)?shù)據(jù),使其更容易被機(jī)器解析和使用。
- 適合 API 、自動(dòng)化工作流和數(shù)據(jù)存儲(chǔ)。
- 例如:
{ "description": "這是一只黑色的小貓", "activity": "正在草地上玩耍" }
結(jié)構(gòu)化輸出的優(yōu)勢(shì)
(1)便于處理
- 機(jī)器可以輕松提取特定字段,如
description或activity,而無需 NLP 解析普通文本。
(2)提高可控性
- 結(jié)構(gòu)化格式讓開發(fā)者可以精確控制模型輸出,避免冗長或不可預(yù)測的回答。
- 例如,在 AI 生成代碼時(shí):
{ "language": "Python", "code": "print('Hello, World!')" }
(3)便于存儲(chǔ)與分析
- 結(jié)構(gòu)化數(shù)據(jù)更適合存儲(chǔ)到數(shù)據(jù)庫中,方便查詢和分析。
- 例如:
{ "date": "2025-01-20", "summary": "今天的銷售額增長了10%。" }
from pydantic import BaseModel, Field
from ollama import chat
import json
class CountryInfo(BaseModel):
capital: str = Field(..., alias="首都")
number: str = Field(..., alias="人口")
area: str = Field(..., alias="占地面積")
response = chat(
model='llama3.1',
messages=[{
'role': 'user',
'content': "請(qǐng)介紹美國的首都、人口、占地面積信息,并以 JSON 格式返回。"
}],
format="json",
options={'temperature': 0},
)
response_content = response["message"]["content"]
if not response_content:
raise ValueError("Ollama 返回的 JSON 為空")
json_response = json.loads(response_content)
print(json_response)
friends_response = CountryInfo.model_validate(json_response)
print(friends_response)
API
Ollama Python 庫提供了豐富的接口,簡化了與 Ollama 的交互。這些接口設(shè)計(jì)直觀,易于集成,旨在幫助開發(fā)者更便捷地調(diào)用和管理模型。如果你想了解更詳細(xì)的底層實(shí)現(xiàn)和完整的 API 端點(diǎn)信息。
聊天
ollama.chat(model='llama3.1', messages=[{'role': 'user', 'content': '為什么天空是藍(lán)色的?'}])
生成
ollama.generate(model='llama3.1', prompt='為什么天空是藍(lán)色的?')
本地模型列表
ollama.list()
顯示模型信息
ollama.show('llama3.1')
創(chuàng)建模型
modelfile=''' FROM llama3.1 SYSTEM 你是大語言模型專家小蜜蜂。 ''' ollama.create(model='example', modelfile=modelfile)
復(fù)制模型
ollama.copy('llama3.1', 'user/llama3.1')
刪除模型
ollama.delete('llama3.1')
拉取模型
ollama.pull('llama3.1')
推送模型
ollama.push('user/llama3.1')
生成嵌入
ollama.embeddings(model='llama3.1', prompt='天空是藍(lán)色的因?yàn)槿鹄⑸?)
# 批量生成embedding ollama.embed(model='llama3.1', input=['天空是藍(lán)色的', '草是綠色的'])
進(jìn)程
ollama.ps()
自定義客戶端
可以通過通過 ollama 實(shí)例化 Client 或 AsyncClient 來創(chuàng)建自定義客戶端。
可以使用以下字段創(chuàng)建自定義客戶端:
host: 要連接的 Ollama 主機(jī)timeout: 請(qǐng)求超時(shí)時(shí)間
所有關(guān)鍵字參數(shù)參見httpx.Client.
from ollama import Client
client = Client(
host='http://localhost:11434',
headers={'x-some-header': 'some-value'}
)
response = client.chat(model='llama3.1', messages=[
{
'role': 'user',
'content': '為什么天空是藍(lán)色的?',
},
])
print(response)
異步客戶端
import asyncio
from ollama import AsyncClient
import nest_asyncio
nest_asyncio.apply()
async def chat():
message = {'role': 'user', 'content': '為什么天空是藍(lán)色的?'}
response = await AsyncClient().chat(model='llama3.1', messages=[message])
print(response)
asyncio.run(chat())
設(shè)置 stream=True 修改函數(shù)以返回 Python 異步生成器:
import asyncio
from ollama import AsyncClient
import nest_asyncio
nest_asyncio.apply()
async def chat():
message = {'role': 'user', 'content': '為什么天空是藍(lán)色的?'}
async for part in await AsyncClient().chat(model='llama3.1', messages=[message], stream=True):
print(part['message']['content'], end='', flush=True)
asyncio.run(chat())
錯(cuò)誤
如果請(qǐng)求返回錯(cuò)誤狀態(tài)或在流式傳輸時(shí)檢測到錯(cuò)誤,則會(huì)引發(fā)錯(cuò)誤。
model = 'does-not-yet-exist'
try:
ollama.chat(model)
except ollama.ResponseError as e:
print('錯(cuò)誤:', e.error)
if e.status_code == 404:
ollama.pull(model)總結(jié)
到此這篇關(guān)于Python使用Ollama API的文章就介紹到這了,更多相關(guān)Python使用Ollama API內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)自動(dòng)清理電腦垃圾文件詳解
經(jīng)常存在在我們的電腦中的垃圾文件主要是指系統(tǒng)在運(yùn)行過程中產(chǎn)生的tmp臨時(shí)文件、日志文件、臨時(shí)備份文件等。本文將利用Python實(shí)現(xiàn)自動(dòng)清理這些垃圾文件,需要的可以參考一下2022-03-03
windows系統(tǒng)下Boost.Python的配置和使用方法(新手教學(xué))
Boost.Python是Boost庫的一部分,Boost庫本身包含了許多其他有用的庫,這篇文章主要介紹了windows系統(tǒng)下Boost.Python的配置和使用方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-01-01
pytest文檔內(nèi)置fixture的request詳情
這篇文章主要介紹了pytest文檔內(nèi)置fixture的request詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
python中的GUI實(shí)現(xiàn)計(jì)算器
這篇文章主要介紹了如何利用python中的GUI實(shí)現(xiàn)計(jì)算器,文章教大家用用python的GUI做界面布局,計(jì)算器代碼熟悉控件的使用方法、優(yōu)化計(jì)算器代碼,解決獲取按鈕文本的方法,具有一定的參考價(jià)值,需要的朋友可以參考一下2021-12-12
基于python的opencv圖像處理實(shí)現(xiàn)對(duì)斑馬線的檢測示例
這篇文章主要介紹了基于python的opencv圖像處理實(shí)現(xiàn)對(duì)斑馬線的檢測示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
詳解python selenium 爬取網(wǎng)易云音樂歌單名
這篇文章主要介紹了python selenium爬取網(wǎng)易云音樂歌單名,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03

