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

作者:youqing · 2025-08-07 · 阅读时间:10分钟

本地部署大模型后,如何高效地调用这些模型成为了一个关键问题。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,从而在自然语言处理项目中发挥其强大的功能。