所有文章 > API开发 > Ollama Python 调用:本地大模型的高效交互方式
Ollama Python 调用:本地大模型的高效交互方式

Ollama Python 调用:本地大模型的高效交互方式

本地部署大模型后,如何高效地调用这些模型成为了一个关键问题。Python 作为一门广泛使用的编程语言,提供了多种方式来调用本地部署的 Ollama 大模型。本文将详细介绍如何通过 Python 调用 Ollama 模型,包括使用 Ollama 官方 Python SDK、LangChain 库以及原生的 HTTP 请求等方式。同时,我们还将探讨 Ollama Python SDK 的最新功能改进,帮助开发者更灵活地使用这些强大的工具。

一、Ollama Python SDK 的安装与使用

Ollama 提供了官方的 Python SDK,方便开发者在 Python 环境中与本地运行的模型进行交互。安装 Ollama Python SDK 非常简单,只需要运行以下命令:

bash复制

pip install ollama

安装完成后,确保本地 Ollama 服务已经启动。可以通过以下命令启动本地服务:

bash复制

ollama serve

启动服务后,就可以通过 Python 代码与 Ollama 进行交互了。以下是使用 Ollama Python SDK 进行模型推理的基本示例:

Python复制

from ollama import chat

response = chat(
model='deepseek-coder',
messages=[
{'role': 'user', 'content': '你是谁?'}
]
)

print(response['message']['content'])

在上述代码中,chat 函数用于向指定的模型发送请求,并获取模型的响应。model 参数指定了要使用的模型,messages 参数是一个包含用户消息的列表。运行上述代码后,模型会返回相应的回答。

Ollama Python SDK 还支持流式响应,可以在发送请求时通过设置 stream=True 来启用响应流式传输。这种方式特别适合处理长文本或实时交互的场景。例如:

Python复制

from ollama import chat

stream = chat(
model='deepseek-coder',
messages=[{'role': 'user', 'content': '你是谁?'}],
stream=True
)

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

通过流式响应,模型的输出会逐块返回,每部分都可以即时处理,从而提高交互的实时性。

二、自定义客户端与异步调用

Ollama Python SDK 提供了强大的自定义功能,开发者可以通过创建自定义客户端来进一步控制请求配置。例如,可以设置自定义的请求头或指定本地服务的 URL:

Python复制

from ollama import Client

client = Client(
host='http://localhost:11434',
headers={'x-some-header': 'some-value'}
)

response = client.chat(
model='deepseek-coder',
messages=[
{'role': 'user', 'content': '你是谁?'}
]
)

print(response['message']['content'])

此外,Ollama Python SDK 还支持异步客户端,适用于需要并发的场景。异步客户端的使用方式与同步客户端类似,但请求是异步执行的,可以提高性能。例如:

Python复制

import asyncio
from ollama import AsyncClient

async def chat():
message = {'role': 'user', 'content': '你是谁?'}
response = await AsyncClient().chat(
model='deepseek-coder',
messages=[message]
)
print(response['message']['content'])

asyncio.run(chat())

异步客户端还支持流式响应。通过将 stream=True 设置为异步生成器,可以逐部分地异步返回响应,每部分都可以即时处理:

Python复制

import asyncio
from ollama import AsyncClient

async def chat():
message = {'role': 'user', 'content': '你是谁?'}
async for part in await AsyncClient().chat(
model='deepseek-coder',
messages=[message],
stream=True
):
print(part['message']['content'], end='', flush=True)

asyncio.run(chat())

三、Ollama Python SDK 的高级功能

Ollama Python SDK 提供了许多高级功能,用于操作和管理模型。以下是一些常用的 API 方法:

  • chat 方法:与模型进行对话生成,发送用户消息并获取模型响应。

Python复制

ollama.chat(model='llama3.2', messages=[{'role': 'user', 'content': 'Why is the sky blue?'}])
  • generate 方法:用于文本生成任务,只需要一个 prompt 参数。

Python复制

ollama.generate(model='llama3.2', prompt='Why is the sky blue?')
  • list 方法:列出所有可用的模型。

Python复制

ollama.list()
  • show 方法:显示指定模型的详细信息。

Python复制

ollama.show('llama3.2')
  • create 方法:从现有模型创建新的模型。

Python复制

ollama.create(model='example', from_='llama3.2', system="You are Mario from Super Mario Bros.")
  • copy 方法:复制模型到另一个位置。

Python复制

ollama.copy('llama3.2', 'user/llama3.2')
  • delete 方法:删除指定模型。

Python复制

ollama.delete('llama3.2')
  • pull 方法:从远程仓库拉取模型。

Python复制

ollama.pull('llama3.2')
  • push 方法:将本地模型推送到远程仓库。

Python复制

ollama.push('user/llama3.2')
  • embed 方法:生成文本嵌入。

Python复制

ollama.embed(model='llama3.2', input='The sky is blue because of rayleigh scattering')
  • ps 方法:查看正在运行的模型列表。

Python复制

ollama.ps()

这些方法为开发者提供了强大的工具,可以方便地管理和操作本地部署的 Ollama 模型。

