文章目录
1. 前言
尽管目前开源的大语言模型很多,但是许多人想在电脑上部署,仍需要克服许多困难,例如需要掌握相关的专业知识、配备昂贵的硬件设备(GPUs)、以及了解相关的系统架构知识。
可能有人会说,那些强大的在在线模型,例如现在不用注册帐号也能使用的 GPT-4o mini 以及目前国内第一梯队的阿里的通义千问,使用这些模型都需要依赖外部的服务器,许多公司常常因为数据安全问题(或者成本问题)而不选择使用这些模型,而对于个人而言,我们很难有能力自己训练大模型,能做的只能是通过提示工程一点点训练模型参数,如果能在本地部署自己的模型,那么这些训练好的参数将会一直保留,形成一个越来越满足自己需求的大语言模型。
本文将介绍的 Ollama 是一个能在本地运行LLM模型(包括 Llama 3/以及最近很火的deepseek-r1)的工具。它允许用户在自己的计算机上部署和运行 Llama 模型,无需依赖云服务。通过 Ollama,用户可以使用这些开源的强大的语言模型来进行各种NLP任务,例如文本生成、对话机器人等,由于是部署在本地服务器,因此无需担心隐私泄漏或需要依赖于外部服务器。
总的而言,Llama 3/deepseek-r1 是大模型本身,专注于提供强大的语言理解和生成能力,这些开源大模型都能够在公开渠道下载(llama 3、deepseek-r1)。而Ollama是一个运行和管理大语言模型的工具,用以帮助用户在本地机器上方便地使用这些模型。
当然,开源大模型的推理和生成功能总是落后于闭源的商业模型,但总体对于许多公司而言,使用开源模型总是利大于弊的。
2. 通过Ollama在本地运行Llama 3和deepseek-r1
通过Ollama工具,可以很简单地在本地机器上运行开源的大语言模型。首先,需要根据自己的操作系统下载相应的Ollama到本地(下载地址);其次,在终端命令行窗口,通过ollama命令下载相应的llama大模型(下载命令),例如,如果想要安装Llama 3,可以执行一下命令:
ollama run llama3
如果要下载最近出圈的deepseek(目前上了r1版本),可以执行以下命令(更多命令可以参考: deepseek-r1安装命令):
ollama run deepseek-r1
如果是首次执行这个命令,则需要下载大模型,模型的参数量越大,下载时间越长;而如果是曾经运行过上述命令,并已下载好大模型,则该命令则是启动并运行大模型。当看到这个图标之后,表明Ollama已经在运行相应的大模型。
在终端输入提问信息后回车,即可获得大模型的反馈信息。
3. 通过ollama的python api与大模型对话
上述在终端运行的方式,尽管方便,但是不能实现更复杂的功能和场景模拟。以下介绍如何通过 python API 与大模型实现更灵活的对话。
需要注意的是,在用python API之前,要先运行上述的
ollama run llama3
或者是ollama run deepseek-r1
将大模型启动,才能成功执行相应的代码。
首先需要安装相应的python库:
pip install ollama
后文代码都以
model=llama3
模型作为示例,如果要调用deepseek-r1,只需要在代码中将模型改为model=deepseek-r1
。
接着可以尝试运行如下的简单示例代码:
import ollama
model = "llama3"
response = ollama.chat(
model=model,
messages=[
{
"role": "user", "content": "What's the capital of Poland?"}
]
)
print(response["message"]["content"])
## Prints: The capital of Poland is Warsaw (Polish: Warszawa).
上述代码中,import ollama
是启用Ollama API;model = "llama3"
是指定想要使用的大模型;ollama.chat()
则是调用ollama库获取相应的响应信息,包哈了模型信息和请求信息。
其中,content
是实际的消息内容,role
定义了谁是消息的“作者”,目前有3种角色类型:
user
也就是用户自己,表示该消息是由用户发起询问;assistant
则表示AI模型,可实现多方对话的模拟;system
则表示后面的消息内容,需要聊天机器人在整个对话过程中都要记住。相当于为模型提供了内部知识,能够用来设置聊天机器人的行为。
我们可以试验如下的例子,对于同一个问题query = "What is the capital of Poland?"
,通过添加system
消息为模型提供内部知识,来改变模型的回答结果。
system_messages =