Ollama大模型

Ollama是什么?

答:一只羊驼,不信可以去官网看看(doge)。

但是通过认知的不断完善我们可以发现,Ollama是一款旨在简化大型语言模型本地部署和运行过程的开源软件

Ollama提供了一个轻量级、易于扩展的框架,让开发者能够在本地机器上轻松构建和管理LLMs(大型语言模型)。通过Ollama,开发者可以访问和运行一系列预构建的模型,或者导入和定制自己的模型,无需关注复杂的底层实现细节。

Ollama的主要功能包括快速部署和运行各种大语言模型,如Llama 2、Code Llama等。它还支持从GGUF、PyTorch或Safetensors格式导入自定义模型,并提供了丰富的API和CLI命令行工具,方便开发者进行高级定制和应用开发。

给我个人的感觉就是类似于声音大模型UVR5或者MSST的模型部署运行软件。

image-20250603141501075

Ollama下载

Ollama共支持三种平台:

Ollama安装与DeepSeek大模型部署

Ollama跟别的软件一样都是需要解压安装后需要修改一些配置文件的。

手动安装

window和mac版本直接下载安装或解压即可使用。由于Ollama需要安装在linux中,且工作中如果接触有内网环境,所以需要知道如何手动安装:

Step 1. 安装

在虚拟机/root/resource目录中已经下载好Linux版本所需的ollama-linux-amd64.tgz文件,则执行下面命令开始安装:

1
>tar -C /usr -xzf ollama-linux-amd64.tgz

操作成功之后,可以通过查看版本指令来验证是否安装成功

1
2
3
>[root@bogon resource]# ollama -v
>Warning: could not connect to a running Ollama instance
>Warning: client version is 0.3.9

Step 2. 添加开启自启服务

创建服务文件/etc/systemd/system/ollama.service,并写入文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
>[Unit]
>Description=Ollama Service
>After=network-online.target

>[Service]
>ExecStart=/usr/bin/ollama serve
>User=root
>Group=root
>Restart=always
>RestartSec=3

>[Install]
>WantedBy=default.target

生效服务:

1
2
>sudo systemctl daemon-reload
>sudo systemctl enable ollama

启动服务:

1
>sudo systemctl start ollama

一键安装

Ollama在Linux上也提供了简便的安装命令,工作中一般采用下面命令进行安装:

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

修改模型路径

在虚拟机中已经提前下载好了相关模型(包括后续用到的模型),存储在/root/ollama目录中,因此这里我们需要修改ollama的模型路径,ollama软件在各个操作系统上的默认存储路径是:

macOS: ~/.ollama/models
Linux: ~/.ollama/models
Windows: ~/.ollama/models

要修改其默认存储路径,需要通过设置系统环境变量来实现,即在/etc/profile文件中最后增加一下环境变量:

vim /etc/profile

1
export OLLAMA_MODELS=/root/ollama

然后执行一下命令,生效环境变量:

1
2
3
4
[root@bogon ollama]# source /etc/profile
[root@bogon ollama]# echo $OLLAMA_MODELS
/root/ollama
[root@bogon ollama]#

然后重新ollama服务,则会跳过下载,直接进入大模型,对话完成后可以通过/bye指令终止对话:

1
2
3
4
5
6
7
8
[root@bogon ollama]# systemctl stop ollama
[root@bogon ollama]# ollama serve &
[root@bogon ~]# ollama run qwen2:0.5b
>>> 您好
很高兴为您服务!有什么问题或需要帮助的吗?

>>> /bye
[root@bogon ~]#

让重启也支持模型路径:

上述方式修改后,通过ollama命令是生效的,但是重启电脑则不生效,要解决这个问题,则还需要进行如下配置:

修改服务文件/etc/systemd/system/ollama.service内容为一下::

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=root
Group=root
Restart=always
RestartSec=3
Environment="OLLAMA_MODELS=/root/ollama"

[Install]
WantedBy=default.target

生效修改的配置:

1
2
systemctl daemon-reload
systemctl restart ollama

DeepSeek大模型部署

  • 直接通过Ollama pull命令拉取deepseek模型

  • 或者通过命令:ollama run 模型名称:模型规模运行模型,如果没有则会自动拉取

1
2
3
ollama pull deepseek-r1:1.5b

ollama run 模型名称:模型规模

Ollama终端命令&对话指令(※)

