使用ollama搭建开源AI编程助手

Jun 15,2025 AI Ollama

build-shadow

水中投影,似真似幻

当前,大公司大模型几乎主导了AI行业。作为个人,把所有的数据和隐私全部上交,固然能获得很好的智能体验。不过,开源生态也一如既往的提供了一些丰富的选择,对许多个人和企业来说,用开源工具私有化部署开源模型不失为一种可行的方案。

这篇文章会基于开源的LLM模型(Qwen、Ollama、deepseek等)、开源的模型工具(Ollama)、开源的插件集成(VSCode+Continue插件)方案,搭建一个基础的编程编程助手。重点在于Ollama这个模型工具的用法。

Ollama 是一个开源的大型语言模型(LLM)工具,专注于在本地运行和管理各种 AI 模型。支持许多流行的模型,比如 deepseek-r1、gemma3、qwen3、llama4等。Ollama大大简化了用户下载和运行模型的过程。

同时,Ollama还获得了许多流行的集成工具的支持,比如Open WebUIdify等等,许多开源工具都可以使用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.5bqwen3: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)

Leave a Comment

total 0 comments