Ollama配置笔记

一、Ollama简介

Ollama是一个开源项目,旨在简化大规模语言模型的使用和部署。它允许用户在本地或云端运行各种语言模型,而不需要依赖外部API或第三方服务。Ollama支持模型的快速加载和推理,并提供易于使用的命令行工具和API,使得开发者能够方便地与模型进行交互。

Ollama的特点包括:

  1. 本地部署:用户可以在自己的机器上运行模型,提高数据隐私和安全性。
  2. 多模型支持:支持多种语言模型,用户可以根据需要选择合适的模型。
  3. 高效推理:优化推理过程,提升响应速度。
  4. 灵活性:可以与其他工具和框架集成,方便构建复杂的应用。

Ollama官方地址:Ollama

二、配置环境

  1. Ubuntu24.04.1
  2. 内存单通道DDR4 32G,处理器 Intel Xeon Gold 5218 4X8核,硬盘128G

三、配置Ollama

1.安装Ollama

(1) 访问Ollama官网选择Linux,执行官方提供的安装方法:

curl -fsSL https://ollama.com/install.sh | sh

这个方法的优点是一键安装,开箱即用,非常方便,缺点是国内的原因,下载极慢而且极不稳定,亲测通过科学上网的方式依旧无法安装。

(2) 另一个办法就是访问OllamaLinuxGithub主页:ollama/docs/linux.md at main · ollama/ollama · GitHub

使用Manual install方法:

curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz
sudo tar -C /usr -xzf ollama-linux-amd64.tgz

这个方法的优点是比第一种要快一些,但依旧不稳定,经常断开连接,可能是我科学上网的方式有问题。

(3)以上两种方式我都尝试了,但始终没有成功,所以有了如下手动下载解压的方法。

首先使用一台科学上网的电脑访问:https://ollama.com/download/ollama-linux-amd64.tgz下载ollamaLinux压缩包,然后将压缩包复制到用户目录下解压即可使用。

命令如下:

sudo apt update
sudo apt upgrade curl
curl -O https://ollama.com/download/ollama-linux-amd64.tgz
tar -xzvf filename.tar.gz

我使用Windows下载的压缩包,并将其拷贝到了我的虚拟机中,为了方便下载我已将压缩包上传至百度网盘:

链接: https://pan.baidu.com/s/1y4DVyOzku-vMSzb0WZABnw 提取码: 2zmn

下载完成后到该目录执行tar -xzvf filename.tar.gz解压即可。

此时Ollama已经下载安装完成,执行

ollama serve

启动Ollama服务。执行

ollama -v

查看Ollama服务是否成功启动。

在这里插入图片描述

2.配置Ollama远程访问

Ollama服务启动后,默认只可本地访问,访问地址:

http:127.0.0.1:11434

想要实现外部访问需要修改其配置文件。

执行如下命令打开配置文件

sudo nano /etc/systemd/system/ollama.service

将如下内容复制到配置文件中:

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_HOST=0.0.0.0:11434"

[Install]
WantedBy=default.target

修改完成后重启服务:

sudo systemctl daemon-reload
sudo systemctl enable ollama

此时在浏览器中访问:http://0.0.0.0:11434出现如下页面即说明服务启动成功。

在这里插入图片描述

3.运行模型

此处选用的是qwen2.5:3b模型。运行

ollama run qwen2.5:3b

即可调用模型,首次调用需要下载模型,后续调用无需下载。

在这里插入图片描述

执行Ollama list可查看已经下载的模型信息

在这里插入图片描述

更多指令可使用ollama --help查看。

四、Python访问Ollama

PythonOllama提供了专门的包,以方便用户在此基础上进行相关的开发工作。

首先要安装对应的模块:

pip install ollama

我们下载运行的模型默认是不提供长会话的,对此我进行了一些封装,以便其支持长会话操作:

import json
from typing import List

import ollama


class MyOllama(object):
    class ModelList:
        """
        Ollama模型列表
        """
        Qwen2_5_3b = "qwen2.5:3b"

    class Role:
        """
        由Ollama官方定义,用于区分消息是由哪个角色提供
        """
        User = "user"  # 用户信息,一般指用户提问
        System = "system"  # 系统信息,一般用于设定场景
        Assistant = "assistant"  # 系统回答

    def __init__(self, host: str, port: int, temperature=0, history_size: int = 5 * 1024 * 1024):
        """
        初始化一个客户端
        :param host:
        :param port:
        :param temperature: 情感度,默认为0
        :param history_size: 历史会话大小,默认为5MB
        """
        self.history_size = history_size
        self.temperature = temperature
        self.client = ollama.Client(host=f"http://{host}:{port}")
        self.content: List[dict] = []

    def single_conversation(self, model: str, content: str):
        """
        单次会话
        :param model: 调用模型,由OllamaList提供
        :param content: 会话内容
        :return:
        """
        try:
            res = self.client.chat(model=model, messages=[{"role": MyOllama.Role.User, "content": content}],
                                   options={"temperature": self.temperature})

            return res["message"]["content"]

        except Exception as e:
            raise Exception(e)

    def long_conversation(self, model: str, content: str):
        """
        长会话
        :param model: 调用模型,由OllamaList提供
        :param content: 会话内容
        :return:
        """
        input_message = {"role": MyOllama.Role.User, "content": content}

        self.content.append(input_message)

        # 更新历史记录大小
        while MyOllama.get_history_size(self.content) > self.history_size:
            self.content.pop(0)  # 移除最早的消息

        try:
            res = self.client.chat(model=model, messages=self.content, options={"temperature": self.temperature})
            message = res["message"]["content"]
            self.content.append({"role": "assistant", "content": message})

            return message

        except Exception as e:
            raise Exception(e)

    @staticmethod
    def get_history_size(history):
        """历史记录的大小(字节)"""
        return sum(len(json.dumps(message).encode('utf-8')) for message in history)

以下是调用测试:

单次会话调用测试

from MyOllama.myOllama import MyOllama

host = "10.1.3.139"
port = 434

my_ollama = MyOllama(host, port, temperature=100)

if __name__ == '__main__':
    while True:
        in_put = input("请输入:")
        if in_put == "":
            continue

        message = my_ollama.single_conversation(MyOllama.ModelList.Qwen2_5_3b, content=in_put)
        print(message)

结果如下:
在这里插入图片描述

可以看到,单次会话没有连续性。

长会话调用测试

from MyOllama.myOllama import MyOllama

host = "10.1.3.139"
port = 434

my_ollama = MyOllama(host, port, temperature=100)

if __name__ == '__main__':
    while True:
        in_put = input("请输入:")
        if in_put == "":
            continue

        message = my_ollama.long_conversation(MyOllama.ModelList.Qwen2_5_3b, content=in_put)
        print(message)

结果如下:
在这里插入图片描述

可以看到对话具有逻辑连续性。

五、总结

以上就是对Ollama的配置使用以及在此基础上进行开发的方法总结,欢迎指正。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