Python使用Ollama API的详细代码示例
作者: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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!