deepseek-r1本地ollama部署
之后,我们希望可以通过调用API的方式,将deepseek-r1为我所用,灵活地应用到自己的程序中。下面是详细介绍如何API调用本地的deepseek-r1。
ollama调用API的方式有许多,下面介绍最常见的openai库进行调用。
1 导入openai库
#如果没有则安装 pip install openai
from openai import OpenAI 2 启动服务
client = OpenAI(
base_url='http://localhost:11434/v1/',
# 表明代码正在连接到本地计算机 (localhost) 上的一个服务,/v1/: 这部分指定 API 的版本
api_key='ollama',
)3 查看有哪些可用的模型
list_completion = client.models.list()
print (list_completion)显示:
SyncPage[Model](data=[Model(id='deepseek-r1:32b', created=1738479908, object='model', owned_by='library'), Model(id='deepseek-r1:7b', created=1738471937, object='model', owned_by='library'), Model(id='deepseek-r1:1.5b', created=1738430324, object='model', owned_by='library')], object='list')可以看到,我已经安装好了3个模型:
'deepseek-r1:32b'
'deepseek-r1:7b'
'deepseek-r1:1.5b'
4 开始最简单的对话
completion = client.completions.create(
model="deepseek-r1:1.5b",
prompt="你好",
)
print(completion.choices[0].text)模型正常回复,祝贺你已经完成了最简单的API调用。
5 查看tokens数
print(f"输入 Tokens: {completion.usage.prompt_tokens}")
print(f"回复 Tokens: {completion.usage.completion_tokens}")
print(f"总 Tokens: {completion.usage.total_tokens}")可得到:
输入 Tokens: 4
回复 Tokens: 87
总 Tokens: 916 一个完整的会话API示例
6.1 第必定义一个AI回复的函数:
def get_ai_response(user_message, history):
"""
参数:
user_message: 用户的消息(字符串)。
history: 当前的对话历史(字典列表)。
返回:
AI的响应(字符串),如果发生错误则返回None。同时返回更新后的对话历史。
"""
# 添加用户消息到对话历史记录
history.append({'role': 'user', 'content': user_message})
try:
stream = client.chat.completions.create(
messages=history,
model='deepseek-r1:1.5b', # 确保模型已下载
stream=True # 流式响应
)
ai_response = "" # 初始化回复内容
print("AI: ", end="", flush=True) # 表明AI回复
for chunk in stream:
if chunk.choices[0].delta.content is not None:
ai_response += chunk.choices[0].delta.content # 回复内容不断叠加
print(chunk.choices[0].delta.content, end="", flush=True) # Print each chunk
print() # 打印一新行
# 添加 AI 响应到对话历史记录
history.append({'role': 'assistant', 'content': ai_response})
return ai_response, history
except Exception as e:
print(f"An error occurred: {e}")
return None, history6.2 初始化对话历史记录并添加系统指令
conversation_history = []
# 添加系统指令
system_instruction = {
'role': 'system',
'content': '你是一个友善的助手,总是用简洁明了的语言回答问题。'
}
conversation_history.append(system_instruction)6.3 连续会话
# 用户的第一条消息
user_message_1 = "你好,请详细介绍什么是人工智能"
ai_response_1, conversation_history = get_ai_response(user_message_1, conversation_history)这时,模型就会流式输出,并打印显示。
# 用户的第二条消息
user_message_1 = "目前请详细讲解第一条"
ai_response_1, conversation_history = get_ai_response(user_message_1, conversation_history)我们看到,模型会延续之前的话题,接着输出有关人工智能第一条的话题。
# 用户的第三条消息
user_message_1 = "请讲讲它的用途"
ai_response_1, conversation_history = get_ai_response(user_message_1, conversation_history)我们继续看到,模型会继续讨论人工智能的用途。
6.4 查看完整的对话历史
print("
Full Conversation History:")
for message in conversation_history:
print(f"{message['role']}: {message['content']}")