Ollama简介       

        Ollama是在Github上的一个开源项目,其项目定位是:一个本地运行大模型的集成框架,目前主要针对主流的LLaMA架构的开源大模型设计,通过将模型权重、配置文件和必要数据封装进由Modelfile定义的包中,从而实现大模型的下载、启动和本地运行的自动化部署及推理流程。此外,Ollama内置了一系列针对大模型运行和推理的优化策略,目前作为一个非常热门的大模型托管平台,基本主流的大模型应用开发框架如LangChain、AutoGen、Microsoft GraphRAG及热门项目AnythingLLM、OpenWebUI等高度集成。

     Ollama 和 vLLM 都是当前大模型部署领域最热门的工具

  • Ollama: 面向开发者和个人用户的“开箱即用”式模型运行和部署工具。它的目标是让任何人都能最简单地在本地电脑或服务器上拉取和运行各种大模型,类似于 Docker for LLMs。

  • vLLM: 面向生产环境的高性能、高吞吐量推理服务器和引擎。它的核心优势在于其革命性的 PagedAttention 算法,极大地优化了内存管理和并行处理能力,专门为需要同时处理大量用户请求(高并发)的场景而设计。

Ollama部署

        Ollama通过将大模型运行的所有必要组件(如权重文件、配置设置和相关数据)封装在一个单一的文件或包中,Modelfile允许用户更容易地下载、安装、配置和启动模型。这种方法类似于其他软件或应用程序的安装包,它们将所有必要的文件打包在一起,以便用户可以通过简单的安装过程将软件添加到他们的系统中。

1.安装Ollama

Linux/macOS: 一条命令搞定,需要将镜像地址改到国内,不然下载不了。

export OLLAMA_MIRROR="https://ghproxy.cn/https://github.com/ollama/ollama/releases/latest/download"
curl -fsSL https://ollama.com/install.sh | sed "s|https://ollama.com/download|$OLLAMA_MIRROR|g" | sh

        windows需要下载安装,地址:https://ollama.com/download/windows

查看Ollama运行状态,active说明Ollama已经启动:

systemctl status ollama

2.运行模型

  • 安装Ollama后,运行一个模型(例如 deepseek)只需要一行命令。Ollama 会自动从官网拉取模型。

    ollama run deepseek-r1:1.5b

    这会在本地启动一个 API 服务器,默认端口为 11434

3.管理模型

ollama的命令可以通过ollama -h查看,和docker命令相似度很高

4.接口

        Ollama 服务启动后会提供一系列原生 REST API端点。通过这些Endpoints可以在代码环境下与ollama启动的大模型进行交互、管理模型和获取相关信息。其中两个endpoint是最重要的,分别是:

POST /api/generate

POST /api/chat

     这里需要注意的一点是:如果 Ollama启动和执行调用的代码是同一台机器,上述代码是可以的跑通的。比如Ollama服务在云服务器、局域网的服务器上等情况,则无法通过http://localhost:11434/v1/来进行访问,因为网络不通。Ollama模型服务是在局域网的服务器上,因此需要修改Ollama REST API的请求地址,操作方法如下:   

systemctl edit ollama.service

增加:

Environment="OLLAMA_HOST=0.0.0.0:11434"

保存退出后,重新加载systemd并重新启动Ollama服务使其配置生效,执行如下命令:

systemctl daemon-reload
systemctl restart ollama

/api/generate接口

        该接口使用提供的模型为给定提示生成响应。这是一个流式端点,因此会有一系列响应。

import requests # type: ignore
import json

# 设置 API 端点
generate_url = "http://localhost:11434/api/generate"    # 这里需要根据实际情况进行修改

# 示例数据
generate_payload = {
    "model": "deepseek-r1:1.5b",   # 这里需要根据实际情况进行修改
    "prompt": "请生成一个关于人工智能的简短介绍。",  # 这里需要根据实际情况进行修改
    "stream": False,       # 默认使用的是True,如果设置为False,则返回的是一个完整的响应,而不是一个流式响应
}

# 调用生成接口
response_generate = requests.post(generate_url, json=generate_payload)
if response_generate.status_code == 200:
    generate_response = response_generate.json()
    print("生成响应:", json.dumps(generate_response, ensure_ascii=False, indent=2))
else:
    print("生成请求失败:", response_generate.status_code, response_generate.text)

/api/chat接口

该接口使用提供的模型在聊天中生成下一条消息

import requests
import json

# 设置 API 端点
chat_url = "http://localhost:11434/api/chat"    # 这里需要根据实际情况进行修改

# 示例数据
chat_payload = {
    "model": "deepseek-r1:1.5b",   # 这里需要根据实际情况进行修改
    "messages": [
        {
            "role": "user",  # 消息角色,用户发送的消息
            "content": "请生成一个关于人工智能的简短介绍。"  # 用户的消息内容
        }
    ],
    "tools": [],  # 如果有工具可以在这里添加
    "stream": False,  # 默认使用的是True,如果设置为False,则返回的是一个完整的响应,而不是一个流式响应
}

# 调用聊天接口
response_chat = requests.post(chat_url, json=chat_payload)
if response_chat.status_code == 200:
    chat_response = response_chat.json()
    print("生成响应:", json.dumps(chat_response, ensure_ascii=False, indent=2))
else:
    print("生成请求失败:", response_chat.status_code, response_chat.text)

/api/generate和 /api/chat接口,其实就是Ollama兼容OpenAI的REST API接口的底层实现。其中:

/api/generate接口对应OpenAI的completions接口;

/api/chat接口对应OpenAI的chat/completions接口;

因此我们现在再来看ollama中的OpenAI compatibility的API接口调用

from openai import OpenAI # type: ignore

client = OpenAI(
    base_url='http://127.0.0.1:11434/v1/',     # 这里修改成可访问的 IP
    api_key='ollama',   # 这里随便写,但是api_key字段一定要有
)

chat_completion = client.chat.completions.create(
    model='deepseek-r1:1.5b',
    messages=[
        {
            'role': 'user',
            'content': '你好,请你介绍一下什么是人工智能?',
        }
    ],
)

print(chat_completion.choices[0].message.content)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