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中数据类型转换的相关资料,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解一下
    2023-03-03
  • Python实现简单http服务器

    Python实现简单http服务器

    这篇文章主要为大家详细介绍了Python实现一个简单http服务器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 解决python问题 Traceback (most recent call last)

    解决python问题 Traceback (most recent call&n

    这篇文章主要介绍了解决python问题 Traceback (most recent call last),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Win10系统下安装labelme及json文件批量转化方法

    Win10系统下安装labelme及json文件批量转化方法

    这篇文章主要介绍了Win10系统下安装labelme及json文件批量转化的方法,文中较详细的给大家介绍了安装过程 ,需要的朋友可以参考下
    2019-07-07
  • Python实现修改IE注册表功能示例

    Python实现修改IE注册表功能示例

    这篇文章主要介绍了Python实现修改IE注册表功能,结合完整实例形式分析了Python操作IE注册表项的相关实现技巧与注意事项,需要的朋友可以参考下
    2018-05-05
  • 基于PyQt5实现一个无线网连接器

    基于PyQt5实现一个无线网连接器

    为了方便不会python的朋友也能够使用,本文将用pyqt5将制作一个带界面的无线网连接器,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-08-08
  • 自定义python日志文件系统实例

    自定义python日志文件系统实例

    这篇文章主要介绍了自定义python日志文件系统方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 详解Python中用于计算指数的exp()方法

    详解Python中用于计算指数的exp()方法

    这篇文章主要介绍了详解Python中用于计算指数的exp()方法,是Python入门中必会的基本方法,需要的朋友可以参考下
    2015-05-05
  • python美多商城项目开发小结

    python美多商城项目开发小结

    这篇文章主要介绍了python美多商城项目开发小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • python实现朴素贝叶斯算法

    python实现朴素贝叶斯算法

    这篇文章主要为大家详细介绍了Python实现朴素贝叶斯算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11

最新评论