终端命令

  • 下载模型:ollama pull deepseek-r1:1.5b

    • 标准:ollama pull MODEL[:Version] [flags]
      • [:Version] 可以理解成版本,但在这里理解成大模型规模,可以不写,不写则模式成latest
      • [flags] 参数,目前只有一个–insecure参数,用于来指定非安全模式下载数据
  • 运行模型:ollama run qwen2

    • 或者:ollama run qwen2:latest(同上)
  • 查看模型的信息:ollama show -h

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@JohnsonLiam ~]# ollama show -h
Show information for a model

Usage:
ollama show MODEL [flags]

Flags:
-h, --help 查看使用帮助
--license 查看模型的许可信息
--modelfile 查看模型的制作源文件Modelfile
--parameters 查看模型的内置参数信息
--system 查看模型的内置Sytem信息
--template 查看模型的提示词模版
  • 查看本地下载的大模型列表:ollama list

    • 也可以使用简写ls:ollama ls
    • 列表字段说明:
      • NAME:名称
      • ID:大模型唯一ID
      • SIZE:大模型大小
      • MODIFIED:本地存活时间
  • 删除本地大模型:ollama rm qwen2:0.5b

  • 查看当前运行的大模型列表,PS命令没其它参数:ollama ps

对话指令

  • /show指令

/show 指令:用于查看当前模型详细信息

1
2
3
4
5
6
7
8
9
[root@bogon ~]#  ollama run qwen2:0.5b
>>> /show
Available Commands:
/show info 查看模型的基本信息
/show license 查看模型的许可信息
/show modelfile 查看模型的制作源文件Modelfile
/show parameters 查看模型的内置参数信息
/show system 查看模型的内置Sytem信息
/show template 查看模型的提示词模版
  • /? shortcuts 指令

查看在控制台中可用的快捷键

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> /? shortcuts
Available keyboard shortcuts:
Ctrl + a 移动到行头
Ctrl + e 移动到行尾
Ctrl + b 移动到单词左边
Ctrl + f 移动到单词右边
Ctrl + k 删除游标后面的内容
Ctrl + u 删除游标前面的内容
Ctrl + w 删除游标前面的单词

Ctrl + l 清屏
Ctrl + c 停止推理输出
Ctrl + d 退出对话(只有在没有输入时才生效)
  • “”” 指令

“”” 用于输入内容有换行时使用,如何多行输入结束也使用 “””

1
2
3
4
5
>>> """
... 您好
... 你是什么模型?
... """
我是一个计算机程序,可以回答您的问题、提供信息和执行任务。请问您有什么问题或者指令想要我帮助您?
  • /set 指令

set指令主要用来设置当前对话模型的系列参数

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> /set
Available Commands:
/set parameter ... 设置对话参数
/set system <string> 设置系统角色
/set template <string> 设置推理模版
/set history 开启对话历史
/set nohistory 关闭对话历史
/set wordwrap 开启自动换行
/set nowordwrap 关闭自动换行
/set format json 输出JSON格式
/set noformat 关闭格式输出
/set verbose 开启对话统计日志
/set quiet 关闭对话统计日志

设置对话参数

1
2
3
4
5
6
7
8
9
10
11
12
>>> /set parameter
Available Parameters:
/set parameter seed <int> Random number seed
/set parameter num_predict <int> Max number of tokens to predict
/set parameter top_k <int> Pick from top k num of tokens
/set parameter top_p <float> Pick token based on sum of probabilities
/set parameter num_ctx <int> Set the context size
/set parameter temperature <float> Set creativity level
/set parameter repeat_penalty <float> How strongly to penalize repetitions
/set parameter repeat_last_n <int> Set how far back to look for repetitions
/set parameter num_gpu <int> The number of layers to send to the GPU
/set parameter stop <string> <string> ... Set the stop parameters
Parameter Description Value Type Example Usage
num_ctx 设置上下文token大小. (默认: 2048) int num_ctx 4096
repeat_last_n 设置模型要回顾的距离以防止重复. (默认: 64, 0 = 禁用, -1 = num_ctx) int repeat_last_n 64
repeat_penalty 设置惩罚重复的强度。较高的值(例如,1.5)将更强烈地惩罚重复,而较低值(例如,0.9)会更加宽容。(默认值:1.1) float repeat_penalty 1.1
temperature 模型的温度。提高温度将使模型的答案更有创造性。(默认值:0.8) float temperature 0.7
stop 设置停止词。当遇到这种词时,LLM将停止生成文本并返回 string stop “AI assistant:”
top_k 减少产生无意义的可能性。较高的值(例如100)将给出更多样化的答案,而较低的值(例如10)将更加保守。(默认值:40) int top_k 40
  • /clear 指令

