Ollama Python 调用:本地大模型的高效交互方式
本地部署大模型后,如何高效地调用这些模型成为了一个关键问题。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,从而在自然语言处理项目中发挥其强大的功能。
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 什么是 OpenReview
- Vue中使用echarts@4.x中国地图及AMap相关API的使用
- 使用 Zeplin API 实现 Zeplin 移动化
- Rest API 教程 – 完整的初学者指南
- API Key 密钥 vs OAuth 2.0:身份认证的比较
- Claude API 能使用 OpenAI 接口协议吗?
- 使用DeepSeek R1、LangChain和Ollama构建端到端生成式人工智能应用
- 如何获取通义千问 API Key 密钥(分步指南)
- 您需要了解的OpenAI Assistants API功能 – PageOn.ai
- DRF库详解:用Django轻松搭建功能强大的API服务
- 一文搞懂在 HTTP 如何 one-api 调用,实操指南来袭!
- 探索海洋数据的宝库:Amentum海洋数据探测API的潜力