头图
  • BiliBili视频
  • 官网:https://ollama.com/
  • GitHub: https://github.com/ollama/ollama
  • 官方文档(GitHub):https://github.com/ollama/ollama/tree/main/docs
  • 标签:对话型,客户端,开源大模型
  • 网络

    安装

    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编码
    # 对话
    # 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编码
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

言午日尧耳总
1 声望5 粉丝

不秃顶、不猝死,顺顺利利活到100可以吗?


« 上一篇
Gradio
下一篇 »
HuggingFace