在命令行终端中对话是自带上下文记忆功能,如果要清除上下文功能,则使用/clear指令清除上下文内容,例如:

前2个问题都关联的,在输入/clear则把前2个问题的内容给清理掉了,第3次提问时则找不到开始的上下文了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> 请帮我出1道java list的单选题 
以下是一些关于Java List的单选题:

1. 在Java中,List是哪一种数据结构?
2. Java中的顺序存储方式(例如:使用数组)主要用来做什么?
3. 一个列表对象可以包含哪些类型的元素?

>>> 再出1道
以下是一些关于Java List的单选题:

4. 在Java中,List接口用于创建和操作集合。
5. Java中的顺序存储方式(如:使用数组)的主要优势有哪些?
6. 一个列表对象可以包含哪些类型?

>>> /clear
Cleared session context
>>> 在出1道
很抱歉,我无法理解您的问题。您能否提供更多的背景信息或者问题描述,以便我能更好地帮助您?
  • /load 指令

load可以在对话过程中随时切换大模型

1
2
3
4
5
6
7
8
9
>>> 你是什么大模型
我是一个基于开放AI平台的模型,拥有一个强大的数学推理能力,并且在各种自然语言处理任务上都表现优秀。我可以回答您提出的问题,也可以提供与主题相关的信息和建议。如果您有任何问题或需要帮助,
请随时告诉我!

>>> /load deepseek-coder
Loading model 'deepseek-coder'
>>> 你是什么大模型
我是由中国的深度求索(DeepSeek)公司开发的编程智能助手,名为 Deepseek Coder。我主要用于解答和协助计算机科学相关的问题、问题解决方案等任务。我的设计目标是提供最全面准确的高质量服务来帮
助用户理解复杂的新技术或概念并迅速找到它们在实际应用中的实现方法或者原理所在的地方。
  • /save 指令

可以把当前对话模型存储成一个新的模型

1
2
>>> /save test
Created new model 'test'

保存的模型存储在ollama的model文件中,进入下面路径即可看见模型文件test:

1
2
3
4
[root@bogon library]# pwd
/root/ollama/manifests/registry.ollama.ai/library
[root@bogon library]# ls
deepseek-coder qwen2 test

小结

  • /bye指令 :退出当前控制台对话
  • /show指令:用于查看当前模型详细信息
  • /load指令:可以在对话过程中随时切换大模型
  • /set指令:指令主要用来设置当前对话模型的系列参数
  • clear指令:清除上下文内容

Ollama的API接口(※)

Ollama对客户端相关的命令也提供API操作的接口,方便在企业应用中通过程序类操作私有大模型。

开通远程访问

为了在本机(开发环境)中能访问虚拟机中的Ollama API,我们需要先开通Ollama的远程访问权限:

Step 1:增加环境变量

在/etc/profile中增加一下环境变量:

vim /etc/profile

1
2
export OLLAMA_HOST=0.0.0.0:11434
export OLLAMA_ORIGINS=*

然后通过一下命令,生效环境变量:

1
source /etc/profile

Step 2:增加服务变量

修改服务文件/etc/systemd/system/ollama.service内容为一下:

vim /etc/systemd/system/ollama.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=root
Group=root
Restart=always
RestartSec=3
# 此配置为模型目录,没有改的话不要加!
# Environment="OLLAMA_MODELS=/root/ollama"
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"

[Install]
WantedBy=default.target

生效修改的配置:

1
2
systemctl daemon-reload
systemctl restart ollama

Step 3:开通防火墙

1
2
firewall-cmd --zone=public --add-port=11434/tcp --permanent
firewall-cmd --reload

也可以关闭防火墙:

1
systemctl stop firewalld

接口说明文档

这里使用API调用大模型最重要的就是跟大模型对话、是实现类似ChatGPT、文心、通义千问等网页对话功能的关键接口,请求的地址与参数如下:

POST /api/generate

接口请求实例:

image-20250603164312554

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{
"model": "qwen2.5:0.5b",
"messages": [
{
"role": "string",
"content": "string",
"images": "string"
}
],
"format": "string",
"stream": true,
"keep_alive": "string",
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The location to get the weather for, e.g. San Francisco, CA"
},
"format": {
"type": "string",
"description": "The format to return the weather in, e.g. 'celsius' or 'fahrenheit'",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location", "format"]
}
}
}
],
"options": {
"seed": 0,
"top_k": 0,
"top_p": 0,
"repeat_last_n": 0,
"temperature": 0,
"repeat_penalty": 0,
"stop": [
"string"
]
}
}

