如果你是第一次开始研究如何使用开源大语言模型(LLM)测试 GenerativeAI 时,一开始所有的信息一股脑在你的眼前,令人望而生畏。互联网上存在着来自许多不同来源的大量碎片信息,使得快速启动项目变得困难。
这篇文章的目标是提供一篇简易上手的文章,帮助你使用名为 Ollama 的模型的启动程序在本地设置和运行开源 AI 模型,当然,这些步骤也同样可以让你在你的服务器上运行它。
什么是 Ollama
Ollama 是一款帮助我们在本地机器上运行大型语言模型的工具,它让你在本地测试 LLM 变得更加容易。Ollama 提供了本地命令行和 API 调用多种方式进行交互。如果你是想快速测试,那么 CLI 则是一个非常不错的方式;如果你是想开始一个产品,你也可以选择试用/api/chat
进行开发一个应用。
Ollama 分为两个部分:一个是运行 LLM 的服务端,另外一个则是可选组件:用于和服务端和 LLM进行交互的 CLI。
安装 Ollama
Ollama 官方提供了安装包用于 MacOS/Linux/Windows 下载。其中 Windows 支持截止到目前(2024/02/27)为止,还是预览支持,可能存在问题。因此这里我们演示使用 MacOS 安装这个应用。
下载安装
下载完成后,解压这个 zip 文件即可得到Ollama 的应用程序,你可以把它拖到系统的应用程序文件夹中,双击打开:
如果是第一次打开,会遇到安全提示,选择打开即可。
接下来需要安装 Ollama 的命令行工具,这样你就可以在命令行中访问LLM 了。
命令行安装
当然,如果你安装了[homebrew](https://brew.sh/)
包管理工具,也可以使用下面的方式快速安装 Ollama:
brew install ollama
命令行方式安装时,需要额外注意我们无法像图形界面进行后台服务启动。你需要施工执行下面的命令启动Ollama 服务端:
ollama serve
试用 Ollama
现在你已经安装完成 Ollama 了,接下来让我们运行一个基础的模型试用一下。Ollama 支持了很多的开源模型,包括 Google 最新开源的 Gemma。不过这里我推荐使用Mistral 7B 模型。我们可以使用下面的命令快速安装对应模型:
ollama pull mistral
这会安装 Mistral 7B 模型,这是一个效率很高,效果不错的模型。这个命令通常会下载几个 G 到几十个 G 的模型到本地,请注意确保网速和本地磁盘空间足以安装模型。
我们现在假设你已经安装模型成功了,我们可以使用下面的命令,开始进行试用:
ollama run mistral
如果你执行这个命令遇到了以下报错,说明你的服务端还没有启动:
ollama run mistral
Error: could not connect to ollama app, is it running?
你可以双击打开应用,或者使用下面的命令快速启动服务端:
ollama serve
执行试用模型命令之后,可能需要一段时间加载模型。这可能需要一些时间,具体的时间和你的电脑配置相关。
加载模型成功之后,你可以看到这样的界面:
让我们提个问题,让它回答一下吧:
这个问题可能太简单了,我们让 AI 使用 Python 编写一个快速排序的实现吧:
关于 Mistral 的一些分享
开源的模型有很多,为什么会推荐 Mistral 呢?Mistral 有几个不错的点:虽然是一个 7B 模型,根据一些 benchmark 显示可以堪比 LLaMA 13B 模型;同时因为是 7B 模型,因此在 CPU 推理时性能也还可以接受,如果使用 GPU 推理,则速度非常快速。
当然它也有很多缺点,比如因为参数体量的原因,Mistral 的信息量其实非常有限,这意味着如果在实际项目或者把它当作 AI 助手,你可能还需要补充很多的信息给模型它才可能知道。这让 Mistral 可以作为一个非常合适的扩展开发工作的模型。
使用Ollama 进行开发
为了快速开发应用,我们选择使用 Python 进行开发。
让我们从最开始的问答开始:
# llm_chat.py
import requests
res = requests.post(
"http://127.0.0.1:11434/api/chat", # 服务器地址
json={
"model": "mistral", # 使用 mistral 模型
"stream": False, # 禁用流式输出
"messages": [
{"role": "user", "content": "你是谁?"}, # 用户输入
],
},
)
print(res.json())
接下来,我们执行一下这个 Python 脚本:
如果仅仅满足问答需求,可能不足以满足我们在实际项目中的需求。我们通常在程序中集成格式化输出的内容,以方便程序进行解析和后续处理。因此,我们需要通过 Prompt Engineering 方式实现这种目标:
# llm_chat.py
import requests
res = requests.post(
"http://localhost:11434/api/chat",
json={
"model": "mistral", # 使用 mistral 模型
"stream": False, # 禁用流式输出
"messages": [
{
"role": "user",
"content": """你是谁?使用yaml格式进行回答,yaml格式如下:
name: string
language: string
""", # 用户输入
},
],
},
)
print(res.json())
注意我们在这里要求 LLM 按照 YAML格式进行输出。这是一种对人和机器都友好的格式。我们提供了具体的格式定义和字段名与类型,防止 LLM 的自我发挥:
name: string
language: string
我们再执行一下这个文件:
我们可以看到 LLM 按照我们的格式要求输出了对应的内容:让我们按照 YAML 格式展示一下输出的内容:
name: "AI Assistant"
language: "English"
这样就可以借助 LLM 把这些非格式化的内容转化为格式化内容方便我们的应用进行进一步处理。
结语
正如你所看到的,使用 Ollama 快速部署本地开源大语言模型就是那么简单。借助Ollama提供的能力,我们可以轻松地在本地测试开源 AI 模型。这是创建使用真正人工智能的应用程序的第一步。关于后续真正进入真正的 AI 应用开发,后续再更新一些系列文章进一步讲解一下。