欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2025年02月15日 11:40:23   作者:goomind  
這篇文章主要介紹了如何在Python中使用OllamaAPI,涵蓋了從環(huán)境準(zhǔn)備、使用方法到高級(jí)功能的全面指南,無論是初學(xué)者還是經(jīng)驗(yàn)豐富的開發(fā)者都能從中受益,需要的朋友可以參考下

前言

本文介紹如何在 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)文章

最新評(píng)論