四、通过 LangChain 调用 Ollama

除了直接使用 Ollama Python SDK 外,还可以通过 LangChain 库来调用 Ollama 模型。LangChain 是一个流行的自然语言处理库,提供了丰富的功能和工具。以下是使用 LangChain 调用 Ollama 的示例:

  1. 安装 LangChain 依赖:

bash复制

pip install langchain
pip install langchain_community
  1. 调用示例:

Python复制

from langchain_community.llms import Ollama

host = "localhost"
port = "11434"
llm = Ollama(base_url=f"http://{host}:{port}", model="qwen2:1.5b", temperature=0)
res = llm.invoke("你是谁")
print(res)

在上述代码中,Ollama 类用于创建一个与 Ollama 模型的连接,base_url 参数指定了 Ollama 服务的地址,model 参数指定了要使用的模型,temperature 参数用于调整生成结果的创造性程度。运行上述代码后,模型会返回相应的回答。

五、通过 HTTP 请求调用 Ollama

在某些情况下,可能需要直接通过 HTTP 请求调用 Ollama 模型。这种方式更加灵活,可以方便地与其他系统集成。以下是使用 requests 库调用 Ollama 的示例:

  1. 安装 requests 库:

bash复制

pip install requests
  1. 调用示例:

Python复制

import requests

host = "localhost"
port = "11434"
url = f"http://{host}:{port}/api/chat"
model = "qwen2:1.5b"
headers = {"Content-Type": "application/json"}
data = {
"model": model,
"options": {
"temperature": 0
},
"stream": False,
"messages": [
{"role": "user", "content": "你是谁?"}
]
}

response = requests.post(url, json=data, headers=headers, timeout=60)
res = response.json()
print(res)

在上述代码中,requests.post 方法用于发送 HTTP POST 请求,url 参数指定了 Ollama 服务的地址,data 参数包含了请求的正文内容,headers 参数指定了请求头。运行上述代码后,模型会返回相应的回答。

六、Ollama Python SDK 的最新改进

Ollama Python SDK 的最新版本(0.4)引入了许多改进,特别是对函数调用的支持。现在,开发者可以将 Python 函数作为工具传递给 Ollama 模型,并在模型响应中调用这些函数。这种方式为开发者提供了更大的灵活性,可以将自定义逻辑与模型生成的内容相结合。

以下是使用 Ollama Python SDK 0.4 版本的示例:

  1. 定义一个 Python 函数:

Python复制

def add_two_numbers(a: int, b: int) -> int:
"""
Add two numbers

Args:
a: The first integer number
b: The second integer number

Returns:
int: The sum of the two numbers
"""
return a + b
  1. 将函数作为工具传递给 Ollama:

Python复制

import ollama

response = ollama.chat(
'llama3.1',
messages=[{'role': 'user', 'content': 'What is 10 + 10?'}],
tools=[add_two_numbers]
)
  1. 在模型响应中调用函数:

Python复制

available_functions = {
'add_two_numbers': add_two_numbers,
}

for tool in response.message.tool_calls or []:
function_to_call = available_functions.get(tool.function.name)
if function_to_call:
print('Function output:', function_to_call(**tool.function.arguments))
else:
print('Function not found:', tool.function.name)

此外,Ollama Python SDK 0.4 版本还支持从现有 Python 库中传递函数作为工具。例如,可以将 requests 库中的 request 函数作为工具传递给 Ollama:

Python复制

import ollama
import requests

available_functions = {
'request': requests.request,
}

response = ollama.chat(
'llama3.1',
messages=[{
'role': 'user',
'content': 'get the ollama.com webpage?',
}],
tools=[requests.request]
)

for tool in response.message.tool_calls or []:
function_to_call = available_functions.get(tool.function.name)
if function_to_call == requests.request:
resp = function_to_call(
method=tool.function.arguments.get('method'),
url=tool.function.arguments.get('url')
)
print(resp.text)
else:
print('Function not found:', tool.function.name)

Ollama Python SDK 0.4 版本通过 Pydantic 和 docstring 解析生成 JSON Schema,从而简化了工具的定义和传递过程。例如,对于 add_two_numbers 函数,生成的 JSON Schema 如下:

JSON复制

{
"type": "function",
"function": {
"name": "add_two_numbers",
"description": "Add two numbers",
"parameters": {
"type": "object",
"required": [
"a",
"b"
],
"properties": {
"a": {
"type": "integer",
"description": "The first integer number"
},
"b": {
"type": "integer",
"description": "The second integer number"
}
}
}
}
}

七、总结

Ollama 提供了强大的 Python SDK,方便开发者在 Python 环境中调用本地部署的大模型。通过 Ollama Python SDK,开发者可以轻松地实现文本生成、对话生成、模型管理等功能。此外,Ollama Python SDK 的最新版本引入了许多改进,特别是对函数调用的支持,为开发者提供了更大的灵活性。通过本文的介绍,希望读者能够更好地理解和使用 Ollama Python SDK,从而在自然语言处理项目中发挥其强大的功能。

#你可能也喜欢这些API文章!