自然语言模型大家听的比较多的是OpenAI,它有聊天(Chat)、补全(Completion)、提取结果信息(Extract Result Information)、模拟聊天(Mock Chat)等功能;还有其它语言模型比如Google公司研发的mBERT (Multilingual BERT)、BERT (Bidirectional Encoder Representations from Transformers)、XLNet、ALBERT (A Lite BERT)、mBERT (Multilingual BERT)和T5 (Text-to-Text Transfer Transformer),Facebook研发的RoBERTa (Robust BERT)和LLaMA (Large Language Model Meta Architecture)等;这些语言模型所提供的能力都差不多,只是训练的侧重点有点区别,我们也可以基于这些模型基础上加强训练。今天介绍的这个模型是llama,它和OpenAI所提供的服务和能力类似,它是一个开源模型可以部署本地离线服务。那么下面我们一步一步跟进自建服务集成llama API应用与实战配置。
llama_1">首页安装Ollama应用与其对应的模型
这步可参考我上一篇写的《A1.本地大模型Ollama 3.2部署》本地先搭建一个llama环境
配置OLLAMA_HOST主机地址
这里安装llama3.2后,如果环境变量未配置OLLAMA_HOST那么其API只能通过127.0.0.1或localhost地址访问(即http://127.0.0.1:11434)。局域网内其它主机均不能通过内网IP方式访问,这是因为默认情况下绑定的地址为listen 127.0.0.1:11434这种回环地址。到这里问题就清楚了我们只要将绑定地址改成0.0.0.0:11434(允许接收所有来源)即可
llama_5">STEP 1 退出Ollama工具盒子
STEP 2 配置环境变量(这里以Mac为例,其它系统只要配置OLLAMA_HOST也一样的效果)
编辑.zshrc、.base_profile、.zprofile环境文件,将以下命令添加到配置文件最后一行
vim .zprofile
#0.0.0.0表示接收所有来源地址
#11434是llama默认的端口,如果想修改其它端口可在这里直接指定
export OLLAMA_HOST=0.0.0.0:11434
同时要设置应用启动时环境变量,在终端执行以下命令即可
launchctl setenv OLLAMA_HOST "0.0.0.0:11434"
这里我们针对OLLAMA_HOST设置做一下小结,为什么在配置了.zprofile之后还要通过launchctl命令再设置一遍。那是因为如果仅配置了.zprofile在终端只能通过ollama serve <模型名称>来启动,由当前终端shell fork出来一个进程,此时环境变量会继承.zprofile中设置的值,因此设置的值是有效的。而双击Ollama.app应用程序是通过Launch Service管理和启动的,不会读取.zprofile配置的环境变量,需要通过launchctl setenv来设置。因此需要两种方式都设置,这样不论双击启动还是终端启动OLLAMA_HOST绑定的0.0.0.0:11434值都会生效。
llama_22">Ollama服务基础地址
服务基础地址(baseUrl)即是Ollama模型部署在那台机器或容器所对应的主机地址。如部署在本地那么baseUrl=http://127.0.0.1:11434或部署在某一台特定IP上主机那么baseUrl=http://IP:11434。至于端口可查看我前面写的《A1.本地大模型Ollama 3.2部署》文章以具体配置的为准,默认端口为11434。
llama_API_24">官方Ollama API
llama_26">REST API 0 查询Ollama工具盒子版本号
请求方式:GET
请求路径:/api/version
响应参数:
字段 | 描述 |
---|---|
version | ollama大模型工具盒子版本号 |
响应示例:
{"version": "0.5.1"
}
REST API 1 查询已有(有效)的模型集合
请求方式:GET
请求路径:/api/tags
响应参数(单个模型字段说明):
字段 | 描述 |
---|---|
name | 模型名称 |
modified_at | 模型最后修改的时间戳 |
size | 模型大小 |
digest | 模型的校验和(digest),一个用于验证模型完整性的哈希值 |
details | 模型的详细信息 |
|-- format | 模型文件的格式 |
|-- family | 模型家族 |
|-- families | 模型家族列表,空表示没有其他相关家族信息 |
|-- parameter_size | 模型参数的大小(能指的是某种量化级别的参数) |
|-- quantization_level | 模型的量化级别 |
响应示例:
{"models": [{"name": "codellama:13b","modified_at": "2023-11-04T14:56:49.277302595-07:00","size": 7365960935,"digest": "xxxx","details": {"format": "gguf","family": "llama","families": null,"parameter_size": "13B","quantization_level": "Q4_0"}}]
}
REST API 2 查询已加载到内存(正在运行)的模型
请求方式:GET
请求路径:/api/ps
响应参数:参考REST API 1 查询已有(有效)的模型集合
响应示例:参考REST API 1 查询已有(有效)的模型集合
REST API 3 创建一个模型
请求方式:POST
请求路径:/api/create
请求参数:
参数名 | 描述 |
---|---|
model | 指定创建的模型名称 |
modelfile | (可选):模型文件的内容 |
stream | (可选)如果是false,响应将作为单个响应对象返回,而不是对象流 |
path | (可选):模型文件的路径 |
quantize | (可选):创建非量化(例如float16)模型 量化类型:q2_K、q3_K_L、q3_K_M、q3_K_S、q4_0、q4_1、q4_K_M、q4_K_S、q5_0、q5_1、q5_K_M、q5_K_S、q6_K、q8_0 |
请求示例:
//未指定量化参数quantize
curl baseUrl/api/create -d '{"model": "mario","modelfile": "FROM llama3\nSYSTEM You are mario from Super Mario Bros."
}'//已指定量化参数quantize
curl baseUrl/api/create -d '{"model": "llama3.1:quantized","modelfile": "FROM llama3.1:8b-instruct-fp16","quantize": "q4_K_M"
}'
响应参数:
字段 | 描述 |
---|---|
status | 创建模型过程中响应的状态 每个间段的状态:读取模型元数据、创建系统层、使用已经创建的层、写入层、写入清单、完成 |
响应示例(返回一个JSON对象流):
//未指定量化参数quantize
{"status":"reading model metadata"}
{