使用ollama搭建开源AI编程助手
水中投影,似真似幻
当前,大公司大模型几乎主导了AI行业。作为个人,把所有的数据和隐私全部上交,固然能获得很好的智能体验。不过,开源生态也一如既往的提供了一些丰富的选择,对许多个人和企业来说,用开源工具私有化部署开源模型不失为一种可行的方案。
这篇文章会基于开源的LLM模型(Qwen、Ollama、deepseek等)、开源的模型工具(Ollama)、开源的插件集成(VSCode+Continue插件)方案,搭建一个基础的编程编程助手。重点在于Ollama这个模型工具的用法。
Ollama 是一个开源的大型语言模型(LLM)工具,专注于在本地运行和管理各种 AI 模型。支持许多流行的模型,比如 deepseek-r1、gemma3、qwen3、llama4等。Ollama大大简化了用户下载和运行模型的过程。
同时,Ollama还获得了许多流行的集成工具的支持,比如Open WebUI、dify等等,许多开源工具都可以使用Ollama的接口。
环境
- RockyLinux 9
- Ollama 0.9.0
安装Ollama
Ollama的项目地址:https://github.com/ollama/ollama 官方网站:https://ollama.com/
这里使用二进制解压部署的方式。从Ollama官方下载压缩包,解压之后就可以直接使用了。
$ mkdir ollama
$ cd ollama
$ wget https://ollama.com/download/ollama-linux-amd64.tgz
$ tar xvf ollama-linux-amd64.tgz
$ export PATH=$PATH:$PWD/bin # 将ollama命令加入PATH环境变量中
官方也提供了其它安装方式。参考:https://ollama.com/download
安装好之后,使用ollama --version
查看Ollama的版本。
$ ollama --version
ollama version is 0.9.0
输出版本号就代表安装好了。
下载和运行模型
Ollama的命令比较简单,可以通过 ollama --help
查看所有的子命令。下面先介绍基础的模型管理命令。
模型的管理
Ollama的server端和client端都是同一个二进制文件 ollama。要运行客户端命令,先要启动Ollama的服务端。
运行服务端
ollama serve
运行Ollama服务端,测试中我们将其放置在前台运行,方便观察。
$ ollama serve
Ollama 的server端运行在 11434 端口上。几乎所有的Ollama命令都是通过HTTP协议和Ollama服务端的交互。
下载模块
新开一个终端,运行ollama pull <model name>
的命令。这里尝试下载 deepseek-r1:1.5b
和 qwen3:4b
模型。
新开窗口运行ollama命令的话,也需要执行
export PATH=$PATH:$PWD/bin
添加环境变量,否则就要写全ollama可执行文件的路径。
$ ollama pull deepseek-r1:1.5b
$ ollama pull qwen3:4b
Ollama官网有列出了所有可以直接下载使用的模型(可以使用 ollama pull 下载的)列表:https://ollama.com/library 。大部分时候,模型下载速度还可以。
ollama list
查看下载的模型
$ ollama list
NAME ID SIZE MODIFIED
deepseek-r1:1.5b a42b25d8c10a 1.1 GB 4 weeks ago
qwen3:4b a383baf4993b 2.6 GB 6 weeks ago
模型详情
ollama show <model name>
查看模型的详情,显示模型的参数量,上下文长度、量化信息等。
$ ollama show deepseek-r1:1.5b
Model
architecture qwen2
parameters 1.8B
context length 131072
embedding length 1536
quantization Q4_K_M
Capabilities
completion
Parameters
stop "<|begin▁of▁sentence|>"
stop "<|end▁of▁sentence|>"
stop "<|User|>"
stop "<|Assistant|>"
License
MIT License
Copyright (c) 2023 DeepSeek
删除模型
ollama rm <model name>
删除模型。删除后,模型会从文件系统中删掉。
$ ollama rm qwen3:4b
deleted 'qwen3:4b '
运行模型
上面的命令都是对静态模型文件的增删和查看。下面看看如何运行和停止模型、与模型对话。
运行模型
ollama run <model name>
运行 deepseek-r1:1.5b
模型。如果指定运行的模型不存在,Ollama会尝试从官方仓库下载。
$ ollama run deepseek-r1:1.5b
>>> hi
<think>
</think>
Hello! How can I assist you today? 😊
>>> Send a message (/? for help)
执行run命令后,Ollama提供了一个命令行的交互式对话界面,用于和模型进行对话。
查看运行中的模型
再新开一个终端,使用ollama ps
查看运行中的模型。
$ ollama ps
NAME ID SIZE PROCESSOR UNTIL
deepseek-r1:1.5b a42b25d8c10a 3.3 GB 100% CPU 4 minutes from now
从命令的输出结果中看到,由于本机没有显卡,模型完全使用了CPU运行。
停止模型运行
ollama stop <model name>
停止运行中的模型
$ ollama stop deepseek-r1:1.5b
以上就是ollama命令的基础用法。
HTTP访问Ollama
以上都是通过ollama命令和Ollama server交互,之前说过Ollama客户端和server之间是通过HTTP协议通信。所以,也不是非得用ollama命令,通用的HTTP client也能向Ollama的server端发起请求,也能完成上面的任务。比如,查看运行中的模型
$ curl -s 127.0.0.1:11434/api/ps | jq .
{
"models": [
{
"name": "deepseek-r1:1.5b",
"model": "deepseek-r1:1.5b",
"size": 1567668736,
"digest": "a42b25d8c10a841bd24724309898ae851466696a7d7f3a0a408b895538ccbc96",
"details": {
"parent_model": "",
"format": "gguf",
"family": "qwen2",
"families": [
"qwen2"
],
"parameter_size": "1.8B",
"quantization_level": "Q4_K_M"
},
"expires_at": "2025-06-12T18:17:00.179778313-04:00",
"size_vram": 0
}
]
}
发起chat请求
curl --request POST \
--url http://127.0.0.1:11434/api/generate \
--header 'content-type: application/json' \
--data '{
"model": "qwen3:4b",
"prompt": "讲个笑话",
"format": "json"
}'
环境变量
ollama命令行的参数很少,主要是通过环境变量控制server和client端的行为。
ollama server端环境变量
可以通过环境变量控制Ollama server的行为,详细环境变量查看:https://github.com/ollama/ollama/blob/main/envconfig/config.go#L239
下面是几个常用的server端环境变量:
- OLLAMA_MODELS:设置Ollama中本环境变量指定的目录加载模型
- OLLAMA_KEEP_ALIVE:模型在内存中的生存时间,到期之后会被stop,默认是5分钟
- OLLAMA_HOST:模型的监听IP地址,默认127.0.0.1,要对其它机器暴露的话,可以设置为 0.0.0.0
- OLLAMA_DEBUG:开启模型的DEBUG
- HTTP_PROXY:为Ollama设置HTTP代理
- OLLAMA_NUM_PARALLEL:客户端的请求并发数
对于临时部署,比较喜欢下面这种方式使用环境变量
$ OLLAMA_KEEP_ALIVE=480m OLLAMA_HOST=0.0.0.0 ollama serve
到达 OLLAMA_KEEP_ALIVE
指定的时间后,模型会停止运行,再对模型发起请求的时候会触发Ollama重新加载模型,这个加载速度比较慢,因此建议调高 OLLAMA_KEEP_ALIVE
这个环境变量。
默认Ollama运行在 127.0.0.1
上,为了让其它节点访问,OLLAMA_HOST
可以修改为 0.0.0.0 。
Ollama没有认证机制,因此暴露给其它机器的时候要格外小心,可以结合网络防火墙、封装一层HTTP反向代理添加认证进行加固。千万不要直接暴露Ollama端口到外网环境。
Ollama 客户端环境变量
Ollama的客户端主要的环境变量也是 OLLAMA_HOST
,但是和server上的用途不同,客户端使用这个环境变量可以让 ollama
客户端连接该变量指向的Ollama server,这个变量默认是本地Ollama server,也即 http://127.0.0.1:11434。
AI代码助手
接下来,结合VSCode和 continue 插件,在VSCode中调用Ollama部署的模型,实现一个基础的AI代码助手。
continue是专注于AI编程的IDE插件,支持VSCode 和JetBrains ,特点是可以方便的使用自己想要使用的模型。continue默认支持配置OpenAI、Deepseek、Gemini等大模型,也能支持Ollama、llama.cpp等开源工具部署的模型。灵活性很高,用户不必绑死在一个厂家上。 可以作为github copilot的一个替代方案。
vscode和continue插件配置
不同版本的continue插件配置方法可能不一样,旧版本continue用的是json配置文件,现在改为了yaml。Continue的配置项参考:https://docs.continue.dev/reference ,提供了很丰富的配置样例 。 下面是基于Ollama的配置方法。
- 首先为VSCode安装continue插件,完成后,在VSCode的左侧栏多了一个Continue的图标。
- 点击Continue图标,左侧出现Continue的对话界面,点击对话框下方的
Select model -> Add Chat Model
,弹出了添加模型的界面。窗口中添加的Ollama只能使用本地部署的Ollama,也即127.0.0.1,如果要使用远程的Ollama,需要编辑配置文件。 - 点击界面最下方的
config file
链接,进入Continue配置文件。配置文件路径实际是 ~/.continue/config.yaml ,也可以直接编辑。
在打开的Continue配置文件的models
配置块中添加如下的配置项:
...
models:
- name: qwen2.5-coder
model: "qwen2.5-coder:1.5b-base"
provider: ollama
apiBase: "http://192.168.1.10:11434"
roles:
- autocomplete
defaultCompletionOptions:
temperature: 0.7
- name: deepseek-r1
model: "deepseek-r1:1.5b"
provider: ollama
apiBase: "http://192.168.1.10:11434"
roles:
- chat
...
上面的配置中添加了两个模型,一个用于代码补齐(autocomplete),一个用于聊天(chat)。然后就可进行AI辅助编程了。
因为希望代码补全能快一点,因此对autocomplete的实时要求比较高,由于没有显卡,这里使用参数量较小的 qwen2.5-coder:1.5b-base
,速度快,但理解能力也就差一些。
做完上面的配置,返回到vscode的编程窗口,打开一个代码文件,现在可以测试补全功能了。
制作模型文件
如果Ollama的模型库中没有提供想要使用的模型怎么办?
常见的模型文件有 Safetensors 和 GGUF两种格式,前者是 Hugging Face开发的 ,安全系数高。而GGUF是专为量化模型设计的,将模型架构、权重和超参数整合为单一文件,简化部署,主要用于本地推理。
Ollama 默认支持gguf格式的模型,而Safetensors需要进行转换成gguf后,才能被Ollama使用。
加载gguf格式模型
如果Ollama官方没有提供想要的模型,可以到 https://huggingface.co/ 搜索gguf格式的模型。比如qwen1_5-7b-chat-q5_k_m.gguf
。
较小的模型只有一个 gguf 文件,可以先下载到本地,再创建文件Modelfile
,内容如下
FROM qwen1_5-7b-chat-q5_k_m.gguf
启动Ollama的服务端后,加载模型,名字自定义为 qwen1_5-7b
$ ollama create qwen1_5-7b -f Modelfile
查看加载的模型
$ ollama list
NAME ID SIZE MODIFIED
qwen1_5-7b:latest fd36fede3ee1 5.5 GB 7 seconds ago
...
之后就可以运行模型和对话了。
如果是较大的模型,可能有多个 gguf文件,这个时候就要进行合并了。
gguf文件合并
如果模型较大,可能有多个gguf,Ollama使用的时候,需要合并为一个gguf文件。llama.cpp 项目提供了合并的功能。建议使用llama.cpp项目的docker镜像来进行模型的合并。
下载模型拆分后的各个部分,拆分后的文件格式是带编号的,比如下面的这些文件,文件名字中指定了每个文件在整个模型中的顺序。
$ ls -lh qwen2.5-coder-7b-instruct-fp16-0000*
-rw-r--r-- 1 root root 3.7G 9月 20 2024 qwen2.5-coder-7b-instruct-fp16-00001-of-00004.gguf
-rw-r--r-- 1 root root 3.6G 9月 20 2024 qwen2.5-coder-7b-instruct-fp16-00002-of-00004.gguf
-rw-r--r-- 1 root root 3.6G 9月 20 2024 qwen2.5-coder-7b-instruct-fp16-00003-of-00004.gguf
-rw-r--r-- 1 root root 3.4G 9月 20 2024 qwen2.5-coder-7b-instruct-fp16-00004-of-00004.gguf
接下来,将存放模型文件的本地目录映射到容器的/tmp/gguf 目录下,启动容器
$ docker run -it -v ./:/tmp/gguf \
--entrypoint /bin/bash \
--rm ghcr.io/ggerganov/llama.cpp:full
进入容器后,检查文件没问题后执行模型合并操作,将上面4个分片合并成一个gguf文件:
$ ls /tmp/gguf
qwen2.5-coder-7b-instruct-fp16-00001-of-00004.gguf
qwen2.5-coder-7b-instruct-fp16-00002-of-00004.gguf
qwen2.5-coder-7b-instruct-fp16-00003-of-00004.gguf
qwen2.5-coder-7b-instruct-fp16-00004-of-00004.gguf
$ pwd
/app
$ ./llama-gguf-split --merge /tmp/gguf/qwen2.5-coder-7b-instruct-fp16-00001-of-00004.gguf /tmp/gguf/qwen2.5-coder-7b-instruct-fp16.gguf # 合并
$ ls -lh /tmp/gguf
total 29G
-rw-r--r-- 1 root root 3.7G Sep 20 2024 qwen2.5-coder-7b-instruct-fp16-00001-of-00004.gguf
-rw-r--r-- 1 root root 3.6G Sep 20 2024 qwen2.5-coder-7b-instruct-fp16-00002-of-00004.gguf
-rw-r--r-- 1 root root 3.6G Sep 20 2024 qwen2.5-coder-7b-instruct-fp16-00003-of-00004.gguf
-rw-r--r-- 1 root root 3.4G Sep 20 2024 qwen2.5-coder-7b-instruct-fp16-00004-of-00004.gguf
-rw-r--r-- 1 root root 15G Jun 12 15:20 qwen2.5-coder-7b-instruct-fp16.gguf
注意:
- 在存放模型碎片的 /tmp/gguf 目录下,最好不要有任何多余的文件,否则可能会执行失败
- 要在 /app 目录下执行
llama-gguf-split
命令,否则会找不到依赖的库文件 - 合并的gguf文件时,只需要指定分片中的第一个文件路径
- 最后一个参数是要输出的gguf的文件名字
生成的文件差不多是原来各分片文件的大小之和。
退出llama.cpp容器,编写Modelfile 加载合并之后的模型
FROM qwen2.5-coder-7b-instruct-fp16.gguf
用Ollama创建模型
$ ollama create qwen2.5-coder-7b-instruct -f models/Modelfile
$ ollama ls
NAME ID SIZE MODIFIED
qwen2.5-coder-7b-instruct:latest abf09b5f0c56 15 GB 33 seconds ago
Safetensors 格式的模型
safetensors格式的模型需要adapter才能支持,没试过,可以参考官方文档。
https://github.com/ollama/ollama/blob/main/docs/import.md
总结
Ollama作为开源的大语言模型本地化部署工具,为开发者提供了简单高效的解决方案。它支持主流开源模型的快速部署与管理,无需GPU即可在纯CPU环境下运行,既保障了数据隐私安全,又降低了使用门槛。通过命令行工具可实现模型的下载、运行和监控,并支持自定义模型加载。无论是隐私敏感场景的应用开发,还是本地AI方案的快速验证,Ollama都能提供灵活可靠的支撑。
但是,Ollama也有非常严重的短板,那就是只支持单机部署和推理,无法集群化、规模化使用。不过,Ollama依旧是模型运行和验证领域的绝佳工具。即使我没有显卡,只有一台128G内存和24核CPU的老服务器,也能拿一些小参数的模型做做试验。
个人以为,当下的大模型正如半个世纪以前的计算机,体格巨大,性能缓慢。随着技术发展,未来大模型也会和手机、电脑一样,性能更强、体积更小,走进千家万户。
Last updates at Jun 18,2025
Views (74)
total 0 comments