请求参数说明

名称 位置 类型 必选 中文名 说明
body body object none
model body string 模型名称 none
messages body [object] 聊天消息 none
role body string 角色 system、user或assistant
content body string 内容 none
images body string 图像 none
format body string 响应格式 none
stream body boolean 是否流式生成 none
keep_alive body string 模型内存保持时间 5m
tools body [object] 工具
options body object 配置参数 none
seed body integer 生成种子 none
top_k body integer 多样度 越高越多样,默认40
top_p body number 保守度 越低越保守,默认0.9
repeat_last_n body integer 防重复回顾距离 默认: 64, 0 = 禁用, -1 = num_ctx
temperature body number 温度值 越高创造性越强,默认0.8
repeat_penalty body number 重复惩罚强度 越高惩罚越强,默认1.1
stop body [string] 停止词 none

返回示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"model": "qwen2:0.5b",
"created_at": "2025-06-03T08:45:41.041814457Z",
"message": {
"role": "assistant",
"content": "我是阿里云开发的超大规模语言模型,也被称为通义千问。我的主要职责是回答用户的问题、提供服务、与人类进行交流和互动,以及帮助用户在互联网上找到有价值的信息和解决方案。我是一个AI模型,没有情感反应或主观意识,所以我不具备个人身份。"
},
"done_reason": "stop",
"done": true,
"total_duration": 6267031210,
"load_duration": 4157478209,
"prompt_eval_count": 10,
"prompt_eval_duration": 87222000,
"eval_count": 66,
"eval_duration": 1978551000
}
  • 返回结果
状态码 状态码含义 说明 数据模型
200 OK 成功 Inline
  • 返回数据结构

状态码 200 时才返回以下信息。

名称 类型 必选 约束 中文名 说明
model string true none 模型 none
created_at string true none 响应时间 none
message object true none 响应内容 none
role string true none 角色 none
content string true none 内容 none
tool_calls [object] false none 调用的工具集
done boolean false none none
total_duration integer false none 总耗时 none
load_duration integer false none 模型加载耗时 none
prompt_eval_count integer false none 提示词token消耗数 none
prompt_eval_duration integer false none 提示词耗时 none
eval_count integer false none 响应token消耗数 none
eval_duration integer false none 响应耗时 none
  • 对话操作演示

image-20250603164637218

视觉识别接口

也就是大模型可以分析图片,咱们可以上传一张图片让大模型识别,并结合图片进行提问。

Step 1:私有化多模态大模型

LLaVA( Large Language and Vision Assistant)是一个开源的多模态大模型,它可以同时处理文本、图像和其他类型的数据,实现跨模态的理解和生成。

网址:https://github.com/haotian-liu/LLaVA.git

1
ollama run llava

Step 2:准备图片素材

准备一张图片:

Snipaste_2024-06-22_16-01-31

然后通过程序把图片数据转出Base64字符串:

1
2
3
4
5
6
7
8
9
10
11
import base64
def main():
# 读取文件内容
with open("../assets/Snipaste_2024-06-22_16-01-31.png", "rb") as file:
bytes_data = file.read()
# 将字节数据编码为Base64字符串
base64_str = base64.b64encode(bytes_data).decode('utf-8')
# 打印Base64字符串
print(base64_str)
if __name__ == "__main__":
main()

生成的Base64也可以在【资料/多模态测试图片Base64字符串.txt 】中找到。

Step 3:调用多模态接口

在Ollama中可以通过内容生成接口和聊天对话接口来支持多模态,在此以聊天对话接口为例:

  • 图片信息通过images字段传入,且可传入多张
  • 识别的结果为引文,需要自行翻译

image-20240622163209620

ChatBox集成Ollama

说白了就是将命令行的输出进行美化,以两人对话的形式进行呈现。

Step 1:运行本地大模型

1
ollama run qwen2 --keepalive 1h

命令说明:

  • 命令运行的是通义大模型
  • 通过--keepalive参数设置大模型被加载到内存中的存活时长为1小时

Step 2:配置Ollama信息

安装ChatBox并在设置中输入Ollama的地址,为Linux的Ollama,端口为11434

image-20250603172212239