API是什么?深入解析API及其应用
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 的示例:
- 安装 LangChain 依赖:
bash复制
pip install langchain
pip install langchain_community
- 调用示例:
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 的示例:
- 安装
requests
库:
bash复制
pip install requests
- 调用示例:
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 版本的示例:
- 定义一个 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
- 将函数作为工具传递给 Ollama:
Python复制
import ollama
response = ollama.chat(
'llama3.1',
messages=[{'role': 'user', 'content': 'What is 10 + 10?'}],
tools=[add_two_numbers]
)
- 在模型响应中调用函数:
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,从而在自然语言处理项目中发挥其强大的功能。