Ollama
大约 5 分钟
Ollama
- 官网:https://ollama.com/
- GitHub: https://github.com/ollama/ollama
- 官方文档(GitHub):https://github.com/ollama/ollama/tree/main/docs
- 标签:对话型,客户端,开源大模型
- 网络
- 部分需要访问GitHub,可以使用Watt Toolkit免费工具访问
- 容器镜像,国内镜像被禁用,下载可查看该文档:https://wkdaily.cpolar.cn/archives/gc
- 其他均可直连访问及下载
安装
Docker
docker run -d -p 11434:11434 -e OLLAMA_HOST=0.0.0.0 --name ollama ollama/ollama
# 挂载GPU(--gpus=all)
docker run -d -p 11434:11434 -e OLLAMA_HOST=0.0.0.0 --name ollama --gpus=all ollama/ollama
Windows
- 打开官网 > "Download" > Windows图标 > "Download for Windows"
- 点击安装
Linux
- 打开官网 > "Download" > Linux图标 > 复制下载命令
curl -fsSL https://ollama.com/install.sh | sh
验证
- 验证ollama是否安装成功
# 打印Ollama版本
ollama -v
# ollama version is 0.3.4
# 请求Ollama服务(Windows直接浏览器访问 http://localhost:11434 效果相同)
curl localhost:11434
# Ollama is running
下载模型
- ollama相当于平台,运行需要另外下载模型
- 打开官网 > 右上角"Models" > 列表中选择一个模型
- 模型详情页中,可以切换模型版本,然后复制代码下载模型
- 大部分模型有多个版本,例如"8b"/"70b"/"405b"
# 查看已下载模型
ollama list
# 拉取模型(在Ollama官网的"Models"模块中)
ollama pull <模型名称>:<版本>
# 示例
ollama pull qwen2
ollama pull qwen2:0.5b
# 删除模型
ollama rm <模型名称>:<版本>
# 示例
ollama rm qwen2
ollama rm qwen2:0.5b
调用
cli调用
# 开启对话(未加载的会自动下载模型)
ollama run <模型名称>:<版本>
# 运行模型,进行问答
ollama run qwen2
>>> Send a message (/? for help)
API调用
- 文档:https://github.com/ollama/ollama/blob/main/docs/api.md
- 下方将其中一个接口作为示例,更多接口及详情看文档
- 也可以参考curl语句使用HTTP客户端调用
# 根据提示词生成
# POST /api/generate
curl http://localhost:11434/api/generate -d '{
"model": "llama3",
"prompt": "如何调用ollama的api?",
"stream": false
}'
# 识图
curl http://localhost:11434/api/generate -d '{
"model": "llava",
"prompt": "这张图片是什么意思(特定模型才有这个功能,如:llava)",
"images": ["iVBORw0KGgoAA...(base64编码的图片)"]
"stream": false
}'
- 对话
- role: 信息的角色,用于上下文信息,如"system","user","assistant"
- system: 场景设定
- user: 用户提问,或用户提供的信息
- assistant: 一般是ollama响应,response里也会有role字段
- content: 内容
- images: 类似generate接口,使用base64编码
- role: 信息的角色,用于上下文信息,如"system","user","assistant"
# 对话
# POST /api/chat
curl http://localhost:11434/api/chat -d '{
"model": "qwen2",
"messages": [
{ "role": "user", "content": "why is the sky blue?" }
]
}'
# 包含上下文(对话历史)
curl http://localhost:11434/api/chat -d '{
"model": "llama3",
"messages": [
{ "role": "system", "content": "你是小学老师,解答小学生回答的问题,解释尽量直白,能让小学生听懂"},
{ "role": "user", "content": "天空为什么是蓝色的?"},
{ "role": "assistant", "content": "阿巴阿巴..."},
{ "role": "user", "content": "说的简练一下,然后用英文终结一下"}
]
}'
python调用
- 官方Github: https://github.com/ollama/ollama-python
pip install ollama
- 基础用法
- 对话
- role: 信息的角色,用于上下文信息,如"system","user","assistant"
- system: 场景设定
- user: 用户提问,或用户提供的信息
- assistant: 一般是ollama响应,response里也会有role字段
- content: 内容
- images: 类似generate接口,使用base64编码
- role: 信息的角色,用于上下文信息,如"system","user","assistant"
import ollama
# 设置host
client = ollama.Client(host='http://localhost:11434')
# 拉取镜像(通义千问2,0.5b)
client.pull("qwen2:0.5b")
# 查看所有模型信息
images = client.list()
print(images)
# 调用generate接口
response = client.generate(model='llama3.1', prompt='python中如何调用ollama?')
print(response)
# chat接口(包含历史上下文)
response = client.chat("qwen2:0.5b", messages=[
{"role": "system", "content": "你是小学老师,解答小学生回答的问题,解释尽量直白,能让小学生听懂"},
{"role": "user", "content": "天空为什么是蓝色的?"},
{"role": "assistant", "content": "阿巴阿巴..."},
{"role": "user", "content": "说的简练一下,然后用英文终结一下"}
])
print(response)
- 多模态(图片)
- 多模态需要模型支持,如"llava"模型支持图片解析
- 图片读写均使用base64编码
import base64
def read_image_as_base64(file_path):
"""读取图片,返回base64编码字符"""
with open(file_path, 'rb') as f:
images_bytes = f.read()
base64_encoded = base64.b64encode(images_bytes)
base64_str = base64_encoded.decode('utf-8')
return base64_str
import ollama
from image_helper import read_image_as_base64
client = ollama.Client(host='http://localhost:11434')
response = client.generate(model="llava", prompt="描述一下这张图片里有哪些物体",
images=[read_image_as_base64("./cat.jpg")])
print(response)
js调用
- 官方Github: https://github.com/ollama/ollama-js
npm i ollama
import ollama from 'ollama'
const response = await ollama.chat({
model: 'llama3.1',
messages: [{ role: 'user', content: 'Why is the sky blue?' }],
})
console.log(response.message.content)
局域网访问
- 默认情况下,Ollama服务仅在本地运行,只能本机(localhost/127.0.0.1)访问,不对外提供服务
- 设置后,局域网中可以使用IP访问
Linux
# 修改Ollama配置
systemctl edit ollama.service
# 按下方修改后,重启服务
systemctl daemon-reload
systemctl restart ollama
- 配置增加环境变量
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=*"
# 修改端口号拼接到0.0.0.0后面
# Environment="OLLAMA_HOST=0.0.0.0:11434"
Windows
- 在环境变量里设置OLLAMA_HOST和OLLAMA_ORIGINS
- 重启Ollama
OLLAMA_HOST=0.0.0.0
OLLAMA_ORIGINS=*
界面
Chatbox
- 官网:https://chatboxai.app/zh
- 可下载客户端
- 设置Ollama访问地址即可
- Ollama都在本机,直接使用 "http://localhost:11434" 访问
- Ollama在其他主机时,Ollama需要配置局域网设置,然后使用ip访问
OpenWebUI
- 官网:https://docs.openwebui.com/
- 打开"外部链接"设置界面时很卡,发现是后台在查询openai接口,耐心等待一会儿
docker run -d -p 3000:8080 --gpus=all --name open-webui ghcr.io/open-webui/open-webui:ollama
# 单open-webui,然后设置ollama地址
docker run -d -p 3000:8080 --name open-webui ghcr.io/open-webui/open-webui:main
# 运行后,进入主页 > 头像 > 管理员面板 > 设置 > 外部连接 > Ollama API > 地址修改为Ollama地址
# ollama与open-webui同一台电脑
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway --name open-webui ghcr.io/open-webui/open-webui:main