
API是什么?深入解析API及其应用
本地部署大模型后,如何高效地调用这些模型成为了一个关键问题。Python 作为一门广泛使用的编程语言,提供了多种方式来调用本地部署的 Ollama 大模型。本文将详细介绍如何通过 Python 调用 Ollama 模型,包括使用 Ollama 官方 Python SDK、LangChain 库以及原生的 HTTP 请求等方式。同时,我们还将探讨 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 提供了许多高级功能,用于操作和管理模型。以下是一些常用的 API 方法:
Python复制
ollama.chat(model='llama3.2', messages=[{'role': 'user', 'content': 'Why is the sky blue?'}])
Python复制
ollama.generate(model='llama3.2', prompt='Why is the sky blue?')
Python复制
ollama.list()
Python复制
ollama.show('llama3.2')
Python复制
ollama.create(model='example', from_='llama3.2', system="You are Mario from Super Mario Bros.")
Python复制
ollama.copy('llama3.2', 'user/llama3.2')
Python复制
ollama.delete('llama3.2')
Python复制
ollama.pull('llama3.2')
Python复制
ollama.push('user/llama3.2')
Python复制
ollama.embed(model='llama3.2', input='The sky is blue because of rayleigh scattering')
Python复制
ollama.ps()
这些方法为开发者提供了强大的工具,可以方便地管理和操作本地部署的 Ollama 模型。
除了直接使用 Ollama Python SDK 外,还可以通过 LangChain 库来调用 Ollama 模型。LangChain 是一个流行的自然语言处理库,提供了丰富的功能和工具。以下是使用 LangChain 调用 Ollama 的示例:
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 模型。这种方式更加灵活,可以方便地与其他系统集成。以下是使用 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 的最新版本(0.4)引入了许多改进,特别是对函数调用的支持。现在,开发者可以将 Python 函数作为工具传递给 Ollama 模型,并在模型响应中调用这些函数。这种方式为开发者提供了更大的灵活性,可以将自定义逻辑与模型生成的内容相结合。
以下是使用 Ollama Python SDK 0.4 版本的示例:
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
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,从而在自然语言处理项目中发挥其强大的功能。