使用 Python 调用 Ollama API 并调用 deepseek-r1:8b 模型
- 准备工作
- [调用 Ollama API](#调用 Ollama API)
ollama 是一个强大的本地大语言模型工具,支持多种开源模型,例如 deepseek-r1:8b。通过 Ollama 的 API,我们可以轻松调用这些模型来完成文本生成、对话等任务。这里记录一下如何使用 Python 调用 Ollama API,并调用 deepseek-r1:8b 模型生成文本。
准备工作
在开始之前,确保你已经完成以下准备工作:
-
安装 Ollama:
如果你还没有安装 Ollama,可以参考 Ollama 官方文档 进行安装。
安装完成后,启动 Ollama 服务。默认情况下,API 会在 http://localhost:11434 上运行。
-
下载 deepseek-r1:8b 模型:
使用以下命令下载 deepseek-r1:8b 模型:
bashollama pull deepseek-r1:8b
-
安装 Python 的 requests 库:
这里将使用 requests 库来发送 HTTP 请求。如果还没有安装,可以通过以下命令安装:
bashpip install requests
调用 Ollama API
在此之前可以了解一下每个api大概得作用
API名称 | 功能描述 |
---|---|
Generate |
根据输入的提示生成文本,适用于文本生成任务。 |
Chat |
进行对话交互,模拟聊天机器人等场景。 |
Embeddings |
生成文本的嵌入向量,用于文本相似性比较、聚类等任务。 |
Pull |
从 Ollama 服务器下载指定的模型到本地。 |
List |
列出本地已下载的模型,查看当前可用的模型。 |
Delete |
删除本地存储的模型,释放存储空间。 |
Show |
显示模型的详细信息,如参数、版本等。 |
Copy |
复制一个模型到另一个名称,便于创建模型的副本。 |
Create |
基于现有模型创建自定义模型,支持自定义参数和配置。 |
Health Check |
检查 Ollama 服务的运行状态,确认服务是否正常。 |
使用generate
使用generate
api主要是生成一次内容,这个并没有记录功能,实现代码如下:
python
# -*- coding: utf-8 -*-
import requests
# Ollama API 的 URL
url = "http://localhost:11434/api/generate"
res = requests.post(
url=url,
json={
"Model":"deepseek-r1:8b",
"prompt":"写一首关于爱情的诗",
"stream":False
}
)
data_dict = res.json()
print(data_dict)
这样返回的内容会比较混乱,因为是直接返回的
修改一下显示的内容,将上面最后两行代码注释,修改为如下代码:
python
# data_dict = res.json()
# print(data_dict).
# 检查请求是否成功
if res.status_code == 200:
# 解析返回的 JSON 数据
result = res.json()
# 提取 response 字段
generated_text = result.get("response", "")
print("生成的文本:", generated_text)
else:
print("请求失败,状态码:", res.status_code)
print("错误信息:", res.text)
这样得到的文本可视化非常好看了:
实现多轮对话并保留对话的记忆
在这个里面模型不会记录我们之前说的话,所以现在修改一下代码让他可以实现多轮对话,原理就是把之前交流的信息保存在一个list中,然后可以手动输入下一个问题,
-
首先修改使用的API,多轮对话要使用
chat
apibashurl = "http://localhost:11434/api/chat"
-
然后创建一个list用于保存对话.
python# 保存对话记录的list msg_list = []
-
写一个while的死循环,然后让用户输入文本,输入完成后将消息保存到对话记录中,然后再将返回结果也保存到列表中,这样就将之前的记录保存起来了.
python# -*- coding: utf-8 -*- import requests # 保存对话记录的list msg_list = [] # Ollama API 的 URL url = "http://localhost:11434/api/chat" while True: text = input("请输入:") user_dict = {"role":"user","content":text} msg_list.append(user_dict) res = requests.post( url=url, json={ "model":"deepseek-r1:8b", "messages":msg_list, "stream":False } ) # data_dict = res.json() # print(data_dict) # 检查请求是否成功 if res.status_code == 200: # 解析返回的 JSON 数据 result = res.json() # 提取 response 字段 generated_text = result.get("message", "") # 保存返回的文本 msg_list.append(generated_text) print("生成的文本:", generated_text["content"]) else: print("请求失败,状态码:", res.status_code) print("错误信息:", res.text)
这样就可以连续对话了,
到这里就实现了使用代码来调用了.