Python使用Ollama API的详细代码示例

 更新时间:2025年02月15日 11:40:23   作者:goomind  
这篇文章主要介绍了如何在Python中使用OllamaAPI,涵盖了从环境准备、使用方法到高级功能的全面指南,无论是初学者还是经验丰富的开发者都能从中受益,需要的朋友可以参考下

前言

本文介绍如何在 Python 中使用 Ollama API。无论你是想进行简单的聊天对话、使用流式响应处理大数据、还是希望在本地进行模型的创建、复制、删除等操作,本文都可以为你提供指导。此外,我们还展示了如何使用自定义客户端和异步编程来优化你的应用程序性能,无论你是 Ollama 的新手还是经验丰富的开发者,本文都能帮助你在 Python 中更高效地使用 Ollama API。

环境准备

在开始使用 Python 与 Ollama API 交互之前,请确保您的开发环境满足以下条件:

  • 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': '为什么天空是蓝色的?',
  },
])
print(response['message']['content'])

print(response.message.content)

流式响应

可以通过设置 stream=True 启用响应流,使函数调用返回一个 Python 生成器,其中每个部分都是流中的一个对象。

from ollama import chat

stream = chat(
    model='llama3.1',
    messages=[{'role': 'user', 'content': '为什么天空是蓝色的?'}],
    stream=True,
)

for chunk in stream:
  print(chunk['message']['content'], end='', flush=True)

结构化输出

  • 普通输出(Unstructured Output)

    • 直接生成自然语言文本。
    • 适合人类阅读,但不便于程序解析或自动化处理。
    • 例如:
      这是一只黑色的小猫,它正在草地上玩耍。
      
  • 结构化输出(Structured Output)

    • 以 JSON 、 YAML 、 XML 或其他格式返回数据,使其更容易被机器解析和使用。
    • 适合 API 、自动化工作流和数据存储。
    • 例如:
      {
        "description": "这是一只黑色的小猫",
        "activity": "正在草地上玩耍"
      }
      

结构化输出的优势

(1)便于处理

  • 机器可以轻松提取特定字段,如 description 或 activity ,而无需 NLP 解析普通文本。

(2)提高可控性

  • 结构化格式让开发者可以精确控制模型输出,避免冗长或不可预测的回答。
  • 例如,在 AI 生成代码时:
    {
      "language": "Python",
      "code": "print('Hello, World!')"
    }
    

(3)便于存储与分析

  • 结构化数据更适合存储到数据库中,方便查询和分析。
  • 例如:
    {
      "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': "请介绍美国的首都、人口、占地面积信息,并以 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 的交互。这些接口设计直观,易于集成,旨在帮助开发者更便捷地调用和管理模型。如果你想了解更详细的底层实现和完整的 API 端点信息。

聊天

ollama.chat(model='llama3.1', messages=[{'role': 'user', 'content': '为什么天空是蓝色的?'}])

生成

ollama.generate(model='llama3.1', prompt='为什么天空是蓝色的?')

本地模型列表

ollama.list()

显示模型信息

ollama.show('llama3.1')

创建模型

modelfile='''
FROM llama3.1
SYSTEM 你是大语言模型专家小蜜蜂。
'''

ollama.create(model='example', modelfile=modelfile)

复制模型

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='天空是蓝色的因为瑞利散射')
# 批量生成embedding
ollama.embed(model='llama3.1', input=['天空是蓝色的', '草是绿色的'])

进程

ollama.ps()

自定义客户端

可以通过通过 ollama 实例化 Client 或 AsyncClient 来创建自定义客户端。

可以使用以下字段创建自定义客户端:

  • host: 要连接的 Ollama 主机
  • timeout: 请求超时时间

所有关键字参数参见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': '为什么天空是蓝色的?',
  },
])
print(response)

异步客户端

import asyncio
from ollama import AsyncClient
import nest_asyncio

nest_asyncio.apply()

async def chat():
    message = {'role': 'user', 'content': '为什么天空是蓝色的?'}
    response = await AsyncClient().chat(model='llama3.1', messages=[message])
    print(response)

asyncio.run(chat())

设置 stream=True 修改函数以返回 Python 异步生成器:

import asyncio
from ollama import AsyncClient
import nest_asyncio

nest_asyncio.apply()
async def chat():
  message = {'role': 'user', 'content': '为什么天空是蓝色的?'}
  async for part in await AsyncClient().chat(model='llama3.1', messages=[message], stream=True):
    print(part['message']['content'], end='', flush=True)

asyncio.run(chat())

错误

如果请求返回错误状态或在流式传输时检测到错误,则会引发错误。

model = 'does-not-yet-exist'

try:
  ollama.chat(model)
except ollama.ResponseError as e:
  print('错误:', e.error)
  if e.status_code == 404:
    ollama.pull(model)

总结 

到此这篇关于Python使用Ollama API的文章就介绍到这了,更多相关Python使用Ollama API内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python面向对象编程之类的封装

    Python面向对象编程之类的封装

    这篇文章主要介绍了Python面向对象编程之类的封装封装指属性和方法的抽象,属性的抽象又指对类的属性进行定义、隔离和保护,下面来看看文章的具体内容吧,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • Python之requests高级用法详解

    Python之requests高级用法详解

    这篇文章主要介绍了Python之requests高级用法详解,http协议是无状态的, 服务器无法区分多个请求是否来自同一个人,因此需要用cookie来进行标识,一般如果需要登录才能访问的网站就需要发送cookie信息,需要的朋友可以参考下
    2023-10-10
  • Python实现自动清理电脑垃圾文件详解

    Python实现自动清理电脑垃圾文件详解

    经常存在在我们的电脑中的垃圾文件主要是指系统在运行过程中产生的tmp临时文件、日志文件、临时备份文件等。本文将利用Python实现自动清理这些垃圾文件,需要的可以参考一下
    2022-03-03
  • Python中的id()函数指的什么

    Python中的id()函数指的什么

    id() 函数用于获取对象的内存地址。很多朋友不清楚python中的id函数到底是什么?接下来小编给大家分享本文帮助大家学习
    2017-10-10
  • windows系统下Boost.Python的配置和使用方法(新手教学)

    windows系统下Boost.Python的配置和使用方法(新手教学)

    Boost.Python是Boost库的一部分,Boost库本身包含了许多其他有用的库,这篇文章主要介绍了windows系统下Boost.Python的配置和使用方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-01-01
  • pytest文档内置fixture的request详情

    pytest文档内置fixture的request详情

    这篇文章主要介绍了pytest文档内置fixture的request详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • numpy.sum()坐标轴问题的解决

    numpy.sum()坐标轴问题的解决

    本文主要介绍了numpy.sum()坐标轴问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • python中的GUI实现计算器

    python中的GUI实现计算器

    这篇文章主要介绍了如何利用python中的GUI实现计算器,文章教大家用用python的GUI做界面布局,计算器代码熟悉控件的使用方法、优化计算器代码,解决获取按钮文本的方法,具有一定的参考价值,需要的朋友可以参考一下
    2021-12-12
  • 基于python的opencv图像处理实现对斑马线的检测示例

    基于python的opencv图像处理实现对斑马线的检测示例

    这篇文章主要介绍了基于python的opencv图像处理实现对斑马线的检测示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 详解python selenium 爬取网易云音乐歌单名

    详解python selenium 爬取网易云音乐歌单名

    这篇文章主要介绍了python selenium爬取网易云音乐歌单名,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论