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)勢
(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ù)據(jù)類型的轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了Python中數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2023-03-03Python實(shí)現(xiàn)簡單http服務(wù)器
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)一個(gè)簡單http服務(wù)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04解決python問題 Traceback (most recent call&n
這篇文章主要介紹了解決python問題 Traceback (most recent call last),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Win10系統(tǒng)下安裝labelme及json文件批量轉(zhuǎn)化方法
這篇文章主要介紹了Win10系統(tǒng)下安裝labelme及json文件批量轉(zhuǎn)化的方法,文中較詳細(xì)的給大家介紹了安裝過程 ,需要的朋友可以參考下2019-07-07Python實(shí)現(xiàn)修改IE注冊(cè)表功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)修改IE注冊(cè)表功能,結(jié)合完整實(shí)例形式分析了Python操作IE注冊(cè)表項(xiàng)的相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2018-05-05基于PyQt5實(shí)現(xiàn)一個(gè)無線網(wǎng)連接器
為了方便不會(huì)python的朋友也能夠使用,本文將用pyqt5將制作一個(gè)帶界面的無線網(wǎng)連接器,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08詳解Python中用于計(jì)算指數(shù)的exp()方法
這篇文章主要介紹了詳解Python中用于計(jì)算指數(shù)的exp()方法,是Python入門中必會(huì)的基本方法,需要的朋友可以參考下2015-05-05python美多商城項(xiàng)目開發(fā)小結(jié)
這篇文章主要介紹了python美多商城項(xiàng)目開發(fā)小